AIRS Code Collection
Functions
diff_ret.c File Reference

Extract differences between retrieval data. More...

#include "libairs.h"

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 

Detailed Description

Extract differences between retrieval data.

Definition in file diff_ret.c.

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 28 of file diff_ret.c.

30 {
31
32 static ret_t ret, ret2;
33
34 static FILE *out;
35
36 static double mean[NPG], sigma[NPG], min[NPG], max[NPG],
37 tt[NPG], lon[NPG], lat[NPG], temp[NPG], press[NPG];
38
39 /* Check arguments... */
40 if (argc < 5)
41 ERRMSG("Give parameters: <ctl> <airs.nc> <airs2.nc> <diff.tab>");
42
43 /* Read AIRS data... */
44 read_retr(argv[2], &ret);
45 read_retr(argv[3], &ret2);
46
47 /* Compute differences... */
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 /* Create output file... */
66 printf("Write retrieval differences data: %s\n", argv[4]);
67 if (!(out = fopen(argv[4], "w")))
68 ERRMSG("Cannot create file!");
69
70 /* Write header... */
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 /* Write output... */
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,
88 mean[ip] / ret.nds,
89 sqrt(sigma[ip] / ret.nds - gsl_pow_2(mean[ip] / ret.nds)),
90 min[ip], max[ip]);
91
92 /* Close file... */
93 fclose(out);
94
95 return EXIT_SUCCESS;
96}
#define ERRMSG(...)
Print error message and quit program.
Definition: jurassic.h:237
void read_retr(char *filename, ret_t *ret)
Read AIRS retrieval data.
Definition: libairs.c:1219
#define NPG
Maximum number of data points per granule.
Definition: libairs.h:102
Retrieval results.
Definition: libairs.h:237
double lat[NDS][NPG]
Latitude [deg].
Definition: libairs.h:255
double t[NDS][NPG]
Temperature [K].
Definition: libairs.h:261
double p[NDS][NPG]
Pressure [hPa].
Definition: libairs.h:258
double z[NDS][NPG]
Altitude [km].
Definition: libairs.h:249
int nds
Number of data sets.
Definition: libairs.h:240
int np
Number of data points.
Definition: libairs.h:243
double time[NDS][NPG]
Time (seconds since 2000-01-01T00:00Z).
Definition: libairs.h:246
double lon[NDS][NPG]
Longitude [deg].
Definition: libairs.h:252
Here is the call graph for this function: