30 {
31
32 static ret_t ret, ret2;
33
34 static FILE *out;
35
38
39
40 if (argc < 5)
41 ERRMSG(
"Give parameters: <ctl> <airs.nc> <airs2.nc> <diff.tab>");
42
43
46
47
48 for (
int ids = 0; ids < ret.
nds; ids++)
49 for (
int ip = 0; ip < ret.
np; ip++) {
50 if (ret.
time[ids][ip] != ret2.
time[ids][ip] ||
51 ret.
lon[ids][ip] != ret2.
lon[ids][ip] ||
52 ret.
lat[ids][ip] != ret2.
lat[ids][ip])
53 ERRMSG(
"Data files do not match!");
54 tt[ip] += ret.
time[ids][ip];
55 lon[ip] += ret.
lon[ids][ip];
56 lat[ip] += ret.
lat[ids][ip];
57 press[ip] += ret.
p[ids][ip];
58 temp[ip] += ret.
t[ids][ip];
59 mean[ip] += ret2.
t[ids][ip] - ret.
t[ids][ip];
60 sigma[ip] += gsl_pow_2(ret2.
t[ids][ip] - ret.
t[ids][ip]);
61 min[ip] = GSL_MIN(min[ip], ret2.
t[ids][ip] - ret.
t[ids][ip]);
62 max[ip] = GSL_MAX(max[ip], ret2.
t[ids][ip] - ret.
t[ids][ip]);
63 }
64
65
66 printf("Write retrieval differences data: %s\n", argv[4]);
67 if (!(out = fopen(argv[4], "w")))
68 ERRMSG(
"Cannot create file!");
69
70
71 fprintf(out,
72 "# $1 = time (seconds since 01-JAN-2000, 00:00 UTC)\n"
73 "# $2 = altitude [km]\n"
74 "# $3 = longitude [deg]\n"
75 "# $4 = latitude [deg]\n"
76 "# $5 = pressure (set 1) [hPa]\n"
77 "# $6 = temperature (set 1) [K]\n"
78 "# $7 = temperature difference (mean, set 2 - set 1) [K]\n"
79 "# $8 = temperature difference (sigma, set 2 - set 1) [K]\n"
80 "# $9 = temperature difference (minimum, set 2 - set 1) [K]\n"
81 "# $10 = temperature difference (maximum, set 2 - set 1) [K]\n\n");
82
83
84 for (
int ip = 0; ip < ret.
np; ip++)
85 fprintf(out, "%.2f %g %g %g %g %g %g %g %g %g\n",
86 tt[ip] / ret.
nds, ret.
z[0][ip], lon[ip] / ret.
nds,
87 lat[ip] / ret.
nds, press[ip] / ret.
nds, temp[ip] / ret.
nds,
89 sqrt(sigma[ip] / ret.
nds - gsl_pow_2(mean[ip] / ret.
nds)),
90 min[ip], max[ip]);
91
92
93 fclose(out);
94
95 return EXIT_SUCCESS;
96}
#define ERRMSG(...)
Print error message and quit program.
void read_retr(char *filename, ret_t *ret)
Read AIRS retrieval data.
#define NPG
Maximum number of data points per granule.
double lat[NDS][NPG]
Latitude [deg].
double t[NDS][NPG]
Temperature [K].
double p[NDS][NPG]
Pressure [hPa].
double z[NDS][NPG]
Altitude [km].
int nds
Number of data sets.
int np
Number of data points.
double time[NDS][NPG]
Time (seconds since 2000-01-01T00:00Z).
double lon[NDS][NPG]
Longitude [deg].