56 double dmin = 1e100, x0[3], x1[3];
58 int orb = 0, track0 = 0, xtrack0 = 0;
62 ERRMSG(
"Give parameters: <ctl> <pert.nc> <lon0> <lat0> <overpass.tab>");
65 const double lon0 = atof(argv[3]);
66 const double lat0 = atof(argv[4]);
69 scan_ctl(argc, argv,
"PERTNAME", -1,
"4mu", pertname);
70 const double orblat = scan_ctl(argc, argv,
"ORBLAT", -1,
"0", NULL);
71 const double rmax = scan_ctl(argc, argv,
"RMAX", -1,
"100", NULL);
72 const double obsz = scan_ctl(argc, argv,
"OBSZ", -1,
"", NULL);
81 geo2cart(0, lon0, lat0, x0);
84 printf(
"Write overpass data file: %s\n", argv[5]);
85 if (!(out = fopen(argv[5],
"w")))
86 ERRMSG(
"Cannot create file!");
90 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
91 "# $2 = time (string)\n"
92 "# $3 = longitude [deg]\n"
93 "# $4 = latitude [deg]\n"
94 "# $5 = along-track index\n"
95 "# $6 = across-track index\n"
96 "# $7 = orbit number\n"
97 "# $8 = ascending (1=yes, 0=no)\n"
98 "# $9 = scan angle [deg]\n" "# $10 = distance [km]\n\n");
101 for (
int track = 0; track < pert->
ntrack; track++) {
105 if (pert->
lat[track - 1][pert->
nxtrack / 2] <= orblat
106 && pert->
lat[track][pert->
nxtrack / 2] >= orblat) {
109 if (sqrt(dmin) <= rmax)
118 for (
int xtrack = 0; xtrack < pert->
nxtrack; xtrack++) {
119 geo2cart(0, pert->
lon[track][xtrack], pert->
lat[track][xtrack], x1);
120 if (DIST2(x0, x1) < dmin) {
121 dmin = DIST2(x0, x1);
129 if (sqrt(dmin) <= rmax)
152 double xf[3], xs[3], xsf[3], remain;
154 int year, mon, day, hour, min, sec;
157 geo2cart(0, pert->
lon[track0][xtrack0], pert->
lat[track0][xtrack0], xf);
158 geo2cart(0, pert->
lon[track0][pert->
nxtrack / 2],
160 geo2cart(obsz, pert->
lon[track0][pert->
nxtrack / 2],
162 for (
int i = 0; i < 3; i++) {
166 double alpha = 180. / M_PI * acos(DOTP(xf, xsf) / NORM(xf) / NORM(xsf));
167 if (xtrack0 < pert->nxtrack / 2)
171 int asc = (pert->
lat[track0 > 0 ? track0 : track0 + 1][pert->
nxtrack / 2]
173 0 ? track0 - 1 : track0][pert->
nxtrack / 2]);
176 jsec2time(pert->
time[track0][xtrack0], &year, &mon, &day,
177 &hour, &min, &sec, &remain);
179 "%.2f %d-%02d-%02dT%02d:%02d:%02dZ %g %g %d %d %d %d %g %g\n",
180 pert->
time[track0][xtrack0], year, mon, day, hour, min, sec,
181 pert->
lon[track0][xtrack0], pert->
lat[track0][xtrack0],
182 track0, xtrack0, orb, asc, alpha, sqrt(dmin));
void read_pert(char *filename, char *pertname, pert_t *pert)
Read radiance perturbation data.
AIRS Code Collection library declarations.
int main(int argc, char *argv[])
void write_results(FILE *out, pert_t *pert, int track0, int xtrack0, int orb, double dmin, double obsz)
double time[PERT_NTRACK][PERT_NXTRACK]
Time (seconds since 2000-01-01T00:00Z).
int ntrack
Number of along-track values.
int nxtrack
Number of across-track values.
double lon[PERT_NTRACK][PERT_NXTRACK]
Longitude [deg].
double lat[PERT_NTRACK][PERT_NXTRACK]
Latitude [deg].