55 int dims[10], ncid, varid;
57 size_t start[10], count[10];
64 ERRMSG(
"Missing or invalid command-line arguments.\n\n"
65 "Usage: cape <ctl> <met.nc>\n\n" "Use -h for full help.");
68 mptrac_alloc(NULL, NULL, &clim, &met, NULL, NULL, NULL, &dd);
78 ERRMSG(
"Cannot open file!");
81 if (nc_open(argv[2], NC_WRITE, &ncid) != NC_NOERR)
82 ERRMSG(
"Cannot open file!");
88 NC(nc_inq_dimid(ncid,
"time", &dims[0]));
89 NC(nc_inq_dimid(ncid,
"lat", &dims[1]));
90 NC(nc_inq_dimid(ncid,
"lon", &dims[2]));
97 "convective available potential energy",
"J kg**-1", 0, 0);
99 "convective inhibition",
"J kg**-1", 0, 0);
101 "pressure at equilibrium level",
"hPa", 0, 0);
104 time_t t = time(NULL);
105 struct tm tm = *localtime(&t);
106 sprintf(tstr,
"%d-%02d-%02d %02d:%02d:%02d",
107 tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
108 tm.tm_hour, tm.tm_min, tm.tm_sec);
111 NC_PUT_ATT(
"CAPE_MPT",
"creator_of_parameter",
"MPTRAC");
112 NC_PUT_ATT(
"CIN_MPT",
"creator_of_parameter",
"MPTRAC");
113 NC_PUT_ATT(
"PEL_MPT",
"creator_of_parameter",
"MPTRAC");
115 NC_PUT_ATT(
"CAPE_MPT",
"param_creation_time", tstr);
116 NC_PUT_ATT(
"CIN_MPT",
"param_creation_time", tstr);
117 NC_PUT_ATT(
"PEL_MPT",
"param_creation_time", tstr);
119 NC_PUT_ATT(
"CAPE_MPT",
"param_modification_time", tstr);
120 NC_PUT_ATT(
"CIN_MPT",
"param_modification_time", tstr);
121 NC_PUT_ATT(
"PEL_MPT",
"param_modification_time", tstr);
127 float miss[1] = { NAN };
128 NC(nc_inq_varid(ncid,
"CAPE_MPT", &varid));
129 NC(nc_put_att_float(ncid, varid,
"missing_value", NC_FLOAT, 1, miss));
130 NC(nc_inq_varid(ncid,
"CIN_MPT", &varid));
131 NC(nc_put_att_float(ncid, varid,
"missing_value", NC_FLOAT, 1, miss));
132 NC(nc_inq_varid(ncid,
"PEL_MPT", &varid));
133 NC(nc_put_att_float(ncid, varid,
"missing_value", NC_FLOAT, 1, miss));
139 for (
int ix = 0; ix < met->
nx - 1; ix++)
140 for (
int iy = 0; iy < met->
ny; iy++)
144 for (
int ix = 0; ix < met->
nx - 1; ix++)
145 for (
int iy = 0; iy < met->
ny; iy++)
149 for (
int ix = 0; ix < met->
nx - 1; ix++)
150 for (
int iy = 0; iy < met->
ny; iy++)
158 mptrac_free(NULL, NULL, clim, met, NULL, NULL, NULL, dd);
169 printf(
"\nMPTRAC cape tool.\n\n");
170 printf(
"Add CAPE data to a meteorological netCDF file.\n");
173 printf(
" cape <ctl> <met.nc>\n");
175 printf(
"Arguments:\n");
176 printf(
" <ctl> Control file.\n");
177 printf(
" <met.nc> Meteorological netCDF file to update.\n");
178 printf(
"\nFurther information:\n");
179 printf(
" Manual: https://slcs-jsc.github.io/mptrac/\n");
int main(int argc, char *argv[])
void usage(void)
Print command-line help.
void mptrac_free(ctl_t *ctl, cache_t *cache, clim_t *clim, met_t *met0, met_t *met1, atm_t *atm, depo_t *depo, dd_t *dd)
Frees memory resources allocated for MPTRAC.
void mptrac_read_clim(const ctl_t *ctl, clim_t *clim)
Reads various climatological data and populates the given climatology structure.
void mptrac_alloc(ctl_t **ctl, cache_t **cache, clim_t **clim, met_t **met0, met_t **met1, atm_t **atm, depo_t **depo, dd_t **dd)
Allocates and initializes memory resources for MPTRAC.
int mptrac_read_met(const char *filename, const ctl_t *ctl, const clim_t *clim, met_t *met, dd_t *dd)
Reads meteorological data from a file, supporting multiple formats and MPI broadcasting.
void mptrac_read_ctl(const char *filename, int argc, char *argv[], ctl_t *ctl)
Reads control parameters from a configuration file and populates the given structure.
MPTRAC library declarations.
#define LEN
Maximum length of ASCII data lines.
#define NC(cmd)
Execute a NetCDF command and check for errors.
#define ERRMSG(...)
Print an error message with contextual information and terminate the program.
#define EY
Maximum number of latitudes for meteo data.
#define ARRAY_2D(ix, iy, ny)
Macro for computing the linear index of a 2D array element.
#define USAGE
Print usage information on -h or --help.
#define EX
Maximum number of longitudes for meteo data.
#define NC_PUT_ATT(varname, attname, text)
Add a text attribute to a NetCDF variable.
#define NC_PUT_FLOAT(varname, ptr, hyperslab)
Write a float array to a NetCDF file.
#define NC_DEF_VAR(varname, type, ndims, dims, long_name, units, level, quant)
Define a NetCDF variable with attributes.
#define NC_INQ_DIM(dimname, ptr, min, max, check)
Inquire the length of a dimension in a NetCDF file.
Domain decomposition data structure.
float cape[EX][EY]
Convective available potential energy [J/kg].
int nx
Number of longitudes.
int ny
Number of latitudes.
float pel[EX][EY]
Pressure at equilibrium level (EL) [hPa].
float cin[EX][EY]
Convective inhibition [J/kg].