9 static double dx[
L1_NXTRACK], x0[3], x1[3], x2[3];
15 ERRMSG(
"Give parameters: <ctl> <pert.nc>");
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);
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);
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);
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,
72 printf(
"maximum_across_track_sampling_distance= %.1f km | %.1f km\n", dmax,
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);
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,
101 printf(
"maximum_along_track_sampling_distance= %.1f km | %.1f km\n", dmax,
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++) {
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);
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);
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));
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]);
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.
int main(int argc, char *argv[])
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].