JURASSIC
Functions
raytrace.c File Reference

Determine atmospheric ray paths. More...

#include "jurassic.h"

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 

Detailed Description

Determine atmospheric ray paths.

Definition in file raytrace.c.

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 27 of file raytrace.c.

29 {
30
31 static atm_t atm;
32 static ctl_t ctl;
33 static los_t los;
34 static obs_t obs;
35
36 FILE *out, *out2;
37
38 char filename[2 * LEN], losbase[LEN];
39
40 double u[NG];
41
42 /* Check arguments... */
43 if (argc < 5)
44 ERRMSG("Give parameters: <ctl> <obs> <atm> <raytrace.tab>");
45
46 /* Read control parameters... */
47 read_ctl(argc, argv, &ctl);
48
49 /* Get basenames... */
50 scan_ctl(argc, argv, "LOSBASE", -1, "los", losbase);
51
52 /* Read observation geometry... */
53 read_obs(NULL, argv[2], &ctl, &obs);
54
55 /* Read atmospheric data... */
56 read_atm(NULL, argv[3], &ctl, &atm);
57
58 /* Write info... */
59 LOG(1, "Write raytrace data: %s", argv[4]);
60
61 /* Create file... */
62 if (!(out = fopen(argv[4], "w")))
63 ERRMSG("Cannot create file!");
64
65 /* Write header... */
66 fprintf(out,
67 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
68 "# $2 = observer altitude [km]\n"
69 "# $3 = observer longitude [deg]\n"
70 "# $4 = observer latitude [deg]\n"
71 "# $5 = view point altitude [km]\n"
72 "# $6 = view point longitude [deg]\n"
73 "# $7 = view point latitude [deg]\n"
74 "# $8 = tangent point altitude [km]\n"
75 "# $9 = tangent point longitude [deg]\n"
76 "# $10 = tangent point latitude [deg]\n"
77 "# $11 = ray path index\n" "# $12 = ray path length [km]\n");
78 for (int ig = 0; ig < ctl.ng; ig++)
79 fprintf(out, "# $%d = %s column density [molec/cm^2]\n",
80 13 + ig, ctl.emitter[ig]);
81 fprintf(out, "\n");
82
83 /* Loop over rays... */
84 for (int ir = 0; ir < obs.nr; ir++) {
85
86 /* Raytracing... */
87 raytrace(&ctl, &atm, &obs, &los, ir);
88
89 /* Set filename data... */
90 sprintf(filename, "%s.%d.tab", losbase, ir);
91
92 /* Write info... */
93 LOG(1, "Write LOS data: %s", filename);
94
95 /* Create file... */
96 if (!(out2 = fopen(filename, "w")))
97 ERRMSG("Cannot create file!");
98
99 /* Write header... */
100 fprintf(out2,
101 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
102 "# $2 = altitude [km]\n"
103 "# $3 = longitude [deg]\n"
104 "# $4 = latitude [deg]\n"
105 "# $5 = pressure [hPa]\n" "# $6 = temperature [K]\n");
106 for (int ig = 0; ig < ctl.ng; ig++)
107 fprintf(out2, "# $%d = %s volume mixing ratio [ppv]\n",
108 7 + ig, ctl.emitter[ig]);
109 for (int iw = 0; iw < ctl.nw; iw++)
110 fprintf(out2, "# $%d = extinction (window %d) [km^-1]\n",
111 7 + ctl.ng + iw, iw);
112 fprintf(out2, "\n");
113
114 /* Write data... */
115 for (int ip = 0; ip < los.np; ip++) {
116 fprintf(out2, "%.2f %g %g %g %g %g", obs.time[ir], los.z[ip],
117 los.lon[ip], los.lat[ip], los.p[ip], los.t[ip]);
118 for (int ig = 0; ig < ctl.ng; ig++)
119 fprintf(out2, " %g", los.q[ip][ig]);
120 for (int iw = 0; iw < ctl.nw; iw++)
121 fprintf(out2, " %g", los.k[ip][iw]);
122 fprintf(out2, "\n");
123 }
124
125 /* Close file... */
126 fclose(out2);
127
128 /* Get column densities... */
129 double s = 0;
130 for (int ig = 0; ig < ctl.ng; ig++)
131 u[ig] = 0;
132 for (int ip = 0; ip < los.np; ip++) {
133 s += los.ds[ip];
134 for (int ig = 0; ig < ctl.ng; ig++)
135 u[ig] += los.u[ip][ig];
136 }
137
138 /* Write summary data... */
139 fprintf(out, "%.2f %g %g %g %g %g %g %g %g %g %d %g",
140 obs.time[ir], obs.obsz[ir], obs.obslon[ir], obs.obslat[ir],
141 obs.vpz[ir], obs.vplon[ir], obs.vplat[ir],
142 obs.tpz[ir], obs.tplon[ir], obs.tplat[ir], ir, s);
143 for (int ig = 0; ig < ctl.ng; ig++)
144 fprintf(out, " %g", u[ig]);
145 fprintf(out, "\n");
146 }
147
148 /* Close file... */
149 fclose(out);
150
151 return EXIT_SUCCESS;
152}
void read_ctl(int argc, char *argv[], ctl_t *ctl)
Read model control parameters from command-line and configuration input.
Definition: jurassic.c:4889
void raytrace(const ctl_t *ctl, const atm_t *atm, obs_t *obs, los_t *los, const int ir)
Perform line-of-sight (LOS) ray tracing through the atmosphere.
Definition: jurassic.c:4551
void read_atm(const char *dirname, const char *filename, const ctl_t *ctl, atm_t *atm)
Read atmospheric profile data from an ASCII file.
Definition: jurassic.c:4787
void read_obs(const char *dirname, const char *filename, const ctl_t *ctl, obs_t *obs)
Read observation geometry and radiance data from an ASCII file.
Definition: jurassic.c:5043
double scan_ctl(int argc, char *argv[], const char *varname, const int arridx, const char *defvalue, char *value)
Scan control file or command-line arguments for a configuration variable.
Definition: jurassic.c:5738
#define LEN
Maximum length of ASCII data lines.
Definition: jurassic.h:267
#define ERRMSG(...)
Print an error message with contextual information and terminate the program.
Definition: jurassic.h:948
#define NG
Maximum number of emitters.
Definition: jurassic.h:242
#define LOG(level,...)
Print a log message with a specified logging level.
Definition: jurassic.h:878
Atmospheric profile data.
Definition: jurassic.h:998
Control parameters.
Definition: jurassic.h:1051
int nw
Number of spectral windows.
Definition: jurassic.h:1078
int ng
Number of emitters.
Definition: jurassic.h:1054
char emitter[NG][LEN]
Name of each emitter.
Definition: jurassic.h:1057
Line-of-sight data.
Definition: jurassic.h:1209
double z[NLOS]
Altitude [km].
Definition: jurassic.h:1215
double q[NLOS][NG]
Volume mixing ratio [ppv].
Definition: jurassic.h:1230
double lon[NLOS]
Longitude [deg].
Definition: jurassic.h:1218
double ds[NLOS]
Segment length [km].
Definition: jurassic.h:1242
int np
Number of LOS points.
Definition: jurassic.h:1212
double u[NLOS][NG]
Column density [molecules/cm^2].
Definition: jurassic.h:1245
double lat[NLOS]
Latitude [deg].
Definition: jurassic.h:1221
double k[NLOS][ND]
Extinction [km^-1].
Definition: jurassic.h:1233
double t[NLOS]
Temperature [K].
Definition: jurassic.h:1227
double p[NLOS]
Pressure [hPa].
Definition: jurassic.h:1224
Observation geometry and radiance data.
Definition: jurassic.h:1271
double tplon[NR]
Tangent point longitude [deg].
Definition: jurassic.h:1301
double vpz[NR]
View point altitude [km].
Definition: jurassic.h:1289
double vplat[NR]
View point latitude [deg].
Definition: jurassic.h:1295
double obslon[NR]
Observer longitude [deg].
Definition: jurassic.h:1283
double obslat[NR]
Observer latitude [deg].
Definition: jurassic.h:1286
double obsz[NR]
Observer altitude [km].
Definition: jurassic.h:1280
double tplat[NR]
Tangent point latitude [deg].
Definition: jurassic.h:1304
double vplon[NR]
View point longitude [deg].
Definition: jurassic.h:1292
double time[NR]
Time (seconds since 2000-01-01T00:00Z).
Definition: jurassic.h:1277
double tpz[NR]
Tangent point altitude [km].
Definition: jurassic.h:1298
int nr
Number of ray paths.
Definition: jurassic.h:1274
Here is the call graph for this function: