46 double clk[
NCL], sfeps[
NSF];
53 ERRMSG(
"Missing or invalid command-line arguments.\n\n"
54 "Usage: climatology <ctl> <atm> [KEY VALUE ...]\n\n"
55 "Use -h for full help.");
59 const double t0 =
scan_ctl(argc, argv,
"T0", -1,
"0", NULL);
60 const double t1 =
scan_ctl(argc, argv,
"T1", -1,
"0", NULL);
61 const double dt =
scan_ctl(argc, argv,
"DT", -1,
"1", NULL);
62 const double z0 =
scan_ctl(argc, argv,
"Z0", -1,
"0", NULL);
63 const double z1 =
scan_ctl(argc, argv,
"Z1", -1,
"90", NULL);
64 const double dz =
scan_ctl(argc, argv,
"DZ", -1,
"1", NULL);
65 const int zsurf = (int)
scan_ctl(argc, argv,
"ZSURF", -1,
"0", NULL);
66 const double clz =
scan_ctl(argc, argv,
"CLZ", -1,
"0", NULL);
67 const double cldz =
scan_ctl(argc, argv,
"CLDZ", -1,
"0", NULL);
68 for (
int icl = 0; icl < ctl.
ncl; icl++)
69 clk[icl] =
scan_ctl(argc, argv,
"CLK", icl,
"0", NULL);
70 const double sft =
scan_ctl(argc, argv,
"SFT", -1,
"0", NULL);
71 for (
int isf = 0; isf < ctl.
nsf; isf++)
72 sfeps[isf] =
scan_ctl(argc, argv,
"SFEPS", isf,
"1", NULL);
75 for (
double t = t0; t <= t1 + 0.5 * dt; t += dt) {
88 for (
double z = 0.1; z <= 1.0 + 1e-9; z += 0.1)
89 atm.
z[atm.
np++] = z0 + z;
91 for (
double z = 1.2; z <= 2.0 + 1e-9; z += 0.2)
92 atm.
z[atm.
np++] = z0 + z;
94 ERRMSG(
"Too many atmospheric grid points!");
98 for (
double z = z0; z <= z1; z += dz)
99 if (atm.
np == 0 || z > atm.
z[atm.
np - 1] + 1e-9) {
101 if ((++atm.
np) >=
NP)
102 ERRMSG(
"Too many atmospheric grid points!");
106 for (
int ip = 0; ip < atm.
np; ip++)
116 for (
int icl = 0; icl < ctl.
ncl; icl++)
117 atm.
clk[icl] = clk[icl];
121 for (
int isf = 0; isf < ctl.
nsf; isf++)
122 atm.
sfeps[isf] = sfeps[isf];
134 printf(
"\nJURASSIC climatology tool.\n\n");
135 printf(
"Prepare an atmospheric profile from climatological data and\n");
136 printf(
"write it to an atmospheric output file.\n\n");
138 printf(
" climatology <ctl> <atm> [KEY VALUE ...]\n\n");
139 printf(
"Arguments:\n");
140 printf(
" <ctl> Control file.\n");
141 printf(
" <atm> Output atmospheric data file.\n");
142 printf(
" [KEY VALUE] Optional control parameters.\n\n");
143 printf(
"Tool-specific control parameters:\n");
144 printf(
" T0, T1, DT Time range and spacing.\n");
145 printf(
" Z0, Z1, DZ Altitude range and spacing.\n");
146 printf(
" ZSURF Refine the near-surface grid if set.\n");
147 printf(
" CLZ, CLDZ, CLK Cloud-layer settings.\n");
148 printf(
" SFT, SFEPS Surface temperature and emissivity.\n\n");
149 printf(
"Common control parameters:\n");
150 printf(
" ATMFMT Output atmospheric file format.\n");
151 printf(
" NG, EMITTER[i] Active emitters.\n");
152 printf(
" NW, WINDOW[i] Extinction-window layout.\n");
153 printf(
" NCL, CLNU[i] Cloud spectral grid.\n");
154 printf(
" NSF, SFNU[i] Surface spectral grid.\n\n");
155 printf(
"Further information:\n");
156 printf(
" Manual: https://slcs-jsc.github.io/jurassic/\n");
int main(int argc, char *argv[])
void write_atm(const char *dirname, const char *filename, const ctl_t *ctl, const atm_t *atm, int profile)
Write atmospheric data to a file.
void read_ctl(int argc, char *argv[], ctl_t *ctl)
Read model control parameters from command-line and configuration input.
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.
void climatology(const ctl_t *ctl, atm_t *atm)
Initializes atmospheric climatology profiles.
JURASSIC library declarations.
#define ERRMSG(...)
Print an error message with contextual information and terminate the program.
#define USAGE
Print usage information on -h or --help.
#define NP
Maximum number of atmospheric data points.
#define NSF
Maximum number of surface layer spectral grid points.
#define NCL
Maximum number of cloud layer spectral grid points.
Atmospheric profile data.
double time[NP]
Time (seconds since 2000-01-01T00:00Z).
double sfeps[NSF]
Surface emissivity.
double clz
Cloud layer height [km].
int np
Number of data points.
double cldz
Cloud layer depth [km].
double sft
Surface temperature [K].
double z[NP]
Altitude [km].
double clk[NCL]
Cloud layer extinction [km^-1].
int ncl
Number of cloud layer spectral grid points.
int nsf
Number of surface layer spectral grid points.