36 int nc_result=(cmd); \
37 if(nc_result!=NC_NOERR) \
38 ERRMSG("%s", nc_strerror(nc_result)); \
139 static ncd_t ncd, ncd2;
149 ERRMSG(
"Give parameters: <ctl> <airs.nc> <airs2.nc> <diff.tab>");
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]);
190 printf(
"Write a priori differences data: %s\n", argv[4]);
191 if (!(out = fopen(argv[4],
"w")))
192 ERRMSG(
"Cannot create file!");
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");
208 for (
int ip = 0; ip <
L2_NLAY; ip++)
209 fprintf(out,
"%.2f %g %g %g %g %g %g %g %g %g\n",
234 printf(
"Read netCDF file: %s\n", filename);
235 NC(nc_open(filename, NC_WRITE, &ncd->
ncid));
238 NC(nc_inq_varid(ncd->
ncid,
"l1_time", &varid));
240 NC(nc_inq_varid(ncd->
ncid,
"l1_lon", &varid));
241 NC(nc_get_var_double(ncd->
ncid, varid, ncd->
l1_lon[0]));
242 NC(nc_inq_varid(ncd->
ncid,
"l1_lat", &varid));
243 NC(nc_get_var_double(ncd->
ncid, varid, ncd->
l1_lat[0]));
244 NC(nc_inq_varid(ncd->
ncid,
"l1_sat_z", &varid));
246 NC(nc_inq_varid(ncd->
ncid,
"l1_sat_lon", &varid));
248 NC(nc_inq_varid(ncd->
ncid,
"l1_sat_lat", &varid));
250 NC(nc_inq_varid(ncd->
ncid,
"l1_nu", &varid));
251 NC(nc_get_var_double(ncd->
ncid, varid, ncd->
l1_nu));
252 NC(nc_inq_varid(ncd->
ncid,
"l1_rad", &varid));
253 NC(nc_get_var_float(ncd->
ncid, varid, ncd->
l1_rad[0][0]));
256 NC(nc_inq_varid(ncd->
ncid,
"l2_z", &varid));
257 NC(nc_get_var_double(ncd->
ncid, varid, ncd->
l2_z[0][0]));
258 NC(nc_inq_varid(ncd->
ncid,
"l2_press", &varid));
259 NC(nc_get_var_double(ncd->
ncid, varid, ncd->
l2_p));
260 NC(nc_inq_varid(ncd->
ncid,
"l2_temp", &varid));
261 NC(nc_get_var_double(ncd->
ncid, varid, ncd->
l2_t[0][0]));
int main(int argc, char *argv[])
#define NC(cmd)
Execute netCDF library command and check result.
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.
JURASSIC library declarations.
#define ERRMSG(...)
Print error message and quit program.
#define NP
Maximum number of atmospheric data points.
#define LIN(x0, y0, x1, y1, x)
Compute linear interpolation.
Forward model control parameters.
double l1_lat[L1_NTRACK][L1_NXTRACK]
Footprint latitude [deg].
double l1_lon[L1_NTRACK][L1_NXTRACK]
Footprint longitude [deg].
double l2_z[L2_NTRACK][L2_NXTRACK][L2_NLAY]
Altitude [km].
double l1_sat_lat[L1_NTRACK]
Satellite latitude [deg].
int np
Number of retrieval altitudes.
double l1_sat_lon[L1_NTRACK]
Satellite longitude [deg].
double l2_p[L2_NLAY]
Pressure [hPa].
double l2_t[L2_NTRACK][L2_NXTRACK][L2_NLAY]
Temperature [K].
double l1_nu[L1_NCHAN]
Channel frequencies [cm^-1].
double l1_sat_z[L1_NTRACK]
Satellite altitude [km].
float l1_rad[L1_NTRACK][L1_NXTRACK][L1_NCHAN]
Radiance [W/(m^2 sr cm^-1)].
double l1_time[L1_NTRACK][L1_NXTRACK]
Time (seconds since 2000-01-01T00:00Z).