135 {
136
138
139 static ncd_t ncd, ncd2;
140
141 static FILE *out;
142
146
147
148 if (argc < 5)
149 ERRMSG(
"Give parameters: <ctl> <airs.nc> <airs2.nc> <diff.tab>");
150
151
153
154
157
158
159 for (
int itrack = 0; itrack <
L2_NTRACK; itrack++)
160 for (
int ixtrack = 0; ixtrack <
L2_NXTRACK; ixtrack++) {
161 for (
int ip = 0; ip <
L2_NLAY; ip++) {
162 if (ncd.
l1_time[3 * itrack + 1][3 * ixtrack + 1] !=
163 ncd2.
l1_time[3 * itrack + 1][3 * ixtrack + 1]
164 || ncd.
l1_lon[3 * itrack + 1][3 * ixtrack + 1] !=
165 ncd2.
l1_lon[3 * itrack + 1][3 * ixtrack + 1]
166 || ncd.
l1_lat[3 * itrack + 1][3 * ixtrack + 1] !=
167 ncd2.
l1_lat[3 * itrack + 1][3 * ixtrack + 1])
168 ERRMSG(
"Data files do not match!");
169 tt[ip] += ncd.
l1_time[3 * itrack + 1][3 * ixtrack + 1];
170 lon[ip] += ncd.
l1_lon[3 * itrack + 1][3 * ixtrack + 1];
171 lat[ip] += ncd.
l1_lat[3 * itrack + 1][3 * ixtrack + 1];
172 z[ip] += ncd.
l2_z[itrack][ixtrack][ip];
173 press[ip] += ncd.
l2_p[ip];
174 temp[ip] += ncd.
l2_t[itrack][ixtrack][ip];
176 ncd.
l2_z[itrack][ixtrack][ip]);
177 double tip =
LIN(ncd2.
l2_z[itrack][ixtrack][idx],
178 ncd2.
l2_t[itrack][ixtrack][idx],
179 ncd2.
l2_z[itrack][ixtrack][idx + 1],
180 ncd2.
l2_t[itrack][ixtrack][idx + 1],
181 ncd.
l2_z[itrack][ixtrack][ip]);
182 mean[ip] += tip - ncd.
l2_t[itrack][ixtrack][ip];
183 sigma[ip] += gsl_pow_2(tip - ncd.
l2_t[itrack][ixtrack][ip]);
184 min[ip] = GSL_MIN(min[ip], tip - ncd.
l2_t[itrack][ixtrack][ip]);
185 max[ip] = GSL_MAX(max[ip], tip - ncd.
l2_t[itrack][ixtrack][ip]);
186 }
187 }
188
189
190 printf("Write a priori differences data: %s\n", argv[4]);
191 if (!(out = fopen(argv[4], "w")))
192 ERRMSG(
"Cannot create file!");
193
194
195 fprintf(out,
196 "# $1 = time (seconds since 01-JAN-2000, 00:00 UTC)\n"
197 "# $2 = altitude [km]\n"
198 "# $3 = longitude [deg]\n"
199 "# $4 = latitude [deg]\n"
200 "# $5 = pressure (set 1) [hPa]\n"
201 "# $6 = temperature (set 1) [K]\n"
202 "# $7 = temperature difference (mean, set 2 - set 1) [K]\n"
203 "# $8 = temperature difference (sigma, set 2 - set 1) [K]\n"
204 "# $9 = temperature difference (minimum, set 2 - set 1) [K]\n"
205 "# $10 = temperature difference (maximum, set 2 - set 1) [K]\n\n");
206
207
208 for (
int ip = 0; ip <
L2_NLAY; ip++)
209 fprintf(out, "%.2f %g %g %g %g %g %g %g %g %g\n",
219 max[ip]);
220
221
222 fclose(out);
223}
void read_nc(char *filename, ncd_t *ncd)
void read_ctl(int argc, char *argv[], ctl_t *ctl)
Read forward model control parameters.
int locate_irr(const double *xx, const int n, const double x)
Find array index for irregular grid.
#define ERRMSG(...)
Print error message and quit program.
#define LIN(x0, y0, x1, y1, x)
Compute linear interpolation.
Forward model control parameters.