34 static double tbg[
NDS], tabg[
NDS];
44 ERRMSG(
"Give parameters: <ctl> <airs.nc> <map.tab>");
47 scan_ctl(argc, argv,
"SET", -1,
"full", set);
48 const double z0 =
scan_ctl(argc, argv,
"Z0", -1,
"", NULL);
50 (int)
scan_ctl(argc, argv,
"BG_POLY_X", -1,
"5", NULL);
52 (int)
scan_ctl(argc, argv,
"BG_POLY_Y", -1,
"0", NULL);
53 const int bg_smooth_x =
54 (int)
scan_ctl(argc, argv,
"BG_SMOOTH_X", -1,
"0", NULL);
55 const int bg_smooth_y =
56 (int)
scan_ctl(argc, argv,
"BG_SMOOTH_Y", -1,
"0", NULL);
57 const int npscan = (int)
scan_ctl(argc, argv,
"NPSCAN", -1,
"90", NULL);
63 for (ip = 0; ip <= ret.
np; ip++) {
65 ERRMSG(
"Altitude level not found!");
66 if (fabs(ret.
z[0][ip] - z0) < 0.1)
74 for (
int ix = 0; ix < wave.
nx; ix++)
75 for (
int iy = 0; iy < wave.
ny; iy++)
76 tbg[iy * npscan + ix] = wave.
bg[ix][iy];
80 for (
int ix = 0; ix < wave.
nx; ix++)
81 for (
int iy = 0; iy < wave.
ny; iy++)
82 tabg[iy * npscan + ix] = wave.
bg[ix][iy];
85 printf(
"Write AIRS map data: %s\n", argv[3]);
86 if (!(out = fopen(argv[3],
"w")))
87 ERRMSG(
"Cannot create file!");
91 "# $1 = time (seconds since 01-JAN-2000, 00:00 UTC)\n"
92 "# $2 = altitude [km]\n"
93 "# $3 = longitude [deg]\n"
94 "# $4 = latitude [deg]\n"
95 "# $5 = pressure [hPa]\n"
96 "# $6 = temperature (retrieved) [K]\n"
97 "# $7 = temperature (retrieved) perturbation [K]\n"
98 "# $8 = temperature (a priori) [K]\n"
99 "# $9 = temperature (a priori) perturbation [K]\n");
101 "# $10 = temperature (total error) [K]\n"
102 "# $11 = temperature (noise error) [K]\n"
103 "# $12 = temperature (forward model error) [K]\n"
104 "# $13 = temperature (measurement content)\n"
105 "# $14 = temperature (resolution)\n" "# $15 = normalized chi^2\n");
108 for (
int ids = 0; ids < ret.
nds; ids++) {
111 if (ids % npscan == 0)
115 if (ret.
lon[ids][ip] < -180 || ret.
lon[ids][ip] > 180
116 || ret.
lat[ids][ip] < -90 || ret.
lat[ids][ip] > 90
117 || ret.
t[ids][ip] < 100 || ret.
t[ids][ip] > 400)
121 int asc = (ret.
lat[ids > npscan ? ids : ids + npscan][0]
122 > ret.
lat[ids > npscan ? ids - npscan : ids][0]);
125 if (set[0] ==
'f' || (set[0] ==
'a' && asc) || (set[0] ==
'd' && !asc))
126 fprintf(out,
"%.2f %g %g %g %g %g %g %g %g %g %g %g %g %g %g\n",
127 ret.
time[ids][ip], ret.
z[ids][ip],
128 ret.
lon[ids][ip], ret.
lat[ids][ip],
129 ret.
p[ids][ip], ret.
t[ids][ip], ret.
t[ids][ip] - tbg[ids],
130 ret.
t_apr[ids][ip], ret.
t_apr[ids][ip] - tabg[ids],
double scan_ctl(int argc, char *argv[], const char *varname, int arridx, const char *defvalue, char *value)
Search control parameter file for variable entry.
#define LEN
Maximum length of ASCII data lines.
#define ERRMSG(...)
Print error message and quit program.
void background_smooth(wave_t *wave, int npts_x, int npts_y)
Smooth background.
void background_poly(wave_t *wave, int dim_x, int dim_y)
Get background based on polynomial fits.
void ret2wave(ret_t *ret, wave_t *wave, int dataset, int ip)
Convert AIRS retrieval results to wave analysis struct.
void read_retr(char *filename, ret_t *ret)
Read AIRS retrieval data.
AIRS Code Collection library declarations.
#define NDS
Maximum number of data sets per granule.
int main(int argc, char *argv[])
double t_apr[NDS][NPG]
Temperature (a priori data) [K].
double t_noise[NDS][NPG]
Temperature (noise error) [K].
double lat[NDS][NPG]
Latitude [deg].
double t_cont[NDS][NPG]
Temperature (measurement content).
double t[NDS][NPG]
Temperature [K].
double t_fm[NDS][NPG]
Temperature (forward model error) [K].
double p[NDS][NPG]
Pressure [hPa].
double z[NDS][NPG]
Altitude [km].
double t_res[NDS][NPG]
Temperature (resolution).
int nds
Number of data sets.
double t_tot[NDS][NPG]
Temperature (total error) [K].
int np
Number of data points.
double time[NDS][NPG]
Time (seconds since 2000-01-01T00:00Z).
double lon[NDS][NPG]
Longitude [deg].
int nx
Number of across-track values.
int ny
Number of along-track values.
double bg[WX][WY]
Background [K].