46int iasi_chan[
L1_NCHAN] = { 71, 88, 89, 90, 91, 92, 93, 94, 95, 96,
47 97, 98, 99, 6712, 6720, 6735, 6742, 6749, 6750,
48 6756, 6757, 6763, 6764, 6770, 6771, 6777, 6778,
49 6784, 6791, 6797, 6838, 6855, 6866
166 double array[
EX][
EY],
278 int ichan, lay, track = 0, xtrack, format;
282 ERRMSG(
"Give parameters: <ctl> <iasi_l1_file> <metbase> <out.nc>");
286 ALLOC(met0,
met_t, 1);
287 ALLOC(met1,
met_t, 1);
291 format = (int) scan_ctl(argc, argv,
"FORMAT", -1,
"1", NULL);
298 for (track = 0; track < iasi_rad->
ntrack; track++)
299 for (xtrack = 0; xtrack <
L1_NXTRACK; xtrack++) {
300 l1.
time[track][xtrack]
301 = iasi_rad->
Time[track][xtrack];
302 l1.
lon[track][xtrack]
304 l1.
lat[track][xtrack]
305 = iasi_rad->
Latitude[track][xtrack];
307 = iasi_rad->
Sat_z[track];
312 for (ichan = 0; ichan <
L1_NCHAN; ichan++) {
315 l1.
rad[track][xtrack][ichan]
326 get_met(&ctl2, argv[3], ts, met0, met1);
329 for (track = 0; track < (int) l2.
ntrack; track++)
330 for (xtrack = 0; xtrack <
L1_NXTRACK; xtrack++)
331 for (lay = 0; lay <
L2_NLAY; lay++) {
332 l2.
time[track][xtrack] = l1.
time[track][xtrack];
333 l2.
lon[track][xtrack] = l1.
lon[track][xtrack];
334 l2.
lat[track][xtrack] = l1.
lat[track][xtrack];
335 l2.
p[lay] = 1013.25 * exp(-2.5 * lay / 7.0);
337 l2.
lon[track][xtrack], l2.
lat[track][xtrack],
338 NULL, NULL, &l2.
z[track][xtrack][lay],
339 &l2.
t[track][xtrack][lay],
340 NULL, NULL, NULL, NULL, NULL, NULL);
379 if (t > met1->
time) {
380 memcpy(met0, met1,
sizeof(
met_t));
397 int year, mon, day, hour, min, sec;
401 t6 = floor(t / dt_met) * dt_met;
403 t6 = ceil(t / dt_met) * dt_met;
406 jsec2time(t6, &year, &mon, &day, &hour, &min, &sec, &r);
409 sprintf(filename,
"%s_%d_%02d_%02d_%02d.nc", metbase, year, mon, day, hour);
415 double array[
EX][
EY],
422 double aux00, aux01, aux10, aux11;
425 aux00 = array[ix][iy];
426 aux01 = array[ix][iy + 1];
427 aux10 = array[ix + 1][iy];
428 aux11 = array[ix + 1][iy + 1];
431 aux00 = wy * (aux00 - aux01) + aux01;
432 aux11 = wy * (aux10 - aux11) + aux11;
433 *var = wx * (aux00 - aux11) + aux11;
448 double aux00, aux01, aux10, aux11;
451 aux00 = wp * (array[ix][iy][ip] - array[ix][iy][ip + 1])
452 + array[ix][iy][ip + 1];
453 aux01 = wp * (array[ix][iy + 1][ip] - array[ix][iy + 1][ip + 1])
454 + array[ix][iy + 1][ip + 1];
455 aux10 = wp * (array[ix + 1][iy][ip] - array[ix + 1][iy][ip + 1])
456 + array[ix + 1][iy][ip + 1];
457 aux11 = wp * (array[ix + 1][iy + 1][ip] - array[ix + 1][iy + 1][ip + 1])
458 + array[ix + 1][iy + 1][ip + 1];
461 aux00 = wy * (aux00 - aux01) + aux01;
462 aux11 = wy * (aux10 - aux11) + aux11;
463 *var = wx * (aux00 - aux11) + aux11;
489 if (met->
lon[met->
nx - 1] > 180 && lon < 0)
493 ip = locate_irr(met->
p, met->
np, p);
494 ix = locate_reg(met->
lon, met->
nx, lon);
495 iy = locate_reg(met->
lat, met->
ny, lat);
498 wp = (met->
p[ip + 1] - p) / (met->
p[ip + 1] - met->
p[ip]);
499 wx = (met->
lon[ix + 1] - lon) / (met->
lon[ix + 1] - met->
lon[ix]);
500 wy = (met->
lat[iy + 1] - lat) / (met->
lat[iy + 1] - met->
lat[iy]);
545 double h2o0, h2o1, o30, o31, ps0, ps1, pt0, pt1, pv0, pv1, t0, t1, u0, u1,
546 v0, v1, w0, w1, wt, z0, z1;
550 ps == NULL ? NULL : &ps0,
551 pt == NULL ? NULL : &pt0,
552 z == NULL ? NULL : &z0,
553 t == NULL ? NULL : &t0,
554 u == NULL ? NULL : &u0,
555 v == NULL ? NULL : &v0,
556 w == NULL ? NULL : &w0,
557 pv == NULL ? NULL : &pv0,
558 h2o == NULL ? NULL : &h2o0, o3 == NULL ? NULL : &o30);
560 ps == NULL ? NULL : &ps1,
561 pt == NULL ? NULL : &pt1,
562 z == NULL ? NULL : &z1,
563 t == NULL ? NULL : &t1,
564 u == NULL ? NULL : &u1,
565 v == NULL ? NULL : &v1,
566 w == NULL ? NULL : &w1,
567 pv == NULL ? NULL : &pv1,
568 h2o == NULL ? NULL : &h2o1, o3 == NULL ? NULL : &o31);
575 *ps = wt * (ps0 - ps1) + ps1;
577 *pt = wt * (pt0 - pt1) + pt1;
579 *z = wt * (z0 - z1) + z1;
581 *t = wt * (t0 - t1) + t1;
583 *u = wt * (u0 - u1) + u1;
585 *v = wt * (v0 - v1) + v1;
587 *w = wt * (w0 - w1) + w1;
589 *pv = wt * (pv0 - pv1) + pv1;
591 *h2o = wt * (h2o0 - h2o1) + h2o1;
593 *o3 = wt * (o30 - o31) + o31;
604 ctl2->
dt_met = scan_ctl(argc, argv,
"DT_MET", -1,
"21600", NULL);
605 scan_ctl(argc, argv,
"MET_GEOPOT", -1,
"", ctl2->
met_geopot);
606 ctl2->
met_dx = (int) scan_ctl(argc, argv,
"MET_DX", -1,
"1", NULL);
607 ctl2->
met_dy = (int) scan_ctl(argc, argv,
"MET_DY", -1,
"1", NULL);
608 ctl2->
met_dp = (int) scan_ctl(argc, argv,
"MET_DP", -1,
"1", NULL);
609 ctl2->
met_sx = (int) scan_ctl(argc, argv,
"MET_SX", -1,
"20", NULL);
610 ctl2->
met_sy = (int) scan_ctl(argc, argv,
"MET_SY", -1,
"10", NULL);
611 ctl2->
met_sp = (int) scan_ctl(argc, argv,
"MET_SP", -1,
"1", NULL);
621 char levname[LEN], tstr[10];
623 static float help[
EX *
EY];
625 int ix, iy, ip, dimid, ncid, varid, year, mon, day, hour;
630 printf(
"Read meteorological data: %s\n", filename);
633 sprintf(tstr,
"%.4s", &filename[strlen(filename) - 16]);
635 sprintf(tstr,
"%.2s", &filename[strlen(filename) - 11]);
637 sprintf(tstr,
"%.2s", &filename[strlen(filename) - 8]);
639 sprintf(tstr,
"%.2s", &filename[strlen(filename) - 5]);
641 time2jsec(year, mon, day, hour, 0, 0, 0, &met->
time);
644 NC(nc_open(filename, NC_NOWRITE, &ncid));
647 NC(nc_inq_dimid(ncid,
"lon", &dimid));
648 NC(nc_inq_dimlen(ncid, dimid, &nx));
649 if (nx < 2 || nx >
EX)
650 ERRMSG(
"Number of longitudes out of range!");
652 NC(nc_inq_dimid(ncid,
"lat", &dimid));
653 NC(nc_inq_dimlen(ncid, dimid, &ny));
654 if (ny < 2 || ny >
EY)
655 ERRMSG(
"Number of latitudes out of range!");
657 sprintf(levname,
"lev");
658 NC(nc_inq_dimid(ncid, levname, &dimid));
659 NC(nc_inq_dimlen(ncid, dimid, &np));
661 sprintf(levname,
"lev_2");
662 NC(nc_inq_dimid(ncid, levname, &dimid));
663 NC(nc_inq_dimlen(ncid, dimid, &np));
665 if (np < 2 || np >
EP)
666 ERRMSG(
"Number of levels out of range!");
674 NC(nc_inq_varid(ncid,
"lon", &varid));
675 NC(nc_get_var_double(ncid, varid, met->
lon));
676 NC(nc_inq_varid(ncid,
"lat", &varid));
677 NC(nc_get_var_double(ncid, varid, met->
lat));
688 NC(nc_inq_varid(ncid, levname, &varid));
689 NC(nc_get_var_double(ncid, varid, met->
p));
690 for (ip = 0; ip < met->
np; ip++)
697 for (ip = 1; ip < met->
np; ip++)
698 if (met->
p[ip - 1] < met->
p[ip])
699 ERRMSG(
"Pressure levels must be descending!");
702 if (nc_inq_varid(ncid,
"ps", &varid) == NC_NOERR
703 || nc_inq_varid(ncid,
"PS", &varid) == NC_NOERR) {
704 NC(nc_get_var_float(ncid, varid, help));
705 for (iy = 0; iy < met->
ny; iy++)
706 for (ix = 0; ix < met->
nx; ix++)
707 met->
ps[ix][iy] = help[iy * met->
nx + ix] / 100.;
708 }
else if (nc_inq_varid(ncid,
"lnsp", &varid) == NC_NOERR
709 || nc_inq_varid(ncid,
"LNSP", &varid) == NC_NOERR) {
710 NC(nc_get_var_float(ncid, varid, help));
711 for (iy = 0; iy < met->
ny; iy++)
712 for (ix = 0; ix < met->
nx; ix++)
713 met->
ps[ix][iy] = exp(help[iy * met->
nx + ix]) / 100.;
715 for (ix = 0; ix < met->
nx; ix++)
716 for (iy = 0; iy < met->
ny; iy++)
717 met->
ps[ix][iy] = met->
p[0];
740 for (ix = 0; ix < met->
nx; ix++)
741 for (iy = 0; iy < met->
ny; iy++) {
744 for (ip0 = met->
np - 1; ip0 >= 0; ip0--)
745 if (!gsl_finite(met->
t[ix][iy][ip0])
746 || !gsl_finite(met->
u[ix][iy][ip0])
747 || !gsl_finite(met->
v[ix][iy][ip0])
748 || !gsl_finite(met->
w[ix][iy][ip0]))
752 for (ip = ip0; ip >= 0; ip--) {
753 met->
t[ix][iy][ip] = met->
t[ix][iy][ip + 1];
754 met->
u[ix][iy][ip] = met->
u[ix][iy][ip + 1];
755 met->
v[ix][iy][ip] = met->
v[ix][iy][ip + 1];
756 met->
w[ix][iy][ip] = met->
w[ix][iy][ip + 1];
757 met->
h2o[ix][iy][ip] = met->
h2o[ix][iy][ip + 1];
758 met->
o3[ix][iy][ip] = met->
o3[ix][iy][ip + 1];
769 static double topo_lat[
EY], topo_lon[
EX], topo_z[
EX][
EY];
771 static int init, topo_nx = -1, topo_ny;
777 double data[30], lat, lon, rlat, rlon, rlon_old = -999, rz, ts, z0, z1;
781 int ip, ip0, ix, ix2, ix3, iy, iy2, n, tx, ty;
784 for (ix = 0; ix < met->
nx; ix++)
785 for (iy = 0; iy < met->
ny; iy++)
786 for (ip = 0; ip < met->
np; ip++)
787 met->
z[ix][iy][ip] = GSL_NAN;
797 printf(
"Read surface geopotential: %s\n", ctl2->
met_geopot);
801 ERRMSG(
"Cannot open file!");
804 while (fgets(line, LEN, in))
805 if (sscanf(line,
"%lg %lg %lg", &rlon, &rlat, &rz) == 3) {
806 if (rlon != rlon_old) {
807 if ((++topo_nx) >=
EX)
808 ERRMSG(
"Too many longitudes!");
812 topo_lon[topo_nx] = rlon;
813 topo_lat[topo_ny] = rlat;
814 topo_z[topo_nx][topo_ny] = rz;
815 if ((++topo_ny) >=
EY)
816 ERRMSG(
"Too many latitudes!");
818 if ((++topo_nx) >=
EX)
819 ERRMSG(
"Too many longitudes!");
825 if (fabs(met->
lon[0] - met->
lon[1]) != fabs(topo_lon[0] - topo_lon[1])
826 || fabs(met->
lat[0] - met->
lat[1]) != fabs(topo_lat[0] - topo_lat[1]))
827 printf(
"Warning: Grid spacing does not match!\n");
834 for (ix = 0; ix < met->
nx; ix++)
835 for (iy = 0; iy < met->
ny; iy++) {
839 if (lon < topo_lon[0])
841 else if (lon > topo_lon[topo_nx - 1])
844 tx = locate_reg(topo_lon, topo_nx, lon);
845 ty = locate_reg(topo_lat, topo_ny, lat);
846 z0 = LIN(topo_lon[tx], topo_z[tx][ty],
847 topo_lon[tx + 1], topo_z[tx + 1][ty], lon);
848 z1 = LIN(topo_lon[tx], topo_z[tx][ty + 1],
849 topo_lon[tx + 1], topo_z[tx + 1][ty + 1], lon);
850 z0 = LIN(topo_lat[ty], z0, topo_lat[ty + 1], z1, lat);
853 ip0 = locate_irr(met->
p, met->
np, met->
ps[ix][iy]);
856 ts = LIN(met->
p[ip0], met->
t[ix][iy][ip0],
857 met->
p[ip0 + 1], met->
t[ix][iy][ip0 + 1], met->
ps[ix][iy]);
860 met->
z[ix][iy][ip0 + 1]
861 = (float) (z0 + 8.31441 / 28.9647 / G0
862 * 0.5 * (ts + met->
t[ix][iy][ip0 + 1])
863 * log(met->
ps[ix][iy] / met->
p[ip0 + 1]));
864 for (ip = ip0 + 2; ip < met->
np; ip++)
866 = (
float) (met->
z[ix][iy][ip - 1] + 8.31441 / 28.9647 / G0
867 * 0.5 * (met->
t[ix][iy][ip - 1] + met->
t[ix][iy][ip])
868 * log(met->
p[ip - 1] / met->
p[ip]));
872 for (ip = 0; ip < met->
np; ip++) {
875 for (ix = 0; ix < met->
nx; ix++)
876 for (iy = 0; iy < met->
nx; iy++) {
878 for (ix2 = ix - 2; ix2 <= ix + 2; ix2++) {
884 for (iy2 = GSL_MAX(iy - 2, 0); iy2 <= GSL_MIN(iy + 2, met->
ny - 1);
886 if (gsl_finite(met->
z[ix3][iy2][ip])) {
887 data[n] = met->
z[ix3][iy2][ip];
892 gsl_sort(data, 1, (
size_t) n);
893 help[ix][iy] = (float)
894 gsl_stats_median_from_sorted_data(data, 1, (
size_t) n);
896 help[ix][iy] = GSL_NAN;
900 for (ix = 0; ix < met->
nx; ix++)
901 for (iy = 0; iy < met->
nx; iy++)
902 met->
z[ix][iy][ip] = help[ix][iy];
916 static float help[
EX *
EY *
EP];
918 int ip, ix, iy, varid;
921 if (nc_inq_varid(ncid, varname, &varid) != NC_NOERR)
922 if (nc_inq_varid(ncid, varname2, &varid) != NC_NOERR)
926 NC(nc_get_var_float(ncid, varid, help));
929 for (ix = 0; ix < met->
nx; ix++)
930 for (iy = 0; iy < met->
ny; iy++)
931 for (ip = 0; ip < met->
np; ip++) {
932 dest[ix][iy][ip] = help[(ip * met->
ny + iy) * met->
nx + ix];
933 if (fabsf(dest[ix][iy][ip]) < 1e14f)
934 dest[ix][iy][ip] *= scl;
936 dest[ix][iy][ip] = GSL_NAN;
948 if (!(fabs(met->
lon[met->
nx - 1] - met->
lon[0]
949 + met->
lon[1] - met->
lon[0] - 360) < 0.01))
953 if ((++met->
nx) >
EX)
954 ERRMSG(
"Cannot create periodic boundary conditions!");
960 for (iy = 0; iy < met->
ny; iy++)
961 for (ip = 0; ip < met->
np; ip++) {
962 met->
ps[met->
nx - 1][iy] = met->
ps[0][iy];
963 met->
pt[met->
nx - 1][iy] = met->
pt[0][iy];
964 met->
z[met->
nx - 1][iy][ip] = met->
z[0][iy][ip];
965 met->
t[met->
nx - 1][iy][ip] = met->
t[0][iy][ip];
966 met->
u[met->
nx - 1][iy][ip] = met->
u[0][iy][ip];
967 met->
v[met->
nx - 1][iy][ip] = met->
v[0][iy][ip];
968 met->
w[met->
nx - 1][iy][ip] = met->
w[0][iy][ip];
969 met->
pv[met->
nx - 1][iy][ip] = met->
pv[0][iy][ip];
970 met->
h2o[met->
nx - 1][iy][ip] = met->
h2o[0][iy][ip];
971 met->
o3[met->
nx - 1][iy][ip] = met->
o3[0][iy][ip];
985 int ip, ip2, ix, ix2, ix3, iy, iy2;
993 ALLOC(help,
met_t, 1);
999 memcpy(help->
lon, met->
lon,
sizeof(met->
lon));
1000 memcpy(help->
lat, met->
lat,
sizeof(met->
lat));
1001 memcpy(help->
p, met->
p,
sizeof(met->
p));
1004 for (ix = 0; ix < met->
nx; ix += ctl2->
met_dx) {
1005 for (iy = 0; iy < met->
ny; iy += ctl2->
met_dy) {
1006 for (ip = 0; ip < met->
np; ip += ctl2->
met_dp) {
1007 help->
ps[ix][iy] = 0;
1008 help->
pt[ix][iy] = 0;
1009 help->
z[ix][iy][ip] = 0;
1010 help->
t[ix][iy][ip] = 0;
1011 help->
u[ix][iy][ip] = 0;
1012 help->
v[ix][iy][ip] = 0;
1013 help->
w[ix][iy][ip] = 0;
1014 help->
pv[ix][iy][ip] = 0;
1015 help->
h2o[ix][iy][ip] = 0;
1016 help->
o3[ix][iy][ip] = 0;
1018 for (ix2 = ix - ctl2->
met_sx + 1; ix2 <= ix + ctl2->met_sx - 1; ix2++) {
1022 else if (ix3 >= met->
nx)
1025 for (iy2 = GSL_MAX(iy - ctl2->
met_sy + 1, 0);
1026 iy2 <= GSL_MIN(iy + ctl2->
met_sy - 1, met->
ny - 1); iy2++)
1027 for (ip2 = GSL_MAX(ip - ctl2->
met_sp + 1, 0);
1028 ip2 <= GSL_MIN(ip + ctl2->
met_sp - 1, met->
np - 1); ip2++) {
1029 w = (1.0f - (float) abs(ix - ix2) / (float) ctl2->
met_sx)
1030 * (1.0f - (float) abs(iy - iy2) / (float) ctl2->
met_sy)
1031 * (1.0f - (float) abs(ip - ip2) / (float) ctl2->
met_sp);
1032 help->
ps[ix][iy] += w * met->
ps[ix3][iy2];
1033 help->
pt[ix][iy] += w * met->
pt[ix3][iy2];
1034 help->
z[ix][iy][ip] += w * met->
z[ix3][iy2][ip2];
1035 help->
t[ix][iy][ip] += w * met->
t[ix3][iy2][ip2];
1036 help->
u[ix][iy][ip] += w * met->
u[ix3][iy2][ip2];
1037 help->
v[ix][iy][ip] += w * met->
v[ix3][iy2][ip2];
1038 help->
w[ix][iy][ip] += w * met->
w[ix3][iy2][ip2];
1039 help->
pv[ix][iy][ip] += w * met->
pv[ix3][iy2][ip2];
1040 help->
h2o[ix][iy][ip] += w * met->
h2o[ix3][iy2][ip2];
1041 help->
o3[ix][iy][ip] += w * met->
o3[ix3][iy2][ip2];
1045 help->
ps[ix][iy] /= wsum;
1046 help->
pt[ix][iy] /= wsum;
1047 help->
t[ix][iy][ip] /= wsum;
1048 help->
z[ix][iy][ip] /= wsum;
1049 help->
u[ix][iy][ip] /= wsum;
1050 help->
v[ix][iy][ip] /= wsum;
1051 help->
w[ix][iy][ip] /= wsum;
1052 help->
pv[ix][iy][ip] /= wsum;
1053 help->
h2o[ix][iy][ip] /= wsum;
1054 help->
o3[ix][iy][ip] /= wsum;
1061 for (ix = 0; ix < help->
nx; ix += ctl2->
met_dx) {
1064 for (iy = 0; iy < help->
ny; iy += ctl2->
met_dy) {
1066 met->
ps[met->
nx][met->
ny] = help->
ps[ix][iy];
1067 met->
pt[met->
nx][met->
ny] = help->
pt[ix][iy];
1069 for (ip = 0; ip < help->
np; ip += ctl2->
met_dp) {
1070 met->
p[met->
np] = help->
p[ip];
1071 met->
z[met->
nx][met->
ny][met->
np] = help->
z[ix][iy][ip];
1072 met->
t[met->
nx][met->
ny][met->
np] = help->
t[ix][iy][ip];
1073 met->
u[met->
nx][met->
ny][met->
np] = help->
u[ix][iy][ip];
1074 met->
v[met->
nx][met->
ny][met->
np] = help->
v[ix][iy][ip];
1075 met->
w[met->
nx][met->
ny][met->
np] = help->
w[ix][iy][ip];
1076 met->
pv[met->
nx][met->
ny][met->
np] = help->
pv[ix][iy][ip];
1077 met->
h2o[met->
nx][met->
ny][met->
np] = help->
h2o[ix][iy][ip];
1078 met->
o3[met->
nx][met->
ny][met->
np] = help->
o3[ix][iy][ip];
void iasi_read(int format, char *filename, iasi_rad_t *iasi_rad)
Read IASI Level-1 data.
void write_l2(char *filename, iasi_l2_t *l2)
Write IASI Level-2 data.
void write_l1(char *filename, iasi_l1_t *l1)
Write IASI Level-1 data.
IASI Code Collection library declarations.
#define NC(cmd)
Execute netCDF library command and check result.
#define L1_NXTRACK
Across-track size of IASI radiance granule (don't change).
#define L2_NLAY
Number of IASI pressure layers (don't change).
#define L1_NCHAN
Number of IASI radiance channels (don't change).
int met_sy
Smoothing for latitudes.
char met_geopot[LEN]
Surface geopotential data file.
int met_sx
Smoothing for longitudes.
int met_dp
Stride for pressure levels.
int met_sp
Smoothing for pressure levels.
double dt_met
Time step of meteorological data [s].
int met_dy
Stride for latitudes.
int met_dx
Stride for longitudes.
double sat_z[L1_NTRACK]
Satellite altitude [km].
double nu[L1_NCHAN]
Channel frequencies [cm^-1].
double sat_lon[L1_NTRACK]
Satellite longitude [deg].
double sat_lat[L1_NTRACK]
Satellite latitude [deg].
double lon[L1_NTRACK][L1_NXTRACK]
Footprint longitude [deg].
double time[L1_NTRACK][L1_NXTRACK]
Time (seconds since 2000-01-01T00:00Z).
double lat[L1_NTRACK][L1_NXTRACK]
Footprint latitude [deg].
float rad[L1_NTRACK][L1_NXTRACK][L1_NCHAN]
Radiance [W/(m^2 sr cm^-1)].
size_t ntrack
Number of along-track values.
double time[L2_NTRACK][L2_NXTRACK]
Time (seconds since 2000-01-01T00:00Z).
double lon[L2_NTRACK][L2_NXTRACK]
Longitude [deg].
double p[L2_NLAY]
Pressure [hPa].
double lat[L2_NTRACK][L2_NXTRACK]
Latitude [deg].
double t[L2_NTRACK][L2_NXTRACK][L2_NLAY]
Temperature [K].
double z[L2_NTRACK][L2_NXTRACK][L2_NLAY]
Geopotential height [km].
size_t ntrack
Number of along-track values.
IASI converted Level-1 radiation data.
double Longitude[L1_NTRACK][L1_NXTRACK]
Longitude of the sounder pixel.
double Latitude[L1_NTRACK][L1_NXTRACK]
Latitude of the sounder pixel.
double Time[L1_NTRACK][L1_NXTRACK]
Seconds since 2000-01-01 for each sounder pixel.
double freq[IASI_L1_NCHAN]
channel wavenumber [cm^-1]
int ntrack
Number of along-track samples.
double Sat_lon[L1_NTRACK]
Estimated longitude of the satellite.
double Sat_z[L1_NTRACK]
Altitude of the satellite.
float Rad[L1_NTRACK][L1_NXTRACK][IASI_L1_NCHAN]
Radiance [W/(m^2 sr cm^-1)].
double Sat_lat[L1_NTRACK]
Estimated latitude of the satellite.
float h2o[EX][EY][EP]
Water vapor volume mixing ratio [1].
float w[EX][EY][EP]
Vertical wind [hPa/s].
int nx
Number of longitudes.
int ny
Number of latitudes.
double pt[EX][EY]
Tropopause pressure [hPa].
float o3[EX][EY][EP]
Ozone volume mixing ratio [1].
int np
Number of pressure levels.
float t[EX][EY][EP]
Temperature [K].
float u[EX][EY][EP]
Zonal wind [m/s].
double lon[EX]
Longitude [deg].
float z[EX][EY][EP]
Geopotential height [km].
float v[EX][EY][EP]
Meridional wind [m/s].
float pv[EX][EY][EP]
Potential vorticity [PVU].
double ps[EX][EY]
Surface pressure [hPa].
double lat[EY]
Latitude [deg].
double p[EP]
Pressure [hPa].