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>");
 
  152  read_ctl(argc, argv, &ctl);
 
  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];
 
  175        int idx = locate_irr(ncd2.
l2_z[itrack][ixtrack], 
L2_NLAY,
 
  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)
 
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).