34 double x0[3], x1[3], x2[3];
38 ERRMSG(
"Give parameters: <ctl> <pert.nc>");
53 for (
int itrack = 0; itrack < pert->
ntrack; itrack++) {
57 double d = 2. *
RE * asin(
DIST(x0, x1) / (2. *
RE));
58 dmin = GSL_MIN(dmin, d);
59 dmax = GSL_MAX(dmax, d);
65 printf(
"\nmean_swath_width= %.1f km\n", dmu / n);
66 printf(
"minimum_swath_width= %.1f km\n", dmin);
67 printf(
"maximum_swath_width= %.1f km\n", dmax);
76 for (
int itrack = 0; itrack < pert->
ntrack; itrack++) {
77 for (
int ixtrack = 0; ixtrack < pert->
nxtrack - 1; ixtrack++) {
78 geo2cart(0, pert->
lon[itrack][ixtrack], pert->
lat[itrack][ixtrack], x0);
80 pert->
lat[itrack][ixtrack + 1], x1);
81 double d = 2. *
RE * asin(
DIST(x0, x1) / (2. *
RE));
82 dmin = GSL_MIN(dmin, d);
83 dmax = GSL_MAX(dmax, d);
90 printf(
"\nmean_across_track_sampling_distance= %.1f km\n", dmu / n);
91 printf(
"minimum_across_track_sampling_distance= %.1f km\n", dmin);
92 printf(
"maximum_across_track_sampling_distance= %.1f km\n", dmax);
101 for (
int itrack = 0; itrack < pert->
ntrack - 1; itrack++) {
102 for (
int ixtrack = 0; ixtrack < pert->
nxtrack; ixtrack++) {
103 geo2cart(0, pert->
lon[itrack][ixtrack], pert->
lat[itrack][ixtrack], x0);
105 pert->
lat[itrack + 1][ixtrack], x1);
106 double d = 2. *
RE * asin(
DIST(x0, x1) / (2. *
RE));
107 dmin = GSL_MIN(dmin, d);
108 dmax = GSL_MAX(dmax, d);
115 printf(
"\nmean_along_track_sampling_distance= %.1f km\n", dmu / n);
116 printf(
"minimum_along_track_sampling_distance= %.1f km\n", dmin);
117 printf(
"maximum_along_track_sampling_distance= %.1f km\n", dmax);
126 for (
int itrack = 0; itrack < pert->
ntrack - 1; itrack++) {
130 pert->
lat[itrack][pert->
nxtrack / 2 + 1], x1);
132 pert->
lat[itrack + 1][pert->
nxtrack / 2], x2);
133 for (
int i = 0; i < 3; i++) {
137 double d = acos(
DOTP(x1, x2) / (
NORM(x1) *
NORM(x2))) * 180. / M_PI;
138 dmin = GSL_MIN(dmin, d);
139 dmax = GSL_MAX(dmax, d);
145 printf(
"\nmean_across_track_angle= %.1f deg\n", dmu / n);
146 printf(
"minimum_across_track_angle= %.1f deg\n", dmin);
147 printf(
"maximum_across_track_angle= %.1f deg\n", dmax);
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, pert_t *pert)
Read radiance perturbation data.
AIRS Code Collection library declarations.
int main(int argc, char *argv[])
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].