33int airs_chan[
L1_NCHAN] = { 54, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
34 2035, 2036, 2040, 2041, 2052, 2053, 2054, 2055,
35 2067, 2075, 2076, 2077, 2078, 2079, 2080, 2081,
36 2082, 2086, 2088, 2089, 2091, 2092, 2093
55 static airs_rad_gran_t airs_rad_gran;
56 static airs_ret_gran_t airs_ret_gran;
63 ERRMSG(
"Give parameters: <airs_l1_file> <airs_l2_file> <out.nc>");
66 if (argv[1][0] !=
'-') {
69 printf(
"Read AIRS Level-1 file: %s\n", argv[1]);
70 airs_rad_rdr(argv[1], &airs_rad_gran);
73 for (
int track = 0; track < AIRS_RAD_GEOTRACK; track++)
74 for (
int xtrack = 0; xtrack < AIRS_RAD_GEOXTRACK; xtrack++)
75 for (
int ichan = 0; ichan <
L1_NCHAN; ichan++)
76 if ((airs_rad_gran.state[track][xtrack] != 0)
77 || (airs_rad_gran.ExcludedChans[
airs_chan[ichan]] > 2)
78 || (airs_rad_gran.CalChanSummary[
airs_chan[ichan]] & 8)
79 || (airs_rad_gran.CalChanSummary[
airs_chan[ichan]] & (32 + 64))
80 || (airs_rad_gran.CalFlag[track][
airs_chan[ichan]] & 16))
81 airs_rad_gran.radiances[track][xtrack][
airs_chan[ichan]]
85 for (
int track = 0; track < AIRS_RAD_GEOTRACK; track++)
86 for (
int xtrack = 0; xtrack < AIRS_RAD_GEOXTRACK; xtrack++) {
87 l1.
time[track][xtrack]
88 = airs_rad_gran.Time[track][xtrack] - 220838400.;
90 = airs_rad_gran.Longitude[track][xtrack];
92 = airs_rad_gran.Latitude[track][xtrack];
94 = airs_rad_gran.satheight[track];
96 = airs_rad_gran.sat_lon[track];
98 = airs_rad_gran.sat_lat[track];
99 for (
int ichan = 0; ichan <
L1_NCHAN; ichan++) {
101 = airs_rad_gran.nominal_freq[
airs_chan[ichan]];
102 l1.
rad[track][xtrack][ichan]
103 = airs_rad_gran.radiances[track][xtrack][
airs_chan[ichan]] *
113 if (argv[2][0] !=
'-') {
116 printf(
"Read AIRS Level-2 file: %s\n", argv[2]);
117 airs_ret_rdr(argv[2], &airs_ret_gran);
120 for (
int track = 0; track < AIRS_RET_GEOTRACK; track++)
121 for (
int xtrack = 0; xtrack < AIRS_RET_GEOXTRACK; xtrack++)
122 for (
int lay = 1; lay < AIRS_RET_STDPRESSURELAY; lay++)
123 if (airs_ret_gran.GP_Height[track][xtrack][lay] <= -9000.
124 || airs_ret_gran.TAirStd[track][xtrack][lay] <= -9000.) {
125 airs_ret_gran.GP_Height[track][xtrack][lay] = GSL_NAN;
126 airs_ret_gran.TAirStd[track][xtrack][lay] = GSL_NAN;
130 for (
int track = 0; track < AIRS_RET_GEOTRACK; track++)
131 for (
int xtrack = 0; xtrack < AIRS_RET_GEOXTRACK; xtrack++)
132 for (
int lay = 1; lay < AIRS_RET_STDPRESSURELAY; lay++) {
133 l2.
time[track][xtrack]
134 = airs_ret_gran.Time[track][xtrack] - 220838400.;
135 l2.
z[track][xtrack][lay - 1]
136 = airs_ret_gran.GP_Height[track][xtrack][lay] / 1000.;
137 l2.
lon[track][xtrack]
138 = airs_ret_gran.Longitude[track][xtrack];
139 l2.
lat[track][xtrack]
140 = airs_ret_gran.Latitude[track][xtrack];
142 = airs_ret_gran.pressStd[lay];
143 l2.
t[track][xtrack][lay - 1]
144 = airs_ret_gran.TAirStd[track][xtrack][lay];
148 for (
int track = 0; track <
L2_NTRACK; track++)
149 for (
int xtrack = 0; xtrack <
L2_NXTRACK; xtrack++)
150 for (
int lay = 0; lay <
L2_NLAY; lay++)
151 l2.
z[track][xtrack][lay]
152 =
gph2z(l2.
z[track][xtrack][lay]);
168 return G0 / a - sqrt(gsl_pow_2(
G0 / a) - 2 *
G0 * gph / a);
#define ERRMSG(...)
Print error message and quit program.
#define G0
Standard gravity [m/s^2].
void write_l2(char *filename, airs_l2_t *l2)
Write AIRS Level-2 data.
void write_l1(char *filename, airs_l1_t *l1)
Write AIRS Level-1 data.
AIRS Code Collection library declarations.
double lon[L1_NTRACK][L1_NXTRACK]
Footprint longitude [deg].
double nu[L1_NCHAN]
Channel frequencies [cm^-1].
double sat_lon[L1_NTRACK]
Satellite longitude [deg].
double time[L1_NTRACK][L1_NXTRACK]
Time (seconds since 2000-01-01T00:00Z).
float rad[L1_NTRACK][L1_NXTRACK][L1_NCHAN]
Radiance [W/(m^2 sr cm^-1)].
double sat_z[L1_NTRACK]
Satellite altitude [km].
double lat[L1_NTRACK][L1_NXTRACK]
Footprint latitude [deg].
double sat_lat[L1_NTRACK]
Satellite latitude [deg].
double time[L2_NTRACK][L2_NXTRACK]
Time (seconds since 2000-01-01T00:00Z).
double p[L2_NLAY]
Pressure [hPa].
double z[L2_NTRACK][L2_NXTRACK][L2_NLAY]
Geopotential height [km].
double t[L2_NTRACK][L2_NXTRACK][L2_NLAY]
Temperature [K].
double lat[L2_NTRACK][L2_NXTRACK]
Latitude [deg].
double lon[L2_NTRACK][L2_NXTRACK]
Longitude [deg].