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].