48 {
49
51
52 FILE *out;
53
54 char pertname[LEN];
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
81 geo2cart(0, lon0, lat0, x0);
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}
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.