5 {
6
8
9 static double dx[
L1_NXTRACK], x0[3], x1[3], x2[3];
10
12
13
14 if (argc < 3)
15 ERRMSG(
"Give parameters: <ctl> <pert.nc>");
16
17
19
20
22
23
24 double dmin = 1e100;
25 double dmax = -1e100;
26 double dmu = 0;
27 int n = 0;
28
29
30 for (
int itrack = 0; itrack < pert->
ntrack; itrack++) {
34 const double d = 2. *
RE * asin(
DIST(x0, x1) / (2. *
RE));
35 dmin = GSL_MIN(dmin, d);
36 dmax = GSL_MAX(dmax, d);
37 dmu += d;
38 n++;
39 }
40
41
42 printf("\nmean_swath_width= %.1f km\n", dmu / n);
43 printf("minimum_swath_width= %.1f km\n", dmin);
44 printf("maximum_swath_width= %.1f km\n", dmax);
45
46
47 dmin = 1e100;
48 dmax = -1e100;
49 dmu = 0;
50 n = 0;
51
52
53 for (
int itrack = 0; itrack < pert->
ntrack; itrack++) {
54 for (
int ixtrack = 0; ixtrack < pert->
nxtrack - 1; ixtrack++) {
56 pert->
lat[itrack][ixtrack][4], x0);
58 pert->
lat[itrack][ixtrack + 1][4], x1);
59 const double d = 2. *
RE * asin(
DIST(x0, x1) / (2. *
RE));
60 dmin = GSL_MIN(dmin, d);
61 dmax = GSL_MAX(dmax, d);
62 dmu += d;
63 n++;
64 }
65 }
66
67
68 printf("\nmean_across_track_sampling_distance= %.1f km | %.1f km\n",
69 dmu / n, dmu / n / 3.);
70 printf("minimum_across_track_sampling_distance= %.1f km | %.1f km\n", dmin,
71 dmin / 3.);
72 printf("maximum_across_track_sampling_distance= %.1f km | %.1f km\n", dmax,
73 dmax / 3.);
74
75
76 dmin = 1e100;
77 dmax = -1e100;
78 dmu = 0;
79 n = 0;
80
81
82 for (
int itrack = 0; itrack < pert->
ntrack - 1; itrack++) {
83 for (
int ixtrack = 0; ixtrack < pert->
nxtrack; ixtrack++) {
85 pert->
lat[itrack][ixtrack][4], x0);
87 pert->
lat[itrack + 1][ixtrack][4], x1);
88 const double d = 2. *
RE * asin(
DIST(x0, x1) / (2. *
RE));
89 dmin = GSL_MIN(dmin, d);
90 dmax = GSL_MAX(dmax, d);
91 dmu += d;
92 n++;
93 }
94 }
95
96
97 printf("\nmean_along_track_sampling_distance= %.1f km | %.1f km\n",
98 dmu / n, dmu / n / 3.);
99 printf("minimum_along_track_sampling_distance= %.1f km | %.1f km\n", dmin,
100 dmin / 3.);
101 printf("maximum_along_track_sampling_distance= %.1f km | %.1f km\n", dmax,
102 dmax / 3.);
103
104
105 dmin = 1e100;
106 dmax = -1e100;
107 dmu = 0;
108 n = 0;
109
110
111 for (
int itrack = 0; itrack < pert->
ntrack - 1; itrack++) {
115 pert->
lat[itrack][pert->
nxtrack / 2 + 1][4], x1);
117 pert->
lat[itrack + 1][pert->
nxtrack / 2][4], x2);
118 for (int i = 0; i < 3; i++) {
119 x1[i] -= x0[i];
120 x2[i] -= x0[i];
121 }
122 const double d = acos(
DOTP(x1, x2) / (
NORM(x1) *
NORM(x2))) * 180. / M_PI;
123 dmin = GSL_MIN(dmin, d);
124 dmax = GSL_MAX(dmax, d);
125 dmu += d;
126 n++;
127 }
128
129
130 printf("\nmean_across_track_angle= %.1f deg\n", dmu / n);
131 printf("minimum_across_track_angle= %.1f deg\n", dmin);
132 printf("maximum_across_track_angle= %.1f deg\n", dmax);
133
134
135 for (
int itrack = 0; itrack < pert->
ntrack; itrack++) {
136 for (
int ixtrack = 0; ixtrack < pert->
nxtrack; ixtrack++) {
137 geo2cart(0, pert->
lon[itrack][0][4], pert->
lat[itrack][0][4], x0);
139 pert->
lat[itrack][ixtrack][4], x1);
140 const double d = 2. *
RE * asin(
DIST(x0, x1) / (2. *
RE));
141 dx[ixtrack] += d;
142 nx[ixtrack]++;
143 }
144 }
145
146
147 printf("\n");
148 for (
int ixtrack = 0; ixtrack < pert->
nxtrack; ixtrack++)
149 printf("ixtrack= %2d | dx= %.1f km | cx= %.1f km\n", ixtrack,
150 dx[ixtrack] / nx[ixtrack],
152 dx[ixtrack] / nx[ixtrack]);
153
154
155 free(pert);
156
157 return EXIT_SUCCESS;
158}
void geo2cart(const double z, const double lon, const double lat, double *x)
Convert geolocation to Cartesian coordinates.
#define RE
Mean radius of Earth [km].
#define DOTP(a, b)
Compute dot product of two vectors.
#define ERRMSG(...)
Print error message and quit program.
#define NORM(a)
Compute norm of a vector.
#define ALLOC(ptr, type, n)
Allocate memory.
#define DIST(a, b)
Compute Cartesian distance between two vectors.
void read_pert(char *filename, char *pertname, int dc, pert_t *pert)
Read radiance perturbation data.
#define L1_NXTRACK
Across-track size of CrIS radiance granule.
double lat[PERT_NTRACK][PERT_NXTRACK][PERT_NFOV]
Latitude [deg].
int ntrack
Number of along-track values.
int nxtrack
Number of across-track values.
double lon[PERT_NTRACK][PERT_NXTRACK][PERT_NFOV]
Longitude [deg].