48 {
49
51
52 FILE *out;
53
55
56 double dmin = 1e100, x0[3], x1[3];
57
58 int orb = 0, track0 = 0, xtrack0 = 0;
59
60
61 if (argc < 6)
62 ERRMSG(
"Give parameters: <ctl> <pert.nc> <lon0> <lat0> <overpass.tab>");
63
64
65 const double lon0 = atof(argv[3]);
66 const double lat0 = atof(argv[4]);
67
68
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);
73
74
76
77
79
80
82
83
84 printf("Write overpass data file: %s\n", argv[5]);
85 if (!(out = fopen(argv[5], "w")))
86 ERRMSG(
"Cannot create file!");
87
88
89 fprintf(out,
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");
99
100
101 for (
int track = 0; track < pert->
ntrack; track++) {
102
103
104 if (track > 0)
105 if (pert->
lat[track - 1][pert->
nxtrack / 2] <= orblat
106 && pert->
lat[track][pert->
nxtrack / 2] >= orblat) {
107
108
109 if (sqrt(dmin) <= rmax)
111
112
113 dmin = 1e100;
114 orb++;
115 }
116
117
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);
122 track0 = track;
123 xtrack0 = xtrack;
124 }
125 }
126 }
127
128
129 if (sqrt(dmin) <= rmax)
131
132
133 fclose(out);
134
135
136 free(pert);
137
138 return EXIT_SUCCESS;
139}
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.
#define ALLOC(ptr, type, n)
Allocate memory.
#define DIST2(a, b)
Compute squared distance between two vectors.
void read_pert(char *filename, char *pertname, pert_t *pert)
Read radiance perturbation data.
void write_results(FILE *out, pert_t *pert, int track0, int xtrack0, int orb, double dmin, double obsz)
int ntrack
Number of along-track values.