MPTRAC
mptrac.h
Go to the documentation of this file.
1/*
2 This file is part of MPTRAC.
3
4 MPTRAC is free software: you can redistribute it and/or modify it
5 under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
8
9 MPTRAC is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with MPTRAC. If not, see <http://www.gnu.org/licenses/>.
16
17 Copyright (C) 2013-2025 Forschungszentrum Juelich GmbH
18*/
19
97#ifndef LIBTRAC_H
98#define LIBTRAC_H
99
100/* ------------------------------------------------------------
101 Includes...
102 ------------------------------------------------------------ */
103
104#include <ctype.h>
105#include <gsl/gsl_fft_complex.h>
106#include <gsl/gsl_math.h>
107#include <gsl/gsl_randist.h>
108#include <gsl/gsl_rng.h>
109#include <gsl/gsl_spline.h>
110#include <gsl/gsl_statistics.h>
111#include <math.h>
112#include <netcdf.h>
113#include <omp.h>
114#include <stdint.h>
115#include <stdio.h>
116#include <stdlib.h>
117#include <string.h>
118#include <time.h>
119#include <sys/time.h>
120
121#ifdef MPI
122#include "mpi.h"
123#endif
124
125#ifdef _OPENACC
126#include "openacc.h"
127#endif
128
129#ifdef CURAND
130#include "curand.h"
131#endif
132
133#ifdef ZFP
134#include "zfp.h"
135#endif
136
137#ifdef ZSTD
138#include "zstd.h"
139#endif
140
141#ifdef CMS
142#include "cmultiscale.h"
143#endif
144
145#ifdef KPP
146#include "chem_Parameters.h"
147#include "chem_Global.h"
148#include "chem_Sparse.h"
149#endif
150
151/* ------------------------------------------------------------
152 Constants...
153 ------------------------------------------------------------ */
154
156#ifndef AVO
157#define AVO 6.02214076e23
158#endif
159
161#ifndef CPD
162#define CPD 1003.5
163#endif
164
166#ifndef EPS
167#define EPS (MH2O / MA)
168#endif
169
171#ifndef G0
172#define G0 9.80665
173#endif
174
176#ifndef H0
177#define H0 7.0
178#endif
179
181#ifndef LV
182#define LV 2501000.
183#endif
184
186#ifndef KARMAN
187#define KARMAN 0.40
188#endif
189
191#ifndef KB
192#define KB 1.3806504e-23
193#endif
194
196#ifndef MA
197#define MA 28.9644
198#endif
199
201#ifndef MH2O
202#define MH2O 18.01528
203#endif
204
206#ifndef MO3
207#define MO3 48.00
208#endif
209
211#ifndef P0
212#define P0 1013.25
213#endif
214
216#ifndef RA
217#define RA (1e3 * RI / MA)
218#endif
219
221#ifndef RE
222#define RE 6367.421
223#endif
224
226#ifndef RI
227#define RI 8.3144598
228#endif
229
231#ifndef T0
232#define T0 273.15
233#endif
234
235/* ------------------------------------------------------------
236 Dimensions...
237 ------------------------------------------------------------ */
238
240#ifndef LEN
241#define LEN 5000
242#endif
243
245#ifndef NP
246#define NP 10000000
247#endif
248
250#ifndef NQ
251#define NQ 15
252#endif
253
255#ifndef NCSI
256#define NCSI 1000000
257#endif
258
260#ifndef EP
261#define EP 140
262#endif
263
265#ifndef EX
266#define EX 1202
267#endif
268
270#ifndef EY
271#define EY 602
272#endif
273
275#ifndef NENS
276#define NENS 2000
277#endif
278
280#ifndef NOBS
281#define NOBS 10000000
282#endif
283
285#ifndef NTHREADS
286#define NTHREADS 512
287#endif
288
290#ifndef CY
291#define CY 250
292#endif
293
295#ifndef CO3
296#define CO3 30
297#endif
298
300#ifndef CP
301#define CP 70
302#endif
303
305#ifndef CSZA
306#define CSZA 50
307#endif
308
310#ifndef CT
311#define CT 12
312#endif
313
315#ifndef CTS
316#define CTS 1000
317#endif
318
319/* ------------------------------------------------------------
320 Macros...
321 ------------------------------------------------------------ */
322
342#ifdef _OPENACC
343#define ALLOC(ptr, type, n) \
344 if(acc_get_num_devices(acc_device_nvidia) <= 0) \
345 ERRMSG("Not running on a GPU device!"); \
346 if((ptr=calloc((size_t)(n), sizeof(type)))==NULL) \
347 ERRMSG("Out of memory!");
348#else
349#define ALLOC(ptr, type, n) \
350 if((ptr=calloc((size_t)(n), sizeof(type)))==NULL) \
351 ERRMSG("Out of memory!");
352#endif
353
372#define ARRAY_2D(ix, iy, ny) \
373 ((ix) * (ny) + (iy))
374
391#define ARRAY_3D(ix, iy, ny, iz, nz) \
392 (((ix)*(ny) + (iy)) * (nz) + (iz))
393
416#define ARRHENIUS(a, b, t) \
417 ((a) * exp( -(b) / (t)))
418
440#define DEG2DX(dlon, lat) \
441 (RE * DEG2RAD(dlon) * cos(DEG2RAD(lat)))
442
461#define DEG2DY(dlat) \
462 (RE * DEG2RAD(dlat))
463
478#define DEG2RAD(deg) \
479 ((deg) * (M_PI / 180.0))
480
503#define DP2DZ(dp, p) \
504 (- (dp) * H0 / (p))
505
525#define DX2DEG(dx, lat) \
526 (((lat) < -89.999 || (lat) > 89.999) ? 0 \
527 : (dx) * 180. / (M_PI * RE * cos(DEG2RAD(lat))))
528
543#define DY2DEG(dy) \
544 ((dy) * 180. / (M_PI * RE))
545
562#define DZ2DP(dz, p) \
563 (-(dz) * (p) / H0)
564
578#define DIST(a, b) \
579 sqrt(DIST2(a, b))
580
594#define DIST2(a, b) \
595 ((a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1])+(a[2]-b[2])*(a[2]-b[2]))
596
610#define DOTP(a, b) \
611 (a[0]*b[0]+a[1]*b[1]+a[2]*b[2])
612
629#define FMOD(x, y) \
630 ((x) - (int) ((x) / (y)) * (y))
631
647#define FREAD(ptr, type, size, in) { \
648 if(fread(ptr, sizeof(type), size, in)!=size) \
649 ERRMSG("Error while reading!"); \
650 }
651
667#define FWRITE(ptr, type, size, out) { \
668 if(fwrite(ptr, sizeof(type), size, out)!=size) \
669 ERRMSG("Error while writing!"); \
670 }
671
682#define INTPOL_INIT \
683 double cw[4] = {0.0, 0.0, 0.0, 0.0}; int ci[3] = {0, 0, 0};
684
696#define INTPOL_2D(var, init) \
697 intpol_met_time_2d(met0, met0->var, met1, met1->var, \
698 atm->time[ip], atm->lon[ip], atm->lat[ip], \
699 &var, ci, cw, init);
700
713#define INTPOL_3D(var, init) \
714 intpol_met_time_3d(met0, met0->var, met1, met1->var, \
715 atm->time[ip], atm->p[ip], \
716 atm->lon[ip], atm->lat[ip], \
717 &var, ci, cw, init);
718
732#define INTPOL_SPACE_ALL(p, lon, lat) { \
733 intpol_met_space_3d(met, met->z, p, lon, lat, &z, ci, cw, 1); \
734 intpol_met_space_3d(met, met->t, p, lon, lat, &t, ci, cw, 0); \
735 intpol_met_space_3d(met, met->u, p, lon, lat, &u, ci, cw, 0); \
736 intpol_met_space_3d(met, met->v, p, lon, lat, &v, ci, cw, 0); \
737 intpol_met_space_3d(met, met->w, p, lon, lat, &w, ci, cw, 0); \
738 intpol_met_space_3d(met, met->pv, p, lon, lat, &pv, ci, cw, 0); \
739 intpol_met_space_3d(met, met->h2o, p, lon, lat, &h2o, ci, cw, 0); \
740 intpol_met_space_3d(met, met->o3, p, lon, lat, &o3, ci, cw, 0); \
741 intpol_met_space_3d(met, met->lwc, p, lon, lat, &lwc, ci, cw, 0); \
742 intpol_met_space_3d(met, met->rwc, p, lon, lat, &rwc, ci, cw, 0); \
743 intpol_met_space_3d(met, met->iwc, p, lon, lat, &iwc, ci, cw, 0); \
744 intpol_met_space_3d(met, met->swc, p, lon, lat, &swc, ci, cw, 0); \
745 intpol_met_space_3d(met, met->cc, p, lon, lat, &cc, ci, cw, 0); \
746 intpol_met_space_2d(met, met->ps, lon, lat, &ps, ci, cw, 0); \
747 intpol_met_space_2d(met, met->ts, lon, lat, &ts, ci, cw, 0); \
748 intpol_met_space_2d(met, met->zs, lon, lat, &zs, ci, cw, 0); \
749 intpol_met_space_2d(met, met->us, lon, lat, &us, ci, cw, 0); \
750 intpol_met_space_2d(met, met->vs, lon, lat, &vs, ci, cw, 0); \
751 intpol_met_space_2d(met, met->ess, ess, lat, &vs, ci, cw, 0); \
752 intpol_met_space_2d(met, met->nss, nss, lat, &vs, ci, cw, 0); \
753 intpol_met_space_2d(met, met->shf, shf, lat, &vs, ci, cw, 0); \
754 intpol_met_space_2d(met, met->lsm, lon, lat, &lsm, ci, cw, 0); \
755 intpol_met_space_2d(met, met->sst, lon, lat, &sst, ci, cw, 0); \
756 intpol_met_space_2d(met, met->pbl, lon, lat, &pbl, ci, cw, 0); \
757 intpol_met_space_2d(met, met->pt, lon, lat, &pt, ci, cw, 0); \
758 intpol_met_space_2d(met, met->tt, lon, lat, &tt, ci, cw, 0); \
759 intpol_met_space_2d(met, met->zt, lon, lat, &zt, ci, cw, 0); \
760 intpol_met_space_2d(met, met->h2ot, lon, lat, &h2ot, ci, cw, 0); \
761 intpol_met_space_2d(met, met->pct, lon, lat, &pct, ci, cw, 0); \
762 intpol_met_space_2d(met, met->pcb, lon, lat, &pcb, ci, cw, 0); \
763 intpol_met_space_2d(met, met->cl, lon, lat, &cl, ci, cw, 0); \
764 intpol_met_space_2d(met, met->plcl, lon, lat, &plcl, ci, cw, 0); \
765 intpol_met_space_2d(met, met->plfc, lon, lat, &plfc, ci, cw, 0); \
766 intpol_met_space_2d(met, met->pel, lon, lat, &pel, ci, cw, 0); \
767 intpol_met_space_2d(met, met->cape, lon, lat, &cape, ci, cw, 0); \
768 intpol_met_space_2d(met, met->cin, lon, lat, &cin, ci, cw, 0); \
769 intpol_met_space_2d(met, met->o3c, lon, lat, &o3c, ci, cw, 0); \
770 }
771
786#define INTPOL_TIME_ALL(time, p, lon, lat) { \
787 intpol_met_time_3d(met0, met0->z, met1, met1->z, time, p, lon, lat, &z, ci, cw, 1); \
788 intpol_met_time_3d(met0, met0->t, met1, met1->t, time, p, lon, lat, &t, ci, cw, 0); \
789 intpol_met_time_3d(met0, met0->u, met1, met1->u, time, p, lon, lat, &u, ci, cw, 0); \
790 intpol_met_time_3d(met0, met0->v, met1, met1->v, time, p, lon, lat, &v, ci, cw, 0); \
791 intpol_met_time_3d(met0, met0->w, met1, met1->w, time, p, lon, lat, &w, ci, cw, 0); \
792 intpol_met_time_3d(met0, met0->pv, met1, met1->pv, time, p, lon, lat, &pv, ci, cw, 0); \
793 intpol_met_time_3d(met0, met0->h2o, met1, met1->h2o, time, p, lon, lat, &h2o, ci, cw, 0); \
794 intpol_met_time_3d(met0, met0->o3, met1, met1->o3, time, p, lon, lat, &o3, ci, cw, 0); \
795 intpol_met_time_3d(met0, met0->lwc, met1, met1->lwc, time, p, lon, lat, &lwc, ci, cw, 0); \
796 intpol_met_time_3d(met0, met0->rwc, met1, met1->rwc, time, p, lon, lat, &rwc, ci, cw, 0); \
797 intpol_met_time_3d(met0, met0->iwc, met1, met1->iwc, time, p, lon, lat, &iwc, ci, cw, 0); \
798 intpol_met_time_3d(met0, met0->swc, met1, met1->swc, time, p, lon, lat, &swc, ci, cw, 0); \
799 intpol_met_time_3d(met0, met0->cc, met1, met1->cc, time, p, lon, lat, &cc, ci, cw, 0); \
800 intpol_met_time_2d(met0, met0->ps, met1, met1->ps, time, lon, lat, &ps, ci, cw, 0); \
801 intpol_met_time_2d(met0, met0->ts, met1, met1->ts, time, lon, lat, &ts, ci, cw, 0); \
802 intpol_met_time_2d(met0, met0->zs, met1, met1->zs, time, lon, lat, &zs, ci, cw, 0); \
803 intpol_met_time_2d(met0, met0->us, met1, met1->us, time, lon, lat, &us, ci, cw, 0); \
804 intpol_met_time_2d(met0, met0->vs, met1, met1->vs, time, lon, lat, &vs, ci, cw, 0); \
805 intpol_met_time_2d(met0, met0->ess, met1, met1->ess, time, lon, lat, &ess, ci, cw, 0); \
806 intpol_met_time_2d(met0, met0->nss, met1, met1->nss, time, lon, lat, &nss, ci, cw, 0); \
807 intpol_met_time_2d(met0, met0->shf, met1, met1->shf, time, lon, lat, &shf, ci, cw, 0); \
808 intpol_met_time_2d(met0, met0->lsm, met1, met1->lsm, time, lon, lat, &lsm, ci, cw, 0); \
809 intpol_met_time_2d(met0, met0->sst, met1, met1->sst, time, lon, lat, &sst, ci, cw, 0); \
810 intpol_met_time_2d(met0, met0->pbl, met1, met1->pbl, time, lon, lat, &pbl, ci, cw, 0); \
811 intpol_met_time_2d(met0, met0->pt, met1, met1->pt, time, lon, lat, &pt, ci, cw, 0); \
812 intpol_met_time_2d(met0, met0->tt, met1, met1->tt, time, lon, lat, &tt, ci, cw, 0); \
813 intpol_met_time_2d(met0, met0->zt, met1, met1->zt, time, lon, lat, &zt, ci, cw, 0); \
814 intpol_met_time_2d(met0, met0->h2ot, met1, met1->h2ot, time, lon, lat, &h2ot, ci, cw, 0); \
815 intpol_met_time_2d(met0, met0->pct, met1, met1->pct, time, lon, lat, &pct, ci, cw, 0); \
816 intpol_met_time_2d(met0, met0->pcb, met1, met1->pcb, time, lon, lat, &pcb, ci, cw, 0); \
817 intpol_met_time_2d(met0, met0->cl, met1, met1->cl, time, lon, lat, &cl, ci, cw, 0); \
818 intpol_met_time_2d(met0, met0->plcl, met1, met1->plcl, time, lon, lat, &plcl, ci, cw, 0); \
819 intpol_met_time_2d(met0, met0->plfc, met1, met1->plfc, time, lon, lat, &plfc, ci, cw, 0); \
820 intpol_met_time_2d(met0, met0->pel, met1, met1->pel, time, lon, lat, &pel, ci, cw, 0); \
821 intpol_met_time_2d(met0, met0->cape, met1, met1->cape, time, lon, lat, &cape, ci, cw, 0); \
822 intpol_met_time_2d(met0, met0->cin, met1, met1->cin, time, lon, lat, &cin, ci, cw, 0); \
823 intpol_met_time_2d(met0, met0->o3c, met1, met1->o3c, time, lon, lat, &o3c, ci, cw, 0); \
824 }
825
840#define LAPSE(p1, t1, p2, t2) \
841 (1e3 * G0 / RA * ((t2) - (t1)) / ((t2) + (t1)) \
842 * ((p2) + (p1)) / ((p2) - (p1)))
843
859#define LIN(x0, y0, x1, y1, x) \
860 ((y0)+((y1)-(y0))/((x1)-(x0))*((x)-(x0)))
861
886#define MAX(a,b) \
887 (((a)>(b))?(a):(b))
888
900#define MET_HEADER \
901 fprintf(out, \
902 "# $1 = time [s]\n" \
903 "# $2 = altitude [km]\n" \
904 "# $3 = longitude [deg]\n" \
905 "# $4 = latitude [deg]\n" \
906 "# $5 = pressure [hPa]\n" \
907 "# $6 = temperature [K]\n" \
908 "# $7 = zonal wind [m/s]\n" \
909 "# $8 = meridional wind [m/s]\n" \
910 "# $9 = vertical velocity [hPa/s]\n" \
911 "# $10 = H2O volume mixing ratio [ppv]\n"); \
912 fprintf(out, \
913 "# $11 = O3 volume mixing ratio [ppv]\n" \
914 "# $12 = geopotential height [km]\n" \
915 "# $13 = potential vorticity [PVU]\n" \
916 "# $14 = surface pressure [hPa]\n" \
917 "# $15 = surface temperature [K]\n" \
918 "# $16 = surface geopotential height [km]\n" \
919 "# $17 = surface zonal wind [m/s]\n" \
920 "# $18 = surface meridional wind [m/s]\n" \
921 "# $19 = eastward turbulent surface stress [N/m^2]\n" \
922 "# $20 = northward turbulent surface stress [N/m^2]\n"); \
923 fprintf(out, \
924 "# $21 = surface sensible heat flux [W/m^2]\n" \
925 "# $22 = land-sea mask [1]\n" \
926 "# $23 = sea surface temperature [K]\n" \
927 "# $24 = tropopause pressure [hPa]\n" \
928 "# $25 = tropopause geopotential height [km]\n" \
929 "# $26 = tropopause temperature [K]\n" \
930 "# $27 = tropopause water vapor [ppv]\n" \
931 "# $28 = cloud liquid water content [kg/kg]\n" \
932 "# $29 = cloud rain water content [kg/kg]\n" \
933 "# $30 = cloud ice water content [kg/kg]\n"); \
934 fprintf(out, \
935 "# $31 = cloud snow water content [kg/kg]\n" \
936 "# $32 = cloud cover [1]\n" \
937 "# $33 = total column cloud water [kg/m^2]\n" \
938 "# $34 = cloud top pressure [hPa]\n" \
939 "# $35 = cloud bottom pressure [hPa]\n" \
940 "# $36 = pressure at lifted condensation level (LCL) [hPa]\n" \
941 "# $37 = pressure at level of free convection (LFC) [hPa]\n" \
942 "# $38 = pressure at equilibrium level (EL) [hPa]\n" \
943 "# $39 = convective available potential energy (CAPE) [J/kg]\n" \
944 "# $40 = convective inhibition (CIN) [J/kg]\n"); \
945 fprintf(out, \
946 "# $41 = relative humidity over water [%%]\n" \
947 "# $42 = relative humidity over ice [%%]\n" \
948 "# $43 = dew point temperature [K]\n" \
949 "# $44 = frost point temperature [K]\n" \
950 "# $45 = NAT temperature [K]\n" \
951 "# $46 = HNO3 volume mixing ratio [ppv]\n" \
952 "# $47 = OH volume mixing ratio [ppv]\n" \
953 "# $48 = H2O2 volume mixing ratio [ppv]\n" \
954 "# $49 = HO2 volume mixing ratio [ppv]\n" \
955 "# $50 = O(1D) volume mixing ratio [ppv]\n"); \
956 fprintf(out, \
957 "# $51 = boundary layer pressure [hPa]\n" \
958 "# $52 = total column ozone [DU]\n" \
959 "# $53 = number of data points\n" \
960 "# $54 = number of tropopause data points\n" \
961 "# $55 = number of CAPE data points\n");
962
987#define MIN(a,b) \
988 (((a)<(b))?(a):(b))
989
1002#define MOLEC_DENS(p,t) \
1003 (AVO * 1e-6 * ((p) * 100) / (RI * (t)))
1004
1016#define NC(cmd) { \
1017 int nc_result=(cmd); \
1018 if(nc_result!=NC_NOERR) \
1019 ERRMSG("%s", nc_strerror(nc_result)); \
1020 }
1021
1045#define NC_DEF_VAR(varname, type, ndims, dims, long_name, units, level, quant) { \
1046 NC(nc_def_var(ncid, varname, type, ndims, dims, &varid)); \
1047 NC(nc_put_att_text(ncid, varid, "long_name", strnlen(long_name, LEN), long_name)); \
1048 NC(nc_put_att_text(ncid, varid, "units", strnlen(units, LEN), units)); \
1049 if((quant) > 0) \
1050 NC(nc_def_var_quantize(ncid, varid, NC_QUANTIZE_GRANULARBR, quant)); \
1051 if((level) != 0) { \
1052 NC(nc_def_var_deflate(ncid, varid, 1, 1, level)); \
1053 /* unsigned int ulevel = (unsigned int)level; */ \
1054 /* NC(nc_def_var_filter(ncid, varid, 32015, 1, (unsigned int[]){ulevel})); */ \
1055 } \
1056 }
1057
1075#define NC_GET_DOUBLE(varname, ptr, force) { \
1076 if(force) { \
1077 NC(nc_inq_varid(ncid, varname, &varid)); \
1078 NC(nc_get_var_double(ncid, varid, ptr)); \
1079 } else { \
1080 if(nc_inq_varid(ncid, varname, &varid) == NC_NOERR) { \
1081 NC(nc_get_var_double(ncid, varid, ptr)); \
1082 } else \
1083 WARN("netCDF variable %s is missing!", varname); \
1084 } \
1085 }
1086
1103#define NC_INQ_DIM(dimname, ptr, min, max) { \
1104 int dimid; size_t naux; \
1105 NC(nc_inq_dimid(ncid, dimname, &dimid)); \
1106 NC(nc_inq_dimlen(ncid, dimid, &naux)); \
1107 *ptr = (int)naux; \
1108 if ((*ptr) < (min) || (*ptr) > (max)) \
1109 ERRMSG("Dimension %s is out of range!", dimname); \
1110 }
1111
1126#define NC_PUT_DOUBLE(varname, ptr, hyperslab) { \
1127 NC(nc_inq_varid(ncid, varname, &varid)); \
1128 if(hyperslab) { \
1129 NC(nc_put_vara_double(ncid, varid, start, count, ptr)); \
1130 } else { \
1131 NC(nc_put_var_double(ncid, varid, ptr)); \
1132 } \
1133 }
1134
1150#define NC_PUT_FLOAT(varname, ptr, hyperslab) { \
1151 NC(nc_inq_varid(ncid, varname, &varid)); \
1152 if(hyperslab) { \
1153 NC(nc_put_vara_float(ncid, varid, start, count, ptr)); \
1154 } else { \
1155 NC(nc_put_var_float(ncid, varid, ptr)); \
1156 } \
1157 }
1158
1173#define NC_PUT_INT(varname, ptr, hyperslab) { \
1174 NC(nc_inq_varid(ncid, varname, &varid)); \
1175 if(hyperslab) { \
1176 NC(nc_put_vara_int(ncid, varid, start, count, ptr)); \
1177 } else { \
1178 NC(nc_put_var_int(ncid, varid, ptr)); \
1179 } \
1180 }
1181
1195#define NC_PUT_ATT(varname, attname, text) { \
1196 NC(nc_inq_varid(ncid, varname, &varid)); \
1197 NC(nc_put_att_text(ncid, varid, attname, strnlen(text, LEN), text)); \
1198 }
1199
1212#define NC_PUT_ATT_GLOBAL(attname, text) \
1213 NC(nc_put_att_text(ncid, NC_GLOBAL, attname, strnlen(text, LEN), text));
1214
1232#define NN(x0, y0, x1, y1, x) \
1233 (fabs((x) - (x0)) <= fabs((x) - (x1)) ? (y0) : (y1))
1234
1247#define NORM(a) \
1248 sqrt(DOTP(a, a))
1249
1265#ifdef _OPENACC
1266#define PARTICLE_LOOP(ip0, ip1, check_dt, ...) \
1267 const int ip0_const = ip0; \
1268 const int ip1_const = ip1; \
1269 _Pragma(__VA_ARGS__) \
1270 _Pragma("acc parallel loop independent gang vector") \
1271 for (int ip = ip0_const; ip < ip1_const; ip++) \
1272 if (!check_dt || cache->dt[ip] != 0)
1273#else
1274#define PARTICLE_LOOP(ip0, ip1, check_dt, ...) \
1275 const int ip0_const = ip0; \
1276 const int ip1_const = ip1; \
1277 _Pragma("omp parallel for default(shared)") \
1278 for (int ip = ip0_const; ip < ip1_const; ip++) \
1279 if (!check_dt || cache->dt[ip] != 0)
1280#endif
1281
1304#define P(z) \
1305 (P0 * exp(-(z) / H0))
1306
1328#define PSAT(t) \
1329 (6.112 * exp(17.62 * ((t) - T0) / (243.12 + (t) - T0)))
1330
1352#define PSICE(t) \
1353 (6.112 * exp(22.46 * ((t) - T0) / (272.62 + (t) - T0)))
1354
1379#define PW(p, h2o) \
1380 ((p) * MAX((h2o), 0.1e-6) / (1. + (1. - EPS) * MAX((h2o), 0.1e-6)))
1381
1396#define RAD2DEG(rad) \
1397 ((rad) * (180.0 / M_PI))
1398
1426#define RH(p, t, h2o) \
1427 (PW(p, h2o) / PSAT(t) * 100.)
1428
1456#define RHICE(p, t, h2o) \
1457 (PW(p, h2o) / PSICE(t) * 100.)
1458
1481#define RHO(p, t) \
1482 (100. * (p) / (RA * (t)))
1483
1500#define SET_ATM(qnt, val) \
1501 if (ctl->qnt >= 0) \
1502 atm->q[ctl->qnt][ip] = val;
1503
1523#define SET_QNT(qnt, name, longname, unit) \
1524 if (strcasecmp(ctl->qnt_name[iq], name) == 0) { \
1525 ctl->qnt = iq; \
1526 sprintf(ctl->qnt_longname[iq], longname); \
1527 sprintf(ctl->qnt_unit[iq], unit); \
1528 } else
1529
1544#define SH(h2o) \
1545 (EPS * MAX((h2o), 0.1e-6))
1546
1557#define SQR(x) \
1558 ((x)*(x))
1559
1571#define SWAP(x, y, type) \
1572 do {type tmp = x; x = y; y = tmp;} while(0);
1573
1595#define TDEW(p, h2o) \
1596 (T0 + 243.12 * log(PW((p), (h2o)) / 6.112) \
1597 / (17.62 - log(PW((p), (h2o)) / 6.112)))
1598
1620#define TICE(p, h2o) \
1621 (T0 + 272.62 * log(PW((p), (h2o)) / 6.112) \
1622 / (22.46 - log(PW((p), (h2o)) / 6.112)))
1623
1644#define THETA(p, t) \
1645 ((t) * pow(1000. / (p), 0.286))
1646
1673#define THETAVIRT(p, t, h2o) \
1674 (TVIRT(THETA((p), (t)), MAX((h2o), 0.1e-6)))
1675
1694#define TOK(line, tok, format, var) { \
1695 if(((tok)=strtok((line), " \t"))) { \
1696 if(sscanf(tok, format, &(var))!=1) continue; \
1697 } else ERRMSG("Error while reading!"); \
1698 }
1699
1719#define TVIRT(t, h2o) \
1720 ((t) * (1. + (1. - EPS) * MAX((h2o), 0.1e-6)))
1721
1741#define Z(p) \
1742 (H0 * log(P0 / (p)))
1743
1772#define ZDIFF(lnp0, t0, h2o0, lnp1, t1, h2o1) \
1773 (RI / MA / G0 * 0.5 * (TVIRT((t0), (h2o0)) + TVIRT((t1), (h2o1))) \
1774 * ((lnp0) - (lnp1)))
1775
1803#define ZETA(ps, p, t) \
1804 (((p) / (ps) <= 0.3 ? 1. : \
1805 sin(M_PI / 2. * (1. - (p) / (ps)) / (1. - 0.3))) \
1806 * THETA((p), (t)))
1807
1808/* ------------------------------------------------------------
1809 Log messages...
1810 ------------------------------------------------------------ */
1811
1813#ifndef LOGLEV
1814#define LOGLEV 2
1815#endif
1816
1846#define LOG(level, ...) { \
1847 if(level >= 2) \
1848 printf(" "); \
1849 if(level <= LOGLEV) { \
1850 printf(__VA_ARGS__); \
1851 printf("\n"); \
1852 } \
1853 }
1854
1883#define WARN(...) { \
1884 printf("\nWarning (%s, %s, l%d): ", __FILE__, __func__, __LINE__); \
1885 LOG(0, __VA_ARGS__); \
1886 }
1887
1916#define ERRMSG(...) { \
1917 printf("\nError (%s, %s, l%d): ", __FILE__, __func__, __LINE__); \
1918 LOG(0, __VA_ARGS__); \
1919 exit(EXIT_FAILURE); \
1920 }
1921
1951#define PRINT(format, var) \
1952 printf("Print (%s, %s, l%d): %s= "format"\n", \
1953 __FILE__, __func__, __LINE__, #var, var);
1954
1955/* ------------------------------------------------------------
1956 Timers...
1957 ------------------------------------------------------------ */
1958
1960#define NTIMER 100
1961
1975#define PRINT_TIMERS \
1976 timer("END", "END", 1);
1977
1996#define SELECT_TIMER(id, group, color) { \
1997 NVTX_POP; \
1998 NVTX_PUSH(id, color); \
1999 timer(id, group, 0); \
2000 }
2001
2015#define START_TIMERS \
2016 NVTX_PUSH("START", NVTX_CPU);
2017
2030#define STOP_TIMERS \
2031 NVTX_POP;
2032
2033/* ------------------------------------------------------------
2034 NVIDIA Tools Extension (NVTX)...
2035 ------------------------------------------------------------ */
2036
2037#ifdef NVTX
2038#include "nvToolsExt.h"
2039
2041#define NVTX_CPU 0xFFADD8E6
2042
2044#define NVTX_GPU 0xFF00008B
2045
2047#define NVTX_H2D 0xFFFFFF00
2048
2050#define NVTX_D2H 0xFFFF8800
2051
2053#define NVTX_READ 0xFFFFCCCB
2054
2056#define NVTX_WRITE 0xFF8B0000
2057
2059#define NVTX_RECV 0xFFCCFFCB
2060
2062#define NVTX_SEND 0xFF008B00
2063
2093#define NVTX_PUSH(range_title, range_color) { \
2094 nvtxEventAttributes_t eventAttrib = {0}; \
2095 eventAttrib.version = NVTX_VERSION; \
2096 eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; \
2097 eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; \
2098 eventAttrib.colorType = NVTX_COLOR_ARGB; \
2099 eventAttrib.color = range_color; \
2100 eventAttrib.message.ascii = range_title; \
2101 nvtxRangePushEx(&eventAttrib); \
2102 }
2103
2116#define NVTX_POP { \
2117 nvtxRangePop(); \
2118 }
2119#else
2120
2121/* Empty definitions of NVTX_PUSH and NVTX_POP... */
2122#define NVTX_PUSH(range_title, range_color) {}
2123#define NVTX_POP {}
2124#endif
2125
2126/* ------------------------------------------------------------
2127 Thrust...
2128 ------------------------------------------------------------ */
2129
2155 double *__restrict__ c,
2156 int n,
2157 int *__restrict__ index);
2158
2159/* ------------------------------------------------------------
2160 Structs...
2161 ------------------------------------------------------------ */
2162
2170typedef struct {
2171
2172 /* ------------------------------------------------------------
2173 Quantity parameters...
2174 ------------------------------------------------------------ */
2175
2177 int nq;
2178
2180 char qnt_name[NQ][LEN];
2181
2183 char qnt_longname[NQ][LEN];
2184
2186 char qnt_unit[NQ][LEN];
2187
2189 char qnt_format[NQ][LEN];
2190
2193
2196
2199
2202
2205
2208
2211
2214
2217
2220
2223
2226
2229
2232
2235
2238
2241
2244
2247
2250
2253
2256
2259
2262
2265
2268
2271
2274
2277
2280
2283
2286
2289
2292
2295
2298
2301
2304
2307
2310
2313
2316
2319
2322
2325
2328
2331
2334
2337
2340
2343
2346
2349
2352
2355
2358
2361
2364
2367
2370
2373
2376
2379
2382
2385
2388
2391
2394
2397
2400
2403
2406
2409
2412
2415
2418
2421
2424
2427
2430
2433
2436
2439
2442
2445
2448
2451
2454
2457
2460
2463
2466
2468 double t_start;
2469
2471 double t_stop;
2472
2474 double dt_mod;
2475
2476 /* ------------------------------------------------------------
2477 Meteo data parameters...
2478 ------------------------------------------------------------ */
2479
2481 char metbase[LEN];
2482
2484 double dt_met;
2485
2488
2491
2495
2498
2501
2504
2507
2510
2513
2516
2519
2523
2526
2529
2532
2535
2538
2541
2544
2547
2550
2553
2556
2559
2562
2565
2568
2571
2574
2577
2580
2583
2586
2588 double met_p[EP];
2589
2592
2595
2598
2601
2604
2607
2610
2613
2617
2620
2623
2626
2629
2632
2635
2636 /* ------------------------------------------------------------
2637 Geophysical module parameters...
2638 ------------------------------------------------------------ */
2639
2641 double sort_dt;
2642
2646
2648 char balloon[LEN];
2649
2652
2655
2658
2661
2664
2667
2670
2673
2676
2679
2682
2685
2688
2691
2694
2696 double conv_cin;
2697
2699 double conv_dt;
2700
2703
2706
2709
2712
2715
2718
2720 double bound_p0;
2721
2723 double bound_p1;
2724
2727
2730
2733
2736
2738 char species[LEN];
2739
2741 double molmass;
2742
2745
2748
2751
2753 char clim_hno3_filename[LEN];
2754
2756 char clim_oh_filename[LEN];
2757
2759 char clim_h2o2_filename[LEN];
2760
2762 char clim_ho2_filename[LEN];
2763
2765 char clim_o1d_filename[LEN];
2766
2768 char clim_o3_filename[LEN];
2769
2771 char clim_ccl4_timeseries[LEN];
2772
2774 char clim_ccl3f_timeseries[LEN];
2775
2777 char clim_ccl2f2_timeseries[LEN];
2778
2780 char clim_n2o_timeseries[LEN];
2781
2783 char clim_sf6_timeseries[LEN];
2784
2787
2790
2793
2796
2799
2802
2805
2808
2811
2814
2817
2820
2823
2826
2829
2832
2835
2838
2841
2844
2847
2850
2852 double oh_chem[4];
2853
2856
2859
2862
2864 double dt_kpp;
2865
2868
2870 double wet_depo_pre[2];
2871
2874
2877
2880
2883
2885 double wet_depo_ic_h[2];
2886
2888 double wet_depo_bc_h[2];
2889
2892
2895
2898
2901
2904
2906 double psc_h2o;
2907
2909 double psc_hno3;
2910
2911 /* ------------------------------------------------------------
2912 Output parameters...
2913 ------------------------------------------------------------ */
2914
2916 char atm_basename[LEN];
2917
2919 char atm_gpfile[LEN];
2920
2923
2926
2929
2933
2938
2941
2943 int atm_nc_quant[NQ];
2944
2947
2949 char csi_basename[LEN];
2950
2952 char csi_kernel[LEN];
2953
2956
2958 char csi_obsfile[LEN];
2959
2962
2965
2968
2970 double csi_z0;
2971
2973 double csi_z1;
2974
2977
2979 double csi_lon0;
2980
2982 double csi_lon1;
2983
2986
2988 double csi_lat0;
2989
2991 double csi_lat1;
2992
2994 char ens_basename[LEN];
2995
2998
3000 char grid_basename[LEN];
3001
3003 char grid_kernel[LEN];
3004
3006 char grid_gpfile[LEN];
3007
3010
3013
3016
3018 int grid_nc_quant[NQ];
3019
3022
3025
3027 double grid_z0;
3028
3030 double grid_z1;
3031
3034
3037
3040
3043
3046
3049
3052
3054 char prof_basename[LEN];
3055
3057 char prof_obsfile[LEN];
3058
3061
3063 double prof_z0;
3064
3066 double prof_z1;
3067
3070
3073
3076
3079
3082
3085
3087 char sample_basename[LEN];
3088
3090 char sample_kernel[LEN];
3091
3093 char sample_obsfile[LEN];
3094
3097
3100
3102 char stat_basename[LEN];
3103
3105 double stat_lon;
3106
3108 double stat_lat;
3109
3111 double stat_r;
3112
3114 double stat_t0;
3115
3117 double stat_t1;
3118
3120 char vtk_basename[LEN];
3121
3124
3127
3130
3133
3136
3137} ctl_t;
3138
3147typedef struct {
3148
3150 int np;
3151
3153 double time[NP];
3154
3156 double p[NP];
3157
3159 double lon[NP];
3160
3162 double lat[NP];
3163
3165 double q[NQ][NP];
3166
3167} atm_t;
3168
3175typedef struct {
3176
3178 double iso_var[NP];
3179
3181 double iso_ps[NP];
3182
3184 double iso_ts[NP];
3185
3188
3190 float uvwp[NP][3];
3191
3193 double rs[3 * NP + 1];
3194
3196 double dt[NP];
3197
3198} cache_t;
3199
3207typedef struct {
3208
3210 int np;
3211
3213 int nsza;
3214
3216 int no3c;
3217
3219 double p[CP];
3220
3222 double sza[CSZA];
3223
3225 double o3c[CO3];
3226
3228 double n2o[CP][CSZA][CO3];
3229
3231 double ccl4[CP][CSZA][CO3];
3232
3234 double ccl3f[CP][CSZA][CO3];
3235
3237 double ccl2f2[CP][CSZA][CO3];
3238
3240 double o2[CP][CSZA][CO3];
3241
3243 double o3_1[CP][CSZA][CO3];
3244
3246 double o3_2[CP][CSZA][CO3];
3247
3249 double h2o2[CP][CSZA][CO3];
3250
3252 double h2o[CP][CSZA][CO3];
3253
3254} clim_photo_t;
3255
3263typedef struct {
3264
3267
3269 double time[CTS];
3270
3272 double vmr[CTS];
3273
3274} clim_ts_t;
3275
3283typedef struct {
3284
3287
3289 int nlat;
3290
3292 int np;
3293
3295 double time[CT];
3296
3298 double lat[CY];
3299
3301 double p[CP];
3302
3304 double vmr[CT][CP][CY];
3305
3306} clim_zm_t;
3307
3315typedef struct {
3316
3319
3322
3324 double tropo_time[12];
3325
3327 double tropo_lat[73];
3328
3330 double tropo[12][73];
3331
3334
3337
3340
3343
3346
3349
3352
3355
3358
3361
3364
3365} clim_t;
3366
3374typedef struct {
3375
3377 double time;
3378
3380 int nx;
3381
3383 int ny;
3384
3386 int np;
3387
3389 int npl;
3390
3392 double lon[EX];
3393
3395 double lat[EY];
3396
3398 double p[EP];
3399
3401 double hybrid[EP];
3402
3404 float ps[EX][EY];
3405
3407 float ts[EX][EY];
3408
3410 float zs[EX][EY];
3411
3413 float us[EX][EY];
3414
3416 float vs[EX][EY];
3417
3419 float ess[EX][EY];
3420
3422 float nss[EX][EY];
3423
3425 float shf[EX][EY];
3426
3428 float lsm[EX][EY];
3429
3431 float sst[EX][EY];
3432
3434 float pbl[EX][EY];
3435
3437 float pt[EX][EY];
3438
3440 float tt[EX][EY];
3441
3443 float zt[EX][EY];
3444
3446 float h2ot[EX][EY];
3447
3449 float pct[EX][EY];
3450
3452 float pcb[EX][EY];
3453
3455 float cl[EX][EY];
3456
3458 float plcl[EX][EY];
3459
3461 float plfc[EX][EY];
3462
3464 float pel[EX][EY];
3465
3467 float cape[EX][EY];
3468
3470 float cin[EX][EY];
3471
3473 float o3c[EX][EY];
3474
3476 float z[EX][EY][EP];
3477
3479 float t[EX][EY][EP];
3480
3482 float u[EX][EY][EP];
3483
3485 float v[EX][EY][EP];
3486
3488 float w[EX][EY][EP];
3489
3491 float pv[EX][EY][EP];
3492
3494 float h2o[EX][EY][EP];
3495
3497 float o3[EX][EY][EP];
3498
3500 float lwc[EX][EY][EP];
3501
3503 float rwc[EX][EY][EP];
3504
3506 float iwc[EX][EY][EP];
3507
3509 float swc[EX][EY][EP];
3510
3512 float cc[EX][EY][EP];
3513
3515 float pl[EX][EY][EP];
3516
3518 float ul[EX][EY][EP];
3519
3521 float vl[EX][EY][EP];
3522
3524 float wl[EX][EY][EP];
3525
3527 float zetal[EX][EY][EP];
3528
3530 float zeta_dotl[EX][EY][EP];
3531
3532} met_t;
3533
3534/* ------------------------------------------------------------
3535 OpenACC routines...
3536 ------------------------------------------------------------ */
3537
3538#ifdef _OPENACC
3539#pragma acc routine (clim_oh)
3540#pragma acc routine (clim_photo)
3541#pragma acc routine (clim_tropo)
3542#pragma acc routine (clim_ts)
3543#pragma acc routine (clim_zm)
3544#pragma acc routine (intpol_met_4d_coord)
3545#pragma acc routine (intpol_met_space_3d)
3546#pragma acc routine (intpol_met_space_3d_ml)
3547#pragma acc routine (intpol_met_space_2d)
3548#pragma acc routine (intpol_met_time_3d)
3549#pragma acc routine (intpol_met_time_3d_ml)
3550#pragma acc routine (intpol_met_time_2d)
3551#pragma acc routine (kernel_weight)
3552#pragma acc routine (lapse_rate)
3553#pragma acc routine (locate_irr)
3554#pragma acc routine (locate_irr_float)
3555#pragma acc routine (locate_reg)
3556#pragma acc routine (locate_vert)
3557#pragma acc routine (nat_temperature)
3558#pragma acc routine (pbl_weight)
3559#pragma acc routine (sedi)
3560#pragma acc routine (stddev)
3561#pragma acc routine (sza_calc)
3562#pragma acc routine (tropo_weight)
3563#endif
3564
3565/* ------------------------------------------------------------
3566 Functions...
3567 ------------------------------------------------------------ */
3568
3591 void *data,
3592 size_t N);
3593
3608void cart2geo(
3609 const double *x,
3610 double *z,
3611 double *lon,
3612 double *lat);
3613
3636double clim_oh(
3637 const ctl_t * ctl,
3638 const clim_t * clim,
3639 const double t,
3640 const double lon,
3641 const double lat,
3642 const double p);
3643
3663 const ctl_t * ctl,
3664 clim_t * clim);
3665
3695double clim_photo(
3696 const double rate[CP][CSZA][CO3],
3697 const clim_photo_t * photo,
3698 const double p,
3699 const double sza,
3700 const double o3c);
3701
3727double clim_tropo(
3728 const clim_t * clim,
3729 const double t,
3730 const double lat);
3731
3750void clim_tropo_init(
3751 clim_t * clim);
3752
3769double clim_ts(
3770 const clim_ts_t * ts,
3771 const double t);
3772
3794double clim_zm(
3795 const clim_zm_t * zm,
3796 const double t,
3797 const double lat,
3798 const double p);
3799
3841 const ctl_t * ctl,
3842 const char *varname,
3843 float *array,
3844 const size_t nx,
3845 const size_t ny,
3846 const size_t np,
3847 const int decompress,
3848 FILE * inout);
3849
3882void compress_pck(
3883 const char *varname,
3884 float *array,
3885 const size_t nxy,
3886 const size_t nz,
3887 const int decompress,
3888 FILE * inout);
3889
3929 const char *varname,
3930 float *array,
3931 const int nx,
3932 const int ny,
3933 const int nz,
3934 const int precision,
3935 const double tolerance,
3936 const int decompress,
3937 FILE * inout);
3938
3975 const char *varname,
3976 float *array,
3977 const size_t n,
3978 const int decompress,
3979 FILE * inout);
3980
4003void day2doy(
4004 const int year,
4005 const int mon,
4006 const int day,
4007 int *doy);
4008
4030void doy2day(
4031 const int year,
4032 const int doy,
4033 int *mon,
4034 int *day);
4035
4062void fft_help(
4063 double *fcReal,
4064 double *fcImag,
4065 const int n);
4066
4093void geo2cart(
4094 const double z,
4095 const double lon,
4096 const double lat,
4097 double *x);
4098
4133void get_met(
4134 ctl_t * ctl,
4135 clim_t * clim,
4136 const double t,
4137 met_t ** met0,
4138 met_t ** met1);
4139
4164void get_met_help(
4165 const ctl_t * ctl,
4166 const double t,
4167 const int direct,
4168 const char *metbase,
4169 const double dt_met,
4170 char *filename);
4171
4195void get_met_replace(
4196 char *orig,
4197 char *search,
4198 char *repl);
4199
4236void get_tropo(
4237 const int met_tropo,
4238 ctl_t * ctl,
4239 clim_t * clim,
4240 met_t * met,
4241 const double *lons,
4242 const int nx,
4243 const double *lats,
4244 const int ny,
4245 double *pt,
4246 double *zt,
4247 double *tt,
4248 double *qt,
4249 double *o3t,
4250 double *ps,
4251 double *zs);
4252
4295 const met_t * met0,
4296 float height0[EX][EY][EP],
4297 float array0[EX][EY][EP],
4298 const met_t * met1,
4299 float height1[EX][EY][EP],
4300 float array1[EX][EY][EP],
4301 const double ts,
4302 const double height,
4303 const double lon,
4304 const double lat,
4305 double *var,
4306 int *ci,
4307 double *cw,
4308 const int init);
4309
4345 const met_t * met,
4346 float array[EX][EY][EP],
4347 const double p,
4348 const double lon,
4349 const double lat,
4350 double *var,
4351 int *ci,
4352 double *cw,
4353 const int init);
4354
4374 const met_t * met,
4375 float array[EX][EY][EP],
4376 const double p,
4377 const double lon,
4378 const double lat,
4379 double *var);
4380
4416 const met_t * met,
4417 float array[EX][EY],
4418 const double lon,
4419 const double lat,
4420 double *var,
4421 int *ci,
4422 double *cw,
4423 const int init);
4424
4459 const met_t * met0,
4460 float array0[EX][EY][EP],
4461 const met_t * met1,
4462 float array1[EX][EY][EP],
4463 const double ts,
4464 const double p,
4465 const double lon,
4466 const double lat,
4467 double *var,
4468 int *ci,
4469 double *cw,
4470 const int init);
4471
4495 const met_t * met0,
4496 float array0[EX][EY][EP],
4497 const met_t * met1,
4498 float array1[EX][EY][EP],
4499 const double ts,
4500 const double p,
4501 const double lon,
4502 const double lat,
4503 double *var);
4504
4540 const met_t * met0,
4541 float array0[EX][EY],
4542 const met_t * met1,
4543 float array1[EX][EY],
4544 const double ts,
4545 const double lon,
4546 const double lat,
4547 double *var,
4548 int *ci,
4549 double *cw,
4550 const int init);
4551
4589void intpol_tropo_3d(
4590 const double time0,
4591 float array0[EX][EY],
4592 const double time1,
4593 float array1[EX][EY],
4594 const double lons[EX],
4595 const double lats[EY],
4596 const int nlon,
4597 const int nlat,
4598 const double time,
4599 const double lon,
4600 const double lat,
4601 const int method,
4602 double *var,
4603 double *sigma);
4604
4631void jsec2time(
4632 const double jsec,
4633 int *year,
4634 int *mon,
4635 int *day,
4636 int *hour,
4637 int *min,
4638 int *sec,
4639 double *remain);
4640
4667double kernel_weight(
4668 const double kz[EP],
4669 const double kw[EP],
4670 const int nk,
4671 const double p);
4672
4711double lapse_rate(
4712 const double t,
4713 const double h2o);
4714
4744 ctl_t * ctl);
4745
4765int locate_irr(
4766 const double *xx,
4767 const int n,
4768 const double x);
4769
4796 const float *xx,
4797 const int n,
4798 const double x,
4799 const int ig);
4800
4821int locate_reg(
4822 const double *xx,
4823 const int n,
4824 const double x);
4825
4847void locate_vert(
4848 float profiles[EX][EY][EP],
4849 const int np,
4850 const int lon_ap_ind,
4851 const int lat_ap_ind,
4852 const double alt_ap,
4853 int *ind);
4854
4901void module_advect(
4902 const ctl_t * ctl,
4903 const cache_t * cache,
4904 met_t * met0,
4905 met_t * met1,
4906 atm_t * atm);
4907
4931 const ctl_t * ctl,
4932 met_t * met0,
4933 met_t * met1,
4934 atm_t * atm);
4935
4973 const ctl_t * ctl,
4974 const cache_t * cache,
4975 const clim_t * clim,
4976 met_t * met0,
4977 met_t * met1,
4978 atm_t * atm);
4979
4997void module_chemgrid(
4998 const ctl_t * ctl,
4999 met_t * met0,
5000 met_t * met1,
5001 atm_t * atm,
5002 const double t);
5003
5030void module_chem_init(
5031 const ctl_t * ctl,
5032 const clim_t * clim,
5033 met_t * met0,
5034 met_t * met1,
5035 atm_t * atm);
5036
5061 const ctl_t * ctl,
5062 cache_t * cache,
5063 met_t * met0,
5064 met_t * met1,
5065 atm_t * atm);
5066
5093void module_decay(
5094 const ctl_t * ctl,
5095 const cache_t * cache,
5096 const clim_t * clim,
5097 atm_t * atm);
5098
5136 const ctl_t * ctl,
5137 cache_t * cache,
5138 met_t * met0,
5139 met_t * met1,
5140 atm_t * atm);
5141
5176 const ctl_t * ctl,
5177 cache_t * cache,
5178 met_t * met0,
5179 met_t * met1,
5180 atm_t * atm);
5181
5237 const ctl_t * ctl,
5238 cache_t * cache,
5239 const clim_t * clim,
5240 met_t * met0,
5241 met_t * met1,
5242 atm_t * atm);
5243
5264 const ctl_t * ctl,
5265 const cache_t * cache,
5266 met_t * met0,
5267 met_t * met1,
5268 atm_t * atm);
5269
5302void module_h2o2_chem(
5303 const ctl_t * ctl,
5304 const cache_t * cache,
5305 const clim_t * clim,
5306 met_t * met0,
5307 met_t * met1,
5308 atm_t * atm);
5309
5330 const ctl_t * ctl,
5331 cache_t * cache,
5332 met_t * met0,
5333 met_t * met1,
5334 atm_t * atm);
5335
5353void module_isosurf(
5354 const ctl_t * ctl,
5355 const cache_t * cache,
5356 met_t * met0,
5357 met_t * met1,
5358 atm_t * atm);
5359
5392 ctl_t * ctl,
5393 cache_t * cache,
5394 clim_t * clim,
5395 met_t * met0,
5396 met_t * met1,
5397 atm_t * atm);
5398
5417void module_meteo(
5418 const ctl_t * ctl,
5419 const cache_t * cache,
5420 const clim_t * clim,
5421 met_t * met0,
5422 met_t * met1,
5423 atm_t * atm);
5424
5442void module_mixing(
5443 const ctl_t * ctl,
5444 const clim_t * clim,
5445 atm_t * atm,
5446 const double t);
5447
5468 const ctl_t * ctl,
5469 const clim_t * clim,
5470 atm_t * atm,
5471 const int *ixs,
5472 const int *iys,
5473 const int *izs,
5474 const int qnt_idx);
5475
5508void module_oh_chem(
5509 const ctl_t * ctl,
5510 const cache_t * cache,
5511 const clim_t * clim,
5512 met_t * met0,
5513 met_t * met1,
5514 atm_t * atm);
5515
5543void module_position(
5544 const cache_t * cache,
5545 met_t * met0,
5546 met_t * met1,
5547 atm_t * atm);
5548
5573void module_rng_init(
5574 const int ntask);
5575
5601void module_rng(
5602 const ctl_t * ctl,
5603 double *rs,
5604 const size_t n,
5605 const int method);
5606
5629void module_sedi(
5630 const ctl_t * ctl,
5631 const cache_t * cache,
5632 met_t * met0,
5633 met_t * met1,
5634 atm_t * atm);
5635
5659void module_sort(
5660 const ctl_t * ctl,
5661 met_t * met0,
5662 atm_t * atm);
5663
5683void module_sort_help(
5684 double *a,
5685 const int *p,
5686 const int np);
5687
5711void module_timesteps(
5712 const ctl_t * ctl,
5713 cache_t * cache,
5714 met_t * met0,
5715 atm_t * atm,
5716 const double t);
5717
5739 ctl_t * ctl,
5740 const atm_t * atm);
5741
5775 const ctl_t * ctl,
5776 const cache_t * cache,
5777 const clim_t * clim,
5778 met_t * met0,
5779 met_t * met1,
5780 atm_t * atm);
5781
5812 const ctl_t * ctl,
5813 const cache_t * cache,
5814 met_t * met0,
5815 met_t * met1,
5816 atm_t * atm);
5817
5838 ctl_t * ctl,
5839 cache_t * cache,
5840 clim_t * clim,
5841 met_t ** met0,
5842 met_t ** met1,
5843 atm_t * atm,
5844 double t);
5845
5873double nat_temperature(
5874 const double p,
5875 const double h2o,
5876 const double hno3);
5877
5898double pbl_weight(
5899 const ctl_t * ctl,
5900 const atm_t * atm,
5901 const int ip,
5902 const double pbl,
5903 const double ps);
5904
5940int read_atm(
5941 const char *filename,
5942 const ctl_t * ctl,
5943 atm_t * atm);
5944
5977int read_atm_asc(
5978 const char *filename,
5979 const ctl_t * ctl,
5980 atm_t * atm);
5981
6012int read_atm_bin(
6013 const char *filename,
6014 const ctl_t * ctl,
6015 atm_t * atm);
6016
6051int read_atm_clams(
6052 const char *filename,
6053 const ctl_t * ctl,
6054 atm_t * atm);
6055
6085int read_atm_nc(
6086 const char *filename,
6087 const ctl_t * ctl,
6088 atm_t * atm);
6089
6121void read_clim(
6122 const ctl_t * ctl,
6123 clim_t * clim);
6124
6153void read_clim_photo(
6154 const char *filename,
6155 clim_photo_t * photo);
6156
6174 const int ncid,
6175 const char *varname,
6176 const clim_photo_t * photo,
6177 double var[CP][CSZA][CO3]);
6178
6202int read_clim_ts(
6203 const char *filename,
6204 clim_ts_t * ts);
6205
6232void read_clim_zm(
6233 const char *filename,
6234 const char *varname,
6235 clim_zm_t * zm);
6236
6266void read_ctl(
6267 const char *filename,
6268 int argc,
6269 char *argv[],
6270 ctl_t * ctl);
6271
6299void read_kernel(
6300 const char *filename,
6301 double kz[EP],
6302 double kw[EP],
6303 int *nk);
6304
6333int read_met(
6334 const char *filename,
6335 const ctl_t * ctl,
6336 const clim_t * clim,
6337 met_t * met);
6338
6370int read_met_bin(
6371 const char *filename,
6372 const ctl_t * ctl,
6373 met_t * met);
6374
6400void read_met_bin_2d(
6401 FILE * in,
6402 const met_t * met,
6403 float var[EX][EY],
6404 const char *varname);
6405
6443void read_met_bin_3d(
6444 FILE * in,
6445 const ctl_t * ctl,
6446 const met_t * met,
6447 float var[EX][EY][EP],
6448 const char *varname,
6449 const float bound_min,
6450 const float bound_max);
6451
6478void read_met_cape(
6479 const ctl_t * ctl,
6480 const clim_t * clim,
6481 met_t * met);
6482
6505void read_met_cloud(
6506 met_t * met);
6507
6533void read_met_detrend(
6534 const ctl_t * ctl,
6535 met_t * met);
6536
6560 met_t * met);
6561
6588void read_met_geopot(
6589 const ctl_t * ctl,
6590 met_t * met);
6591
6623void read_met_grid(
6624 const char *filename,
6625 const int ncid,
6626 const ctl_t * ctl,
6627 met_t * met);
6628
6659void read_met_levels(
6660 const int ncid,
6661 const ctl_t * ctl,
6662 met_t * met);
6663
6692void read_met_ml2pl(
6693 const ctl_t * ctl,
6694 const met_t * met,
6695 float var[EX][EY][EP],
6696 const char *varname);
6697
6719 met_t * met);
6720
6752int read_met_nc(
6753 const char *filename,
6754 const ctl_t * ctl,
6755 const clim_t * clim,
6756 met_t * met);
6757
6787int read_met_nc_2d(
6788 const int ncid,
6789 const char *varname,
6790 const char *varname2,
6791 const char *varname3,
6792 const char *varname4,
6793 const char *varname5,
6794 const char *varname6,
6795 const ctl_t * ctl,
6796 const met_t * met,
6797 float dest[EX][EY],
6798 const float scl,
6799 const int init);
6800
6831int read_met_nc_3d(
6832 const int ncid,
6833 const char *varname,
6834 const char *varname2,
6835 const char *varname3,
6836 const char *varname4,
6837 const ctl_t * ctl,
6838 const met_t * met,
6839 float dest[EX][EY][EP],
6840 const float scl);
6841
6887void read_met_pbl(
6888 const ctl_t * ctl,
6889 met_t * met);
6890
6923 met_t * met);
6924
6955 met_t * met);
6956
6987void read_met_pv(
6988 met_t * met);
6989
7012void read_met_ozone(
7013 met_t * met);
7014
7043void read_met_sample(
7044 const ctl_t * ctl,
7045 met_t * met);
7046
7087void read_met_surface(
7088 const int ncid,
7089 const ctl_t * ctl,
7090 met_t * met);
7091
7120void read_met_tropo(
7121 const ctl_t * ctl,
7122 const clim_t * clim,
7123 met_t * met);
7124
7156void read_obs(
7157 const char *filename,
7158 const ctl_t * ctl,
7159 double *rt,
7160 double *rz,
7161 double *rlon,
7162 double *rlat,
7163 double *robs,
7164 int *nobs);
7165
7193void read_obs_asc(
7194 const char *filename,
7195 double *rt,
7196 double *rz,
7197 double *rlon,
7198 double *rlat,
7199 double *robs,
7200 int *nobs);
7201
7228void read_obs_nc(
7229 const char *filename,
7230 double *rt,
7231 double *rz,
7232 double *rlon,
7233 double *rlat,
7234 double *robs,
7235 int *nobs);
7236
7270double scan_ctl(
7271 const char *filename,
7272 int argc,
7273 char *argv[],
7274 const char *varname,
7275 const int arridx,
7276 const char *defvalue,
7277 char *value);
7278
7305double sedi(
7306 const double p,
7307 const double T,
7308 const double rp,
7309 const double rhop);
7310
7340void spline(
7341 const double *x,
7342 const double *y,
7343 const int n,
7344 const double *x2,
7345 double *y2,
7346 const int n2,
7347 const int method);
7348
7371float stddev(
7372 const float *data,
7373 const int n);
7374
7394double sza_calc(
7395 const double sec,
7396 const double lon,
7397 const double lat);
7398
7423void time2jsec(
7424 const int year,
7425 const int mon,
7426 const int day,
7427 const int hour,
7428 const int min,
7429 const int sec,
7430 const double remain,
7431 double *jsec);
7432
7461void timer(
7462 const char *name,
7463 const char *group,
7464 const int output);
7465
7491double time_from_filename(
7492 const char *filename,
7493 const int offset);
7494
7512double tropo_weight(
7513 const clim_t * clim,
7514 const atm_t * atm,
7515 const int ip);
7516
7546void write_atm(
7547 const char *filename,
7548 const ctl_t * ctl,
7549 const atm_t * atm,
7550 const double t);
7551
7574void write_atm_asc(
7575 const char *filename,
7576 const ctl_t * ctl,
7577 const atm_t * atm,
7578 const double t);
7579
7603void write_atm_bin(
7604 const char *filename,
7605 const ctl_t * ctl,
7606 const atm_t * atm);
7607
7631void write_atm_clams(
7632 const char *filename,
7633 const ctl_t * ctl,
7634 const atm_t * atm);
7635
7661 const char *dirname,
7662 const ctl_t * ctl,
7663 const atm_t * atm,
7664 const double t);
7665
7689void write_atm_nc(
7690 const char *filename,
7691 const ctl_t * ctl,
7692 const atm_t * atm);
7693
7722void write_csi(
7723 const char *filename,
7724 const ctl_t * ctl,
7725 const atm_t * atm,
7726 const double t);
7727
7755void write_ens(
7756 const char *filename,
7757 const ctl_t * ctl,
7758 const atm_t * atm,
7759 const double t);
7760
7799void write_grid(
7800 const char *filename,
7801 const ctl_t * ctl,
7802 met_t * met0,
7803 met_t * met1,
7804 const atm_t * atm,
7805 const double t);
7806
7852void write_grid_asc(
7853 const char *filename,
7854 const ctl_t * ctl,
7855 const double *cd,
7856 double *mean[NQ],
7857 double *sigma[NQ],
7858 const double *vmr_impl,
7859 const double t,
7860 const double *z,
7861 const double *lon,
7862 const double *lat,
7863 const double *area,
7864 const double dz,
7865 const int *np);
7866
7909void write_grid_nc(
7910 const char *filename,
7911 const ctl_t * ctl,
7912 const double *cd,
7913 double *mean[NQ],
7914 double *sigma[NQ],
7915 const double *vmr_impl,
7916 const double t,
7917 const double *z,
7918 const double *lon,
7919 const double *lat,
7920 const double *area,
7921 const double dz,
7922 const int *np);
7923
7959void write_met(
7960 const char *filename,
7961 const ctl_t * ctl,
7962 met_t * met);
7963
7993void write_met_bin(
7994 const char *filename,
7995 const ctl_t * ctl,
7996 met_t * met);
7997
8025void write_met_bin_2d(
8026 FILE * out,
8027 met_t * met,
8028 float var[EX][EY],
8029 const char *varname);
8030
8068void write_met_bin_3d(
8069 FILE * out,
8070 const ctl_t * ctl,
8071 met_t * met,
8072 float var[EX][EY][EP],
8073 const char *varname,
8074 const int precision,
8075 const double tolerance);
8076
8104void write_met_nc(
8105 const char *filename,
8106 const ctl_t * ctl,
8107 met_t * met);
8108
8133void write_met_nc_2d(
8134 const int ncid,
8135 const char *varname,
8136 met_t * met,
8137 float var[EX][EY],
8138 const float scl);
8139
8165void write_met_nc_3d(
8166 const int ncid,
8167 const char *varname,
8168 met_t * met,
8169 float var[EX][EY][EP],
8170 const float scl);
8171
8205void write_output(
8206 const char *dirname,
8207 const ctl_t * ctl,
8208 met_t * met0,
8209 met_t * met1,
8210 atm_t * atm,
8211 const double t);
8212
8243void write_prof(
8244 const char *filename,
8245 const ctl_t * ctl,
8246 met_t * met0,
8247 met_t * met1,
8248 const atm_t * atm,
8249 const double t);
8250
8282void write_sample(
8283 const char *filename,
8284 const ctl_t * ctl,
8285 met_t * met0,
8286 met_t * met1,
8287 const atm_t * atm,
8288 const double t);
8289
8316void write_station(
8317 const char *filename,
8318 const ctl_t * ctl,
8319 atm_t * atm,
8320 const double t);
8321
8350void write_vtk(
8351 const char *filename,
8352 const ctl_t * ctl,
8353 const atm_t * atm,
8354 const double t);
8355
8356#endif /* LIBTRAC_H */
void read_met_geopot(const ctl_t *ctl, met_t *met)
Calculates geopotential heights from meteorological data.
Definition: mptrac.c:6578
#define LEN
Maximum length of ASCII data lines.
Definition: mptrac.h:241
void day2doy(const int year, const int mon, const int day, int *doy)
Get day of year from date.
Definition: mptrac.c:897
void read_met_extrapolate(met_t *met)
Extrapolates meteorological data.
Definition: mptrac.c:6538
void read_met_levels(const int ncid, const ctl_t *ctl, met_t *met)
Reads meteorological variables at different vertical levels from a NetCDF file.
Definition: mptrac.c:6824
int read_met_nc(const char *filename, const ctl_t *ctl, const clim_t *clim, met_t *met)
Reads meteorological data from a NetCDF file and processes it.
Definition: mptrac.c:7082
void write_atm_clams_traj(const char *dirname, const ctl_t *ctl, const atm_t *atm, const double t)
Writes CLaMS trajectory data to a NetCDF file.
Definition: mptrac.c:9046
void write_met_nc_2d(const int ncid, const char *varname, met_t *met, float var[EX][EY], const float scl)
Writes a 2D meteorological variable to a NetCDF file.
Definition: mptrac.c:10446
void read_met_sample(const ctl_t *ctl, met_t *met)
Downsamples meteorological data based on specified parameters.
Definition: mptrac.c:7850
void module_wet_deposition(const ctl_t *ctl, const cache_t *cache, met_t *met0, met_t *met1, atm_t *atm)
Perform wet deposition calculations for air parcels.
Definition: mptrac.c:4185
void write_met_bin_3d(FILE *out, const ctl_t *ctl, met_t *met, float var[EX][EY][EP], const char *varname, const int precision, const double tolerance)
Writes a 3-dimensional meteorological variable to a binary file.
Definition: mptrac.c:10207
void read_obs(const char *filename, const ctl_t *ctl, double *rt, double *rz, double *rlon, double *rlat, double *robs, int *nobs)
Reads observation data from a file and stores it in arrays.
Definition: mptrac.c:8329
void get_met(ctl_t *ctl, clim_t *clim, const double t, met_t **met0, met_t **met1)
Retrieves meteorological data for the specified time.
Definition: mptrac.c:1003
void module_advect(const ctl_t *ctl, const cache_t *cache, met_t *met0, met_t *met1, atm_t *atm)
Performs the advection of atmospheric particles using meteorological data.
Definition: mptrac.c:2217
void module_timesteps(const ctl_t *ctl, cache_t *cache, met_t *met0, atm_t *atm, const double t)
Calculate time steps for air parcels based on specified conditions.
Definition: mptrac.c:4047
int read_met(const char *filename, const ctl_t *ctl, const clim_t *clim, met_t *met)
Reads meteorological data from a file, supporting multiple formats and MPI broadcasting.
Definition: mptrac.c:5944
void module_meteo(const ctl_t *ctl, const cache_t *cache, const clim_t *clim, met_t *met0, met_t *met1, atm_t *atm)
Update atmospheric properties using meteorological data.
Definition: mptrac.c:3361
void read_clim_photo(const char *filename, clim_photo_t *photo)
Reads photolysis rates from a NetCDF file and populates the given photolysis structure.
Definition: mptrac.c:4811
void read_met_cloud(met_t *met)
Calculates cloud-related variables for each grid point.
Definition: mptrac.c:6377
void module_decay(const ctl_t *ctl, const cache_t *cache, const clim_t *clim, atm_t *atm)
Simulate exponential decay processes for atmospheric particles.
Definition: mptrac.c:2753
double sedi(const double p, const double T, const double rp, const double rhop)
Calculates the sedimentation velocity of a particle in air.
Definition: mptrac.c:8502
void intpol_met_space_2d(const met_t *met, float array[EX][EY], const double lon, const double lat, double *var, int *ci, double *cw, const int init)
Interpolates meteorological variables in 2D space.
Definition: mptrac.c:1592
void intpol_met_time_3d_ml(const met_t *met0, float array0[EX][EY][EP], const met_t *met1, float array1[EX][EY][EP], const double ts, const double p, const double lon, const double lat, double *var)
Interpolates a meteorological variable in time and 3D space (longitude, latitude, pressure).
Definition: mptrac.c:1681
int read_atm_nc(const char *filename, const ctl_t *ctl, atm_t *atm)
Reads air parcel data from a generic netCDF file and populates the given atmospheric structure.
Definition: mptrac.c:4718
void read_met_pbl(const ctl_t *ctl, met_t *met)
Computes the planetary boundary layer (PBL) pressure based on meteorological data.
Definition: mptrac.c:7458
void read_met_detrend(const ctl_t *ctl, met_t *met)
Detrends meteorological data.
Definition: mptrac.c:6434
int read_met_nc_2d(const int ncid, const char *varname, const char *varname2, const char *varname3, const char *varname4, const char *varname5, const char *varname6, const ctl_t *ctl, const met_t *met, float dest[EX][EY], const float scl, const int init)
Reads a 2-dimensional meteorological variable from a NetCDF file.
Definition: mptrac.c:7154
void read_met_tropo(const ctl_t *ctl, const clim_t *clim, met_t *met)
Calculates the tropopause and related meteorological variables based on various methods and stores th...
Definition: mptrac.c:8157
void read_obs_asc(const char *filename, double *rt, double *rz, double *rlon, double *rlat, double *robs, int *nobs)
Reads observation data from an ASCII file.
Definition: mptrac.c:8373
int locate_reg(const double *xx, const int n, const double x)
Locate the index of the interval containing a given value in a regular grid.
Definition: mptrac.c:2178
void get_tropo(const int met_tropo, ctl_t *ctl, clim_t *clim, met_t *met, const double *lons, const int nx, const double *lats, const int ny, double *pt, double *zt, double *tt, double *qt, double *o3t, double *ps, double *zs)
Calculate tropopause data.
Definition: mptrac.c:1238
void locate_vert(float profiles[EX][EY][EP], const int np, const int lon_ap_ind, const int lat_ap_ind, const double alt_ap, int *ind)
Locate the four vertical indizes of a box for a given height value.
Definition: mptrac.c:2197
void module_chem_init(const ctl_t *ctl, const clim_t *clim, met_t *met0, met_t *met1, atm_t *atm)
Initializes the chemistry modules by setting atmospheric composition.
Definition: mptrac.c:2639
int read_clim_ts(const char *filename, clim_ts_t *ts)
Reads a climatological time series from a file and populates the given time series structure.
Definition: mptrac.c:4930
void module_dry_deposition(const ctl_t *ctl, const cache_t *cache, met_t *met0, met_t *met1, atm_t *atm)
Simulate dry deposition of atmospheric particles.
Definition: mptrac.c:3046
void read_met_periodic(met_t *met)
Applies periodic boundary conditions to meteorological data along longitudinal axis.
Definition: mptrac.c:7595
void module_timesteps_init(ctl_t *ctl, const atm_t *atm)
Initialize start time and time interval for time-stepping.
Definition: mptrac.c:4084
void write_ens(const char *filename, const ctl_t *ctl, const atm_t *atm, const double t)
Writes ensemble data to a file.
Definition: mptrac.c:9515
void compress_cms(const ctl_t *ctl, const char *varname, float *array, const size_t nx, const size_t ny, const size_t np, const int decompress, FILE *inout)
Compresses or decompresses a 3D array of floats using a custom multiscale compression algorithm.
void module_mixing(const ctl_t *ctl, const clim_t *clim, atm_t *atm, const double t)
Update atmospheric properties through interparcel mixing.
Definition: mptrac.c:3465
void compress_zfp(const char *varname, float *array, const int nx, const int ny, const int nz, const int precision, const double tolerance, const int decompress, FILE *inout)
Compresses or decompresses a 3D array of floats using the ZFP library.
double clim_zm(const clim_zm_t *zm, const double t, const double lat, const double p)
Interpolates monthly mean zonal mean climatological variables.
Definition: mptrac.c:401
#define EY
Maximum number of latitudes for meteo data.
Definition: mptrac.h:271
void read_clim_photo_help(const int ncid, const char *varname, const clim_photo_t *photo, double var[CP][CSZA][CO3])
Reads a 3D climatological photochemistry variable from a NetCDF file.
Definition: mptrac.c:4902
void read_met_ml2pl(const ctl_t *ctl, const met_t *met, float var[EX][EY][EP], const char *varname)
Interpolates meteorological data to specified pressure levels.
Definition: mptrac.c:6960
double clim_tropo(const clim_t *clim, const double t, const double lat)
Calculates the tropopause pressure based on climatological data.
Definition: mptrac.c:200
void read_obs_nc(const char *filename, double *rt, double *rz, double *rlon, double *rlat, double *robs, int *nobs)
Reads observation data from a NetCDF file.
Definition: mptrac.c:8401
void read_met_grid(const char *filename, const int ncid, const ctl_t *ctl, met_t *met)
Reads meteorological grid information from a NetCDF file.
Definition: mptrac.c:6706
void read_met_bin_2d(FILE *in, const met_t *met, float var[EX][EY], const char *varname)
Reads a 2-dimensional meteorological variable from a binary file and stores it in the provided array.
Definition: mptrac.c:6147
int locate_irr(const double *xx, const int n, const double x)
Locate the index of the interval containing a given value in a sorted array.
Definition: mptrac.c:2114
void module_isosurf_init(const ctl_t *ctl, cache_t *cache, met_t *met0, met_t *met1, atm_t *atm)
Initialize the isosurface module based on atmospheric data.
Definition: mptrac.c:3192
void level_definitions(ctl_t *ctl)
Defines pressure levels for meteorological data.
Definition: mptrac.c:1908
void write_grid_asc(const char *filename, const ctl_t *ctl, const double *cd, double *mean[NQ], double *sigma[NQ], const double *vmr_impl, const double t, const double *z, const double *lon, const double *lat, const double *area, const double dz, const int *np)
Writes grid data to an ASCII file.
Definition: mptrac.c:9803
void time2jsec(const int year, const int mon, const int day, const int hour, const int min, const int sec, const double remain, double *jsec)
Converts time components to seconds since January 1, 2000, 12:00:00 UTC.
Definition: mptrac.c:8644
void intpol_met_time_3d(const met_t *met0, float array0[EX][EY][EP], const met_t *met1, float array1[EX][EY][EP], const double ts, const double p, const double lon, const double lat, double *var, int *ci, double *cw, const int init)
Interpolates meteorological data in 3D space and time.
Definition: mptrac.c:1652
void write_atm(const char *filename, const ctl_t *ctl, const atm_t *atm, const double t)
Writes air parcel data to a file in various formats.
Definition: mptrac.c:8801
void fft_help(double *fcReal, double *fcImag, const int n)
Computes the Fast Fourier Transform (FFT) of a complex sequence.
Definition: mptrac.c:946
void compress_pck(const char *varname, float *array, const size_t nxy, const size_t nz, const int decompress, FILE *inout)
Compresses or decompresses a 3D array of floats.
Definition: mptrac.c:657
double nat_temperature(const double p, const double h2o, const double hno3)
Calculates the nitric acid trihydrate (NAT) temperature.
Definition: mptrac.c:4447
void spline(const double *x, const double *y, const int n, const double *x2, double *y2, const int n2, const int method)
Performs spline interpolation or linear interpolation.
Definition: mptrac.c:8535
void module_chemgrid(const ctl_t *ctl, met_t *met0, met_t *met1, atm_t *atm, const double t)
Calculate grid data for chemistry modules.
Definition: mptrac.c:2492
#define CP
Maximum number of pressure levels for climatological data.
Definition: mptrac.h:301
void module_diffusion_meso(const ctl_t *ctl, cache_t *cache, met_t *met0, met_t *met1, atm_t *atm)
Simulate mesoscale diffusion for atmospheric particles.
Definition: mptrac.c:2792
#define NQ
Maximum number of quantities per data point.
Definition: mptrac.h:251
double clim_photo(const double rate[CP][CSZA][CO3], const clim_photo_t *photo, const double p, const double sza, const double o3c)
Calculates the photolysis rate for a given set of atmospheric conditions.
Definition: mptrac.c:149
void read_clim_zm(const char *filename, const char *varname, clim_zm_t *zm)
Reads zonally averaged climatological data from a netCDF file and populates the given structure.
Definition: mptrac.c:4984
#define EX
Maximum number of longitudes for meteo data.
Definition: mptrac.h:266
void module_sedi(const ctl_t *ctl, const cache_t *cache, met_t *met0, met_t *met1, atm_t *atm)
Simulate sedimentation of particles in the atmosphere.
Definition: mptrac.c:3922
void timer(const char *name, const char *group, const int output)
Measures and reports elapsed time for named and grouped timers.
Definition: mptrac.c:8675
void read_met_monotonize(met_t *met)
Makes zeta and pressure profiles monotone.
Definition: mptrac.c:7002
void write_atm_asc(const char *filename, const ctl_t *ctl, const atm_t *atm, const double t)
Writes air parcel data to an ASCII file or gnuplot.
Definition: mptrac.c:8861
void intpol_met_space_3d(const met_t *met, float array[EX][EY][EP], const double p, const double lon, const double lat, double *var, int *ci, double *cw, const int init)
Interpolates meteorological variables in 3D space.
Definition: mptrac.c:1459
void read_met_surface(const int ncid, const ctl_t *ctl, met_t *met)
Reads surface meteorological data from a netCDF file and stores it in the meteorological data structu...
Definition: mptrac.c:8022
void module_convection(const ctl_t *ctl, cache_t *cache, met_t *met0, met_t *met1, atm_t *atm)
Performs convective mixing of atmospheric particles.
Definition: mptrac.c:2680
void read_kernel(const char *filename, double kz[EP], double kw[EP], int *nk)
Reads kernel function data from a file and populates the provided arrays.
Definition: mptrac.c:5903
void module_advect_init(const ctl_t *ctl, met_t *met0, met_t *met1, atm_t *atm)
Initializes the advection module by setting up pressure fields.
Definition: mptrac.c:2370
void module_bound_cond(const ctl_t *ctl, const cache_t *cache, const clim_t *clim, met_t *met0, met_t *met1, atm_t *atm)
Apply boundary conditions to particles based on meteorological and climatological data.
Definition: mptrac.c:2396
double scan_ctl(const char *filename, int argc, char *argv[], const char *varname, const int arridx, const char *defvalue, char *value)
Scans a control file or command-line arguments for a specified variable.
Definition: mptrac.c:8430
#define CT
Maximum number of time steps for climatological data.
Definition: mptrac.h:311
void module_sort_help(double *a, const int *p, const int np)
Reorder an array based on a given permutation.
Definition: mptrac.c:4011
float stddev(const float *data, const int n)
Calculates the standard deviation of a set of data.
Definition: mptrac.c:8582
void write_met(const char *filename, const ctl_t *ctl, met_t *met)
Writes meteorological data to a file, supporting multiple formats and compression options.
Definition: mptrac.c:10037
void module_diffusion_turb(const ctl_t *ctl, cache_t *cache, const clim_t *clim, met_t *met0, met_t *met1, atm_t *atm)
Applies turbulent diffusion processes to atmospheric particles.
Definition: mptrac.c:2994
void intpol_tropo_3d(const double time0, float array0[EX][EY], const double time1, float array1[EX][EY], const double lons[EX], const double lats[EY], const int nlon, const int nlat, const double time, const double lon, const double lat, const int method, double *var, double *sigma)
Interpolates tropopause data in 3D (latitude, longitude, and time).
Definition: mptrac.c:1737
int read_met_nc_3d(const int ncid, const char *varname, const char *varname2, const char *varname3, const char *varname4, const ctl_t *ctl, const met_t *met, float dest[EX][EY][EP], const float scl)
Reads a 3-dimensional meteorological variable from a NetCDF file.
Definition: mptrac.c:7312
void read_met_bin_3d(FILE *in, const ctl_t *ctl, const met_t *met, float var[EX][EY][EP], const char *varname, const float bound_min, const float bound_max)
Reads 3D meteorological data from a binary file, potentially using different compression methods.
Definition: mptrac.c:6176
int locate_irr_float(const float *xx, const int n, const double x, const int ig)
Locate the index of the interval containing a given value in an irregularly spaced array.
Definition: mptrac.c:2144
double time_from_filename(const char *filename, const int offset)
Extracts and converts a timestamp from a filename to Julian seconds.
Definition: mptrac.c:8743
void write_prof(const char *filename, const ctl_t *ctl, met_t *met0, met_t *met1, const atm_t *atm, const double t)
Writes profile data to a specified file.
Definition: mptrac.c:10600
void module_diffusion_pbl(const ctl_t *ctl, cache_t *cache, met_t *met0, met_t *met1, atm_t *atm)
Computes particle diffusion within the planetary boundary layer (PBL).
Definition: mptrac.c:2869
double tropo_weight(const clim_t *clim, const atm_t *atm, const int ip)
Computes a weighting factor based on tropopause pressure.
Definition: mptrac.c:8778
void write_met_nc(const char *filename, const ctl_t *ctl, met_t *met)
Writes meteorological data to a NetCDF file.
Definition: mptrac.c:10283
void module_rng_init(const int ntask)
Initialize random number generators for parallel tasks.
Definition: mptrac.c:3787
void intpol_met_4d_coord(const met_t *met0, float height0[EX][EY][EP], float array0[EX][EY][EP], const met_t *met1, float height1[EX][EY][EP], float array1[EX][EY][EP], const double ts, const double height, const double lon, const double lat, double *var, int *ci, double *cw, const int init)
Interpolates meteorological variables to a given position and time.
Definition: mptrac.c:1281
double clim_oh(const ctl_t *ctl, const clim_t *clim, const double t, const double lon, const double lat, const double p)
Calculates the hydroxyl radical (OH) concentration from climatology data, with an optional diurnal co...
Definition: mptrac.c:89
#define CTS
Maximum number of data points of climatological time series.
Definition: mptrac.h:316
void read_met_ozone(met_t *met)
Calculates the total column ozone from meteorological ozone data.
Definition: mptrac.c:7821
void broadcast_large_data(void *data, size_t N)
Broadcasts large data across all processes in an MPI communicator.
void clim_tropo_init(clim_t *clim)
Initializes the tropopause data in the climatology structure.
Definition: mptrac.c:228
void module_rng(const ctl_t *ctl, double *rs, const size_t n, const int method)
Generate random numbers using various methods and distributions.
Definition: mptrac.c:3818
void get_met_help(const ctl_t *ctl, const double t, const int direct, const char *metbase, const double dt_met, char *filename)
Generates a formatted filename for meteorological data files based on the input parameters.
Definition: mptrac.c:1149
void write_station(const char *filename, const ctl_t *ctl, atm_t *atm, const double t)
Writes station data to a specified file.
Definition: mptrac.c:10989
void cart2geo(const double *x, double *z, double *lon, double *lat)
Converts Cartesian coordinates to geographic coordinates.
Definition: mptrac.c:74
void write_output(const char *dirname, const ctl_t *ctl, met_t *met0, met_t *met1, atm_t *atm, const double t)
Writes various types of output data to files in a specified directory.
Definition: mptrac.c:10505
#define NP
Maximum number of atmospheric data points.
Definition: mptrac.h:246
double sza_calc(const double sec, const double lon, const double lat)
Calculates the solar zenith angle.
Definition: mptrac.c:8603
void module_mixing_help(const ctl_t *ctl, const clim_t *clim, atm_t *atm, const int *ixs, const int *iys, const int *izs, const int qnt_idx)
Perform interparcel mixing for a specific quantity.
Definition: mptrac.c:3555
void doy2day(const int year, const int doy, int *mon, int *day)
Converts a given day of the year (DOY) to a date (month and day).
Definition: mptrac.c:916
void read_ctl(const char *filename, int argc, char *argv[], ctl_t *ctl)
Reads control parameters from a configuration file and populates the given structure.
Definition: mptrac.c:5083
void intpol_met_time_2d(const met_t *met0, float array0[EX][EY], const met_t *met1, float array1[EX][EY], const double ts, const double lon, const double lat, double *var, int *ci, double *cw, const int init)
Interpolates meteorological data in 2D space and time.
Definition: mptrac.c:1704
void module_position(const cache_t *cache, met_t *met0, met_t *met1, atm_t *atm)
Update the positions and pressure levels of atmospheric particles.
Definition: mptrac.c:3733
void clim_oh_diurnal_correction(const ctl_t *ctl, clim_t *clim)
Applies a diurnal correction to the hydroxyl radical (OH) concentration in climatology data.
Definition: mptrac.c:116
void write_met_bin_2d(FILE *out, met_t *met, float var[EX][EY], const char *varname)
Writes a 2-dimensional meteorological variable to a binary file.
Definition: mptrac.c:10178
void read_met_pv(met_t *met)
Calculates potential vorticity (PV) from meteorological data.
Definition: mptrac.c:7715
int read_atm_bin(const char *filename, const ctl_t *ctl, atm_t *atm)
Reads air parcel data from a binary file and populates the given atmospheric structure.
Definition: mptrac.c:4606
void get_met_replace(char *orig, char *search, char *repl)
Replaces occurrences of a substring in a string with another substring.
Definition: mptrac.c:1214
#define CY
Maximum number of latitudes for climatological data.
Definition: mptrac.h:291
void module_sort(const ctl_t *ctl, met_t *met0, atm_t *atm)
Sort particles according to box index.
Definition: mptrac.c:3951
double clim_ts(const clim_ts_t *ts, const double t)
Interpolates a time series of climatological variables.
Definition: mptrac.c:383
void thrustSortWrapper(double *__restrict__ c, int n, int *__restrict__ index)
Wrapper to Thrust sorting function.
void jsec2time(const double jsec, int *year, int *mon, int *day, int *hour, int *min, int *sec, double *remain)
Converts Julian seconds to calendar date and time components.
Definition: mptrac.c:1831
int read_met_bin(const char *filename, const ctl_t *ctl, met_t *met)
Reads meteorological data from a binary file.
Definition: mptrac.c:5999
void mptrac_run_timestep(ctl_t *ctl, cache_t *cache, clim_t *clim, met_t **met0, met_t **met1, atm_t *atm, double t)
Executes a single timestep of the MPTRAC model simulation.
Definition: mptrac.c:4320
void write_atm_clams(const char *filename, const ctl_t *ctl, const atm_t *atm)
Writes air parcel data to a NetCDF file in the CLaMS format.
Definition: mptrac.c:8993
int read_atm_clams(const char *filename, const ctl_t *ctl, atm_t *atm)
Reads air parcel data from a CLaMS netCDF file and populates the given atmospheric structure.
Definition: mptrac.c:4662
int read_atm(const char *filename, const ctl_t *ctl, atm_t *atm)
Reads air parcel data from a specified file into the given atmospheric structure.
Definition: mptrac.c:4493
void write_vtk(const char *filename, const ctl_t *ctl, const atm_t *atm, const double t)
Writes VTK (Visualization Toolkit) data to a specified file.
Definition: mptrac.c:11075
#define EP
Maximum number of pressure levels for meteo data.
Definition: mptrac.h:261
void module_tracer_chem(const ctl_t *ctl, const cache_t *cache, const clim_t *clim, met_t *met0, met_t *met1, atm_t *atm)
Simulate chemical reactions involving long-lived atmospheric tracers.
Definition: mptrac.c:4115
void read_met_polar_winds(met_t *met)
Applies a fix for polar winds in meteorological data.
Definition: mptrac.c:7656
void module_h2o2_chem(const ctl_t *ctl, const cache_t *cache, const clim_t *clim, met_t *met0, met_t *met1, atm_t *atm)
Perform chemical reactions involving H2O2 within cloud particles.
Definition: mptrac.c:3109
void compress_zstd(const char *varname, float *array, const size_t n, const int decompress, FILE *inout)
Compresses or decompresses an array of floats using the Zstandard (ZSTD) library.
void write_grid_nc(const char *filename, const ctl_t *ctl, const double *cd, double *mean[NQ], double *sigma[NQ], const double *vmr_impl, const double t, const double *z, const double *lon, const double *lat, const double *area, const double dz, const int *np)
Writes grid data to a NetCDF file.
Definition: mptrac.c:9907
double pbl_weight(const ctl_t *ctl, const atm_t *atm, const int ip, const double pbl, const double ps)
Computes a weighting factor based on planetary boundary layer pressure.
Definition: mptrac.c:4471
void write_met_nc_3d(const int ncid, const char *varname, met_t *met, float var[EX][EY][EP], const float scl)
Writes a 3D meteorological variable to a NetCDF file.
Definition: mptrac.c:10475
void read_clim(const ctl_t *ctl, clim_t *clim)
Reads various climatological data and populates the given climatology structure.
Definition: mptrac.c:4751
void module_isosurf(const ctl_t *ctl, const cache_t *cache, met_t *met0, met_t *met1, atm_t *atm)
Apply the isosurface module to adjust atmospheric properties.
Definition: mptrac.c:3256
void module_kpp_chem(ctl_t *ctl, cache_t *cache, clim_t *clim, met_t *met0, met_t *met1, atm_t *atm)
KPP chemistry module.
#define CO3
Maximum number of total column ozone data for climatological data.
Definition: mptrac.h:296
void module_oh_chem(const ctl_t *ctl, const cache_t *cache, const clim_t *clim, met_t *met0, met_t *met1, atm_t *atm)
Perform hydroxyl chemistry calculations for atmospheric particles.
Definition: mptrac.c:3649
void geo2cart(const double z, const double lon, const double lat, double *x)
Converts geographic coordinates (longitude, latitude, altitude) to Cartesian coordinates.
Definition: mptrac.c:985
double kernel_weight(const double kz[EP], const double kw[EP], const int nk, const double p)
Calculates the kernel weight based on altitude and given kernel data.
Definition: mptrac.c:1864
void intpol_met_space_3d_ml(const met_t *met, float array[EX][EY][EP], const double p, const double lon, const double lat, double *var)
Interpolates a meteorological variable in 3D space (longitude, latitude, pressure).
Definition: mptrac.c:1519
int read_atm_asc(const char *filename, const ctl_t *ctl, atm_t *atm)
Reads air parcel data from an ASCII file and populates the given atmospheric structure.
Definition: mptrac.c:4564
void write_sample(const char *filename, const ctl_t *ctl, met_t *met0, met_t *met1, const atm_t *atm, const double t)
Writes sample data to a specified file.
Definition: mptrac.c:10827
void write_grid(const char *filename, const ctl_t *ctl, met_t *met0, met_t *met1, const atm_t *atm, const double t)
Writes grid data to a file in ASCII or netCDF format.
Definition: mptrac.c:9612
void write_met_bin(const char *filename, const ctl_t *ctl, met_t *met)
Writes meteorological data in binary format to a specified file.
Definition: mptrac.c:10077
void write_atm_bin(const char *filename, const ctl_t *ctl, const atm_t *atm)
Writes air parcel data to a binary file.
Definition: mptrac.c:8943
void read_met_cape(const ctl_t *ctl, const clim_t *clim, met_t *met)
Calculates Convective Available Potential Energy (CAPE) for each grid point.
Definition: mptrac.c:6262
#define CSZA
Maximum number of solar zenith angles for climatological data.
Definition: mptrac.h:306
double lapse_rate(const double t, const double h2o)
Calculates the moist adiabatic lapse rate in Kelvin per kilometer.
Definition: mptrac.c:1890
void write_csi(const char *filename, const ctl_t *ctl, const atm_t *atm, const double t)
Writes Critical Success Index (CSI) data to a file.
Definition: mptrac.c:9253
void write_atm_nc(const char *filename, const ctl_t *ctl, const atm_t *atm)
Writes air parcel data to a NetCDF file.
Definition: mptrac.c:9204
Air parcel data.
Definition: mptrac.h:3147
int np
Number of air parcels.
Definition: mptrac.h:3150
Cache data structure.
Definition: mptrac.h:3175
int iso_n
Isosurface balloon number of data points.
Definition: mptrac.h:3187
Climatological data in the form of photolysis rates.
Definition: mptrac.h:3207
int nsza
Number of solar zenith angles.
Definition: mptrac.h:3213
int np
Number of pressure levels.
Definition: mptrac.h:3210
int no3c
Number of total ozone columns.
Definition: mptrac.h:3216
Climatological data.
Definition: mptrac.h:3315
clim_ts_t ccl2f2
CFC-12 time series.
Definition: mptrac.h:3357
clim_photo_t photo
Photolysis rates.
Definition: mptrac.h:3333
clim_zm_t ho2
HO2 zonal means.
Definition: mptrac.h:3345
clim_zm_t hno3
HNO3 zonal means.
Definition: mptrac.h:3336
int tropo_ntime
Number of tropopause timesteps.
Definition: mptrac.h:3318
clim_ts_t sf6
SF6 time series.
Definition: mptrac.h:3363
clim_ts_t ccl4
CFC-10 time series.
Definition: mptrac.h:3351
clim_ts_t ccl3f
CFC-11 time series.
Definition: mptrac.h:3354
clim_zm_t o1d
O(1D) zonal means.
Definition: mptrac.h:3348
clim_zm_t h2o2
H2O2 zonal means.
Definition: mptrac.h:3342
int tropo_nlat
Number of tropopause latitudes.
Definition: mptrac.h:3321
clim_zm_t oh
OH zonal means.
Definition: mptrac.h:3339
clim_ts_t n2o
N2O time series.
Definition: mptrac.h:3360
Climatological data in the form of time series.
Definition: mptrac.h:3263
int ntime
Number of timesteps.
Definition: mptrac.h:3266
Climatological data in the form of zonal means.
Definition: mptrac.h:3283
int np
Number of pressure levels.
Definition: mptrac.h:3292
int ntime
Number of timesteps.
Definition: mptrac.h:3286
int nlat
Number of latitudes.
Definition: mptrac.h:3289
Control parameters.
Definition: mptrac.h:2170
double grid_z0
Lower altitude of gridded data [km].
Definition: mptrac.h:3027
int qnt_o3
Quantity array index for ozone volume mixing ratio.
Definition: mptrac.h:2282
double csi_lat1
Upper latitude of gridded CSI data [deg].
Definition: mptrac.h:2991
int qnt_Coh
Quantity array index for OH volume mixing ratio (chemistry code).
Definition: mptrac.h:2429
double wet_depo_ic_a
Coefficient A for wet deposition in cloud (exponential form).
Definition: mptrac.h:2879
int met_nc_scale
Check netCDF scaling factors (0=no, 1=yes).
Definition: mptrac.h:2500
int qnt_pel
Quantity array index for pressure at equilibrium level (EL).
Definition: mptrac.h:2315
int csi_nz
Number of altitudes of gridded CSI data.
Definition: mptrac.h:2967
double molmass
Molar mass [g/mol].
Definition: mptrac.h:2741
int qnt_p
Quantity array index for pressure.
Definition: mptrac.h:2261
int qnt_Cccl2f2
Quantity array index for CFC-12 volume mixing ratio (chemistry code).
Definition: mptrac.h:2453
int mixing_nx
Number of longitudes of mixing grid.
Definition: mptrac.h:2804
double chemgrid_z1
Upper altitude of chemistry grid [km].
Definition: mptrac.h:2828
int qnt_m
Quantity array index for mass.
Definition: mptrac.h:2201
int qnt_aoa
Quantity array index for age of air.
Definition: mptrac.h:2462
int qnt_rhop
Quantity array index for particle density.
Definition: mptrac.h:2210
int qnt_swc
Quantity array index for cloud snow water content.
Definition: mptrac.h:2294
double csi_obsmin
Minimum observation index to trigger detection.
Definition: mptrac.h:2961
int qnt_pcb
Quantity array index for cloud bottom pressure.
Definition: mptrac.h:2303
double bound_dzs
Boundary conditions surface layer depth [km].
Definition: mptrac.h:2729
double csi_lon1
Upper longitude of gridded CSI data [deg].
Definition: mptrac.h:2982
int qnt_u
Quantity array index for zonal wind.
Definition: mptrac.h:2270
double stat_lon
Longitude of station [deg].
Definition: mptrac.h:3105
double mixing_trop
Interparcel exchange parameter for mixing in the troposphere.
Definition: mptrac.h:2789
double sort_dt
Time step for sorting of particle data [s].
Definition: mptrac.h:2641
double mixing_z1
Upper altitude of mixing grid [km].
Definition: mptrac.h:2801
double stat_r
Search radius around station [km].
Definition: mptrac.h:3111
double wet_depo_bc_a
Coefficient A for wet deposition below cloud (exponential form).
Definition: mptrac.h:2873
int csi_ny
Number of latitudes of gridded CSI data.
Definition: mptrac.h:2985
int vtk_sphere
Spherical projection for VTK data (0=no, 1=yes).
Definition: mptrac.h:3135
double chemgrid_z0
Lower altitude of chemistry grid [km].
Definition: mptrac.h:2825
double met_pbl_min
Minimum depth of planetary boundary layer [km].
Definition: mptrac.h:2609
int qnt_iwc
Quantity array index for cloud ice water content.
Definition: mptrac.h:2291
double chemgrid_lat0
Lower latitude of chemistry grid [deg].
Definition: mptrac.h:2843
double conv_cape
CAPE threshold for convection module [J/kg].
Definition: mptrac.h:2693
int qnt_Co1d
Quantity array index for O(1D) volume mixing ratio (chemistry code).
Definition: mptrac.h:2441
double met_cms_eps_pv
cmultiscale compression epsilon for potential vorticity.
Definition: mptrac.h:2540
int qnt_pw
Quantity array index for partial water vapor pressure.
Definition: mptrac.h:2369
double grid_z1
Upper altitude of gridded data [km].
Definition: mptrac.h:3030
int direction
Direction flag (1=forward calculation, -1=backward calculation).
Definition: mptrac.h:2465
int qnt_Cccl4
Quantity array index for CFC-10 volume mixing ratio (chemistry code).
Definition: mptrac.h:2447
int met_dp
Stride for pressure levels.
Definition: mptrac.h:2570
double met_dt_out
Time step for sampling of meteo data along trajectories [s].
Definition: mptrac.h:2628
int qnt_h2o2
Quantity array index for H2O2 volume mixing ratio (climatology).
Definition: mptrac.h:2333
int qnt_vh
Quantity array index for horizontal wind.
Definition: mptrac.h:2396
int csi_nx
Number of longitudes of gridded CSI data.
Definition: mptrac.h:2976
double csi_lat0
Lower latitude of gridded CSI data [deg].
Definition: mptrac.h:2988
double turb_dz_trop
Vertical turbulent diffusion coefficient (troposphere) [m^2/s].
Definition: mptrac.h:2675
int met_pbl
Planetary boundary layer data (0=file, 1=z2p, 2=Richardson, 3=theta).
Definition: mptrac.h:2606
int qnt_lwc
Quantity array index for cloud liquid water content.
Definition: mptrac.h:2285
double turb_mesoz
Vertical scaling factor for mesoscale wind fluctuations.
Definition: mptrac.h:2684
int grid_nc_level
zlib compression level of netCDF grid data files (0=off).
Definition: mptrac.h:3015
int grid_nx
Number of longitudes of gridded data.
Definition: mptrac.h:3033
int atm_type
Type of atmospheric data files (0=ASCII, 1=binary, 2=netCDF, 3=CLaMS_traj, 4=CLaMS_pos).
Definition: mptrac.h:2932
double bound_mass
Boundary conditions mass per particle [kg].
Definition: mptrac.h:2702
double grid_lat0
Lower latitude of gridded data [deg].
Definition: mptrac.h:3045
int qnt_ts
Quantity array index for surface temperature.
Definition: mptrac.h:2216
int qnt_loss_rate
Quantity array index for total loss rate.
Definition: mptrac.h:2360
double met_cms_eps_h2o
cmultiscale compression epsilon for water vapor.
Definition: mptrac.h:2543
int qnt_plfc
Quantity array index for pressure at level of free convection (LCF).
Definition: mptrac.h:2312
double grid_lon0
Lower longitude of gridded data [deg].
Definition: mptrac.h:3036
int qnt_o1d
Quantity array index for O(1D) volume mixing ratio (climatology).
Definition: mptrac.h:2339
int met_tropo_spline
Tropopause interpolation method (0=linear, 1=spline).
Definition: mptrac.h:2625
int qnt_tvirt
Quantity array index for virtual temperature.
Definition: mptrac.h:2390
double dt_met
Time step of meteo data [s].
Definition: mptrac.h:2484
double chemgrid_lat1
Upper latitude of chemistry grid [deg].
Definition: mptrac.h:2846
int met_geopot_sy
Latitudinal smoothing of geopotential heights.
Definition: mptrac.h:2597
double met_cms_eps_u
cmultiscale compression epsilon for zonal wind.
Definition: mptrac.h:2531
double turb_dx_strat
Horizontal turbulent diffusion coefficient (stratosphere) [m^2/s].
Definition: mptrac.h:2669
int qnt_vmr
Quantity array index for volume mixing ratio.
Definition: mptrac.h:2204
int qnt_lsm
Quantity array index for land-sea mask.
Definition: mptrac.h:2237
int qnt_theta
Quantity array index for potential temperature.
Definition: mptrac.h:2381
double bound_lat1
Boundary conditions maximum longitude [deg].
Definition: mptrac.h:2717
double stat_t1
Stop time for station output [s].
Definition: mptrac.h:3117
double turb_dx_trop
Horizontal turbulent diffusion coefficient (troposphere) [m^2/s].
Definition: mptrac.h:2666
int grid_type
Type of grid data files (0=ASCII, 1=netCDF).
Definition: mptrac.h:3051
double csi_lon0
Lower longitude of gridded CSI data [deg].
Definition: mptrac.h:2979
int qnt_pbl
Quantity array index for boundary layer pressure.
Definition: mptrac.h:2243
int grid_stddev
Include standard deviations in grid output (0=no, 1=yes).
Definition: mptrac.h:3021
int qnt_psice
Quantity array index for saturation pressure over ice.
Definition: mptrac.h:2366
double chemgrid_lon0
Lower longitude of chemistry grid [deg].
Definition: mptrac.h:2834
int bound_pbl
Boundary conditions planetary boundary layer (0=no, 1=yes).
Definition: mptrac.h:2735
int qnt_mloss_wet
Quantity array index for total mass loss due to wet deposition.
Definition: mptrac.h:2351
int met_geopot_sx
Longitudinal smoothing of geopotential heights.
Definition: mptrac.h:2594
int met_sy
Smoothing for latitudes.
Definition: mptrac.h:2576
int qnt_ps
Quantity array index for surface pressure.
Definition: mptrac.h:2213
int rng_type
Random number generator (0=GSL, 1=Squares, 2=cuRAND).
Definition: mptrac.h:2657
int isosurf
Isosurface parameter (0=none, 1=pressure, 2=density, 3=theta, 4=balloon).
Definition: mptrac.h:2645
double bound_p1
Boundary conditions top pressure [hPa].
Definition: mptrac.h:2723
int qnt_zs
Quantity array index for surface geopotential height.
Definition: mptrac.h:2219
int prof_nz
Number of altitudes of gridded profile data.
Definition: mptrac.h:3060
double csi_dt_out
Time step for CSI output [s].
Definition: mptrac.h:2955
int met_cape
Convective available potential energy data (0=file, 1=calculate).
Definition: mptrac.h:2603
double csi_modmin
Minimum column density to trigger detection [kg/m^2].
Definition: mptrac.h:2964
int met_sx
Smoothing for longitudes.
Definition: mptrac.h:2573
double chemgrid_lon1
Upper longitude of chemistry grid [deg].
Definition: mptrac.h:2837
double turb_mesox
Horizontal scaling factor for mesoscale wind fluctuations.
Definition: mptrac.h:2681
double met_cms_eps_iwc
cmultiscale compression epsilon for cloud ice water content.
Definition: mptrac.h:2555
double met_cms_eps_swc
cmultiscale compression epsilon for cloud snow water content.
Definition: mptrac.h:2558
int met_zfp_prec
ZFP compression precision for all variables, except z and T.
Definition: mptrac.h:2509
double met_cms_eps_v
cmultiscale compression epsilon for meridional wind.
Definition: mptrac.h:2534
double prof_z0
Lower altitude of gridded profile data [km].
Definition: mptrac.h:3063
int qnt_w
Quantity array index for vertical velocity.
Definition: mptrac.h:2276
double bound_vmr
Boundary conditions volume mixing ratio [ppv].
Definition: mptrac.h:2708
double met_tropo_pv
Dynamical tropopause potential vorticity threshold [PVU].
Definition: mptrac.h:2619
int prof_nx
Number of longitudes of gridded profile data.
Definition: mptrac.h:3069
int qnt_stat
Quantity array index for station flag.
Definition: mptrac.h:2198
int met_tropo
Tropopause definition (0=none, 1=clim, 2=cold point, 3=WMO_1st, 4=WMO_2nd, 5=dynamical).
Definition: mptrac.h:2616
int qnt_rp
Quantity array index for particle radius.
Definition: mptrac.h:2207
int met_mpi_share
Use MPI to share meteo (0=no, 1=yes).
Definition: mptrac.h:2634
double mixing_strat
Interparcel exchange parameter for mixing in the stratosphere.
Definition: mptrac.h:2792
int qnt_vz
Quantity array index for vertical velocity.
Definition: mptrac.h:2399
int qnt_ho2
Quantity array index for HO2 volume mixing ratio (climatology).
Definition: mptrac.h:2336
double csi_z1
Upper altitude of gridded CSI data [km].
Definition: mptrac.h:2973
double stat_t0
Start time for station output [s].
Definition: mptrac.h:3114
double oh_chem_beta
Beta parameter for diurnal variablity of OH.
Definition: mptrac.h:2855
double wet_depo_so2_ph
pH value used to calculate effective Henry constant of SO2.
Definition: mptrac.h:2891
double mixing_z0
Lower altitude of mixing grid [km].
Definition: mptrac.h:2798
int qnt_mloss_decay
Quantity array index for total mass loss due to exponential decay.
Definition: mptrac.h:2357
int atm_type_out
Type of atmospheric data files for output (-1=same as ATM_TYPE, 0=ASCII, 1=binary,...
Definition: mptrac.h:2937
double dt_kpp
Time step for KPP chemistry [s].
Definition: mptrac.h:2864
double dry_depo_dp
Dry deposition surface layer [hPa].
Definition: mptrac.h:2900
int qnt_shf
Quantity array index for surface sensible heat flux.
Definition: mptrac.h:2234
int qnt_vs
Quantity array index for surface meridional wind.
Definition: mptrac.h:2225
int qnt_Cco
Quantity array index for CO volume mixing ratio (chemistry code).
Definition: mptrac.h:2426
double vtk_dt_out
Time step for VTK data output [s].
Definition: mptrac.h:3123
double t_stop
Stop time of simulation [s].
Definition: mptrac.h:2471
double conv_dt
Time interval for convection module [s].
Definition: mptrac.h:2699
int qnt_hno3
Quantity array index for HNO3 volume mixing ratio (climatology).
Definition: mptrac.h:2327
int met_clams
Read MPTRAC or CLaMS meteo data (0=MPTRAC, 1=CLaMS).
Definition: mptrac.h:2497
int qnt_h2ot
Quantity array index for tropopause water vapor volume mixing ratio.
Definition: mptrac.h:2255
int qnt_rh
Quantity array index for relative humidity over water.
Definition: mptrac.h:2375
double met_cms_eps_cc
cmultiscale compression epsilon for cloud cover.
Definition: mptrac.h:2561
double bound_lat0
Boundary conditions minimum longitude [deg].
Definition: mptrac.h:2714
double met_pbl_max
Maximum depth of planetary boundary layer [km].
Definition: mptrac.h:2612
int met_dx
Stride for longitudes.
Definition: mptrac.h:2564
int mixing_ny
Number of latitudes of mixing grid.
Definition: mptrac.h:2813
int met_convention
Meteo data layout (0=[lev, lat, lon], 1=[lon, lat, lev]).
Definition: mptrac.h:2487
int qnt_zeta_d
Quantity array index for diagnosed zeta vertical coordinate.
Definition: mptrac.h:2387
int tracer_chem
Switch for first order tracer chemistry module (0=off, 1=on).
Definition: mptrac.h:2867
double dt_mod
Time step of simulation [s].
Definition: mptrac.h:2474
int diffusion
Diffusion scheme (0=off, 1=fixed-K, 2=PBL).
Definition: mptrac.h:2660
int qnt_tnat
Quantity array index for T_NAT.
Definition: mptrac.h:2414
int qnt_tice
Quantity array index for T_ice.
Definition: mptrac.h:2408
int qnt_zg
Quantity array index for geopotential height.
Definition: mptrac.h:2258
double vtk_offset
Vertical offset for VTK data [km].
Definition: mptrac.h:3132
int qnt_v
Quantity array index for meridional wind.
Definition: mptrac.h:2273
int qnt_mloss_dry
Quantity array index for total mass loss due to dry deposition.
Definition: mptrac.h:2354
double bound_vmr_trend
Boundary conditions volume mixing ratio trend [ppv/s].
Definition: mptrac.h:2711
int met_cache
Preload meteo data into disk cache (0=no, 1=yes).
Definition: mptrac.h:2631
int qnt_oh
Quantity array index for OH volume mixing ratio (climatology).
Definition: mptrac.h:2330
int qnt_Ch
Quantity array index for H volume mixing ratio (chemistry code).
Definition: mptrac.h:2432
int met_press_level_def
Use predefined pressure levels or not.
Definition: mptrac.h:2591
int oh_chem_reaction
Reaction type for OH chemistry (0=none, 2=bimolecular, 3=termolecular).
Definition: mptrac.h:2849
int qnt_h2o
Quantity array index for water vapor volume mixing ratio.
Definition: mptrac.h:2279
int prof_ny
Number of latitudes of gridded profile data.
Definition: mptrac.h:3078
int qnt_rhice
Quantity array index for relative humidity over ice.
Definition: mptrac.h:2378
int qnt_rho
Quantity array index for density of air.
Definition: mptrac.h:2267
double sample_dz
Layer depth for sample output [km].
Definition: mptrac.h:3099
double tdec_strat
Life time of particles in the stratosphere [s].
Definition: mptrac.h:2747
int obs_type
Type of observation data files (0=ASCII, 1=netCDF).
Definition: mptrac.h:2946
double met_cms_eps_lwc
cmultiscale compression epsilon for cloud liquid water content.
Definition: mptrac.h:2549
int qnt_us
Quantity array index for surface zonal wind.
Definition: mptrac.h:2222
double met_cms_eps_z
cmultiscale compression epsilon for geopotential height.
Definition: mptrac.h:2525
double grid_lon1
Upper longitude of gridded data [deg].
Definition: mptrac.h:3039
int qnt_Cn2o
Quantity array index for N2O volume mixing ratio (chemistry code).
Definition: mptrac.h:2456
int qnt_Cccl3f
Quantity array index for CFC-11 volume mixing ratio (chemistry code).
Definition: mptrac.h:2450
double mixing_lat0
Lower latitude of mixing grid [deg].
Definition: mptrac.h:2816
int qnt_pt
Quantity array index for tropopause pressure.
Definition: mptrac.h:2246
int qnt_cl
Quantity array index for total column cloud water.
Definition: mptrac.h:2306
int advect
Advection scheme (0=off, 1=Euler, 2=midpoint, 4=Runge-Kutta).
Definition: mptrac.h:2651
double prof_z1
Upper altitude of gridded profile data [km].
Definition: mptrac.h:3066
int qnt_t
Quantity array index for temperature.
Definition: mptrac.h:2264
int atm_filter
Time filter for atmospheric data output (0=none, 1=missval, 2=remove).
Definition: mptrac.h:2925
int kpp_chem
Switch for KPP chemistry module (0=off, 1=on).
Definition: mptrac.h:2861
int qnt_zeta
Quantity array index for zeta vertical coordinate.
Definition: mptrac.h:2384
double conv_pbl_trans
Depth of PBL transition layer (fraction of PBL depth).
Definition: mptrac.h:2690
int met_vert_coord
Vertical coordinate of input meteo data (0=pressure-level, 1=model-level).
Definition: mptrac.h:2490
double csi_z0
Lower altitude of gridded CSI data [km].
Definition: mptrac.h:2970
int qnt_lapse
Quantity array index for lapse rate.
Definition: mptrac.h:2393
double stat_lat
Latitude of station [deg].
Definition: mptrac.h:3108
int qnt_Cho2
Quantity array index for HO2 volume mixing ratio (chemistry code).
Definition: mptrac.h:2435
int grid_ny
Number of latitudes of gridded data.
Definition: mptrac.h:3042
int qnt_Csf6
Quantity array index for SF6 volume mixing ratio (chemistry code).
Definition: mptrac.h:2459
int qnt_Ch2o
Quantity array index for H2O volume mixing ratio (chemistry code).
Definition: mptrac.h:2420
double met_detrend
FWHM of horizontal Gaussian used for detrending [km].
Definition: mptrac.h:2582
int conv_mix_pbl
Vertical mixing in the PBL (0=off, 1=on).
Definition: mptrac.h:2687
double bound_dps
Boundary conditions surface layer depth [hPa].
Definition: mptrac.h:2726
double met_cms_eps_t
cmultiscale compression epsilon for temperature.
Definition: mptrac.h:2528
int chemgrid_nz
Number of altitudes of chemistry grid.
Definition: mptrac.h:2822
int qnt_cape
Quantity array index for convective available potential energy (CAPE).
Definition: mptrac.h:2318
double bound_mass_trend
Boundary conditions mass per particle trend [kg/s].
Definition: mptrac.h:2705
int mixing_nz
Number of altitudes of mixing grid.
Definition: mptrac.h:2795
int qnt_o3c
Quantity array index for total column ozone.
Definition: mptrac.h:2324
double bound_p0
Boundary conditions bottom pressure [hPa].
Definition: mptrac.h:2720
double mixing_lon0
Lower longitude of mixing grid [deg].
Definition: mptrac.h:2807
int qnt_Co3
Quantity array index for O3 volume mixing ratio (chemistry code).
Definition: mptrac.h:2423
int qnt_tsts
Quantity array index for T_STS.
Definition: mptrac.h:2411
int grid_nz
Number of altitudes of gridded data.
Definition: mptrac.h:3024
int qnt_nss
Quantity array index for northward turbulent surface stress.
Definition: mptrac.h:2231
double ens_dt_out
Time step for ensemble output [s].
Definition: mptrac.h:2997
int atm_stride
Particle index stride for atmospheric data files.
Definition: mptrac.h:2928
int met_relhum
Try to read relative humidity (0=no, 1=yes).
Definition: mptrac.h:2600
double mixing_lat1
Upper latitude of mixing grid [deg].
Definition: mptrac.h:2819
double atm_dt_out
Time step for atmospheric data output [s].
Definition: mptrac.h:2922
double prof_lat1
Upper latitude of gridded profile data [deg].
Definition: mptrac.h:3084
int met_cms_batch
cmultiscale batch size.
Definition: mptrac.h:2518
double psc_h2o
H2O volume mixing ratio for PSC analysis.
Definition: mptrac.h:2906
int met_sp
Smoothing for pressure levels.
Definition: mptrac.h:2579
double prof_lon0
Lower longitude of gridded profile data [deg].
Definition: mptrac.h:3072
int chemgrid_nx
Number of longitudes of chemistry grid.
Definition: mptrac.h:2831
int qnt_pct
Quantity array index for cloud top pressure.
Definition: mptrac.h:2300
int qnt_mloss_kpp
Quantity array index for total mass loss due to KPP chemistry.
Definition: mptrac.h:2348
int qnt_psat
Quantity array index for saturation pressure over water.
Definition: mptrac.h:2363
double prof_lat0
Lower latitude of gridded profile data [deg].
Definition: mptrac.h:3081
int qnt_cin
Quantity array index for convective inhibition (CIN).
Definition: mptrac.h:2321
double psc_hno3
HNO3 volume mixing ratio for PSC analysis.
Definition: mptrac.h:2909
double prof_lon1
Upper longitude of gridded profile data [deg].
Definition: mptrac.h:3075
double met_cms_eps_rwc
cmultiscale compression epsilon for cloud rain water content.
Definition: mptrac.h:2552
int met_nc_quant
Number of digits for quantization of netCDF meteo files (0=off).
Definition: mptrac.h:2506
int h2o2_chem_reaction
Reaction type for H2O2 chemistry (0=none, 1=SO2).
Definition: mptrac.h:2858
int qnt_Co3p
Quantity array index for O(3P) volume mixing ratio (chemistry code).
Definition: mptrac.h:2444
double wet_depo_bc_ret_ratio
Coefficients for wet deposition below cloud: retention ratio.
Definition: mptrac.h:2897
int chemgrid_ny
Number of latitudes of chemistry grid.
Definition: mptrac.h:2840
double met_cms_eps_o3
cmultiscale compression epsilon for ozone.
Definition: mptrac.h:2546
int grid_sparse
Sparse output in grid data files (0=no, 1=yes).
Definition: mptrac.h:3012
double dry_depo_vdep
Dry deposition velocity [m/s].
Definition: mptrac.h:2903
int qnt_tt
Quantity array index for tropopause temperature.
Definition: mptrac.h:2249
int met_np
Number of target pressure levels.
Definition: mptrac.h:2585
int qnt_ens
Quantity array index for ensemble IDs.
Definition: mptrac.h:2195
int met_nc_level
zlib compression level of netCDF meteo files (0=off).
Definition: mptrac.h:2503
double met_zfp_tol_t
ZFP compression tolerance for temperature.
Definition: mptrac.h:2512
double mixing_dt
Time interval for mixing [s].
Definition: mptrac.h:2786
int qnt_mloss_h2o2
Quantity array index for total mass loss due to H2O2 chemistry.
Definition: mptrac.h:2345
double met_zfp_tol_z
ZFP compression tolerance for geopotential height.
Definition: mptrac.h:2515
double vtk_scale
Vertical scaling factor for VTK data.
Definition: mptrac.h:3129
double met_cms_eps_w
cmultiscale compression epsilon for vertical velocity.
Definition: mptrac.h:2537
double turb_dx_pbl
Horizontal turbulent diffusion coefficient (PBL) [m^2/s].
Definition: mptrac.h:2663
double conv_cin
CIN threshold for convection module [J/kg].
Definition: mptrac.h:2696
int qnt_pv
Quantity array index for potential vorticity.
Definition: mptrac.h:2402
int advect_vert_coord
Vertical coordinate of air parcels (0=pressure, 1=zeta, 2=eta).
Definition: mptrac.h:2654
int qnt_mloss_oh
Quantity array index for total mass loss due to OH chemistry.
Definition: mptrac.h:2342
int qnt_Ch2o2
Quantity array index for H2O2 volume mixing ratio (chemistry code).
Definition: mptrac.h:2438
int qnt_sst
Quantity array index for sea surface temperature.
Definition: mptrac.h:2240
double mixing_lon1
Upper longitude of mixing grid [deg].
Definition: mptrac.h:2810
int atm_nc_level
zlib compression level of netCDF atmospheric data files (0=off).
Definition: mptrac.h:2940
int met_cms_heur
cmultiscale coarsening heuristics (0=default, 1=mean diff, 2=median diff, 3=max diff).
Definition: mptrac.h:2522
double wet_depo_ic_ret_ratio
Coefficients for wet deposition in cloud: retention ratio.
Definition: mptrac.h:2894
int qnt_sh
Quantity array index for specific humidity.
Definition: mptrac.h:2372
int qnt_ess
Quantity array index for eastward turbulent surface stress.
Definition: mptrac.h:2228
double wet_depo_ic_b
Coefficient B for wet deposition in cloud (exponential form).
Definition: mptrac.h:2882
double wet_depo_bc_b
Coefficient B for wet deposition below cloud (exponential form).
Definition: mptrac.h:2876
int met_dy
Stride for latitudes.
Definition: mptrac.h:2567
int qnt_Cx
Quantity array index for trace species x volume mixing ratio (chemistry code).
Definition: mptrac.h:2417
double turb_dz_strat
Vertical turbulent diffusion coefficient (stratosphere) [m^2/s].
Definition: mptrac.h:2678
double bound_zetas
Boundary conditions surface layer zeta [K].
Definition: mptrac.h:2732
int qnt_idx
Quantity array index for air parcel IDs.
Definition: mptrac.h:2192
double met_tropo_theta
Dynamical tropopause potential temperature threshold [K].
Definition: mptrac.h:2622
int qnt_rwc
Quantity array index for cloud rain water content.
Definition: mptrac.h:2288
double t_start
Start time of simulation [s].
Definition: mptrac.h:2468
int nq
Number of quantities.
Definition: mptrac.h:2177
double tdec_trop
Life time of particles in the troposphere [s].
Definition: mptrac.h:2744
double sample_dx
Horizontal radius for sample output [km].
Definition: mptrac.h:3096
int vtk_stride
Particle index stride for VTK data.
Definition: mptrac.h:3126
double turb_dz_pbl
Vertical turbulent diffusion coefficient (PBL) [m^2/s].
Definition: mptrac.h:2672
double grid_lat1
Upper latitude of gridded data [deg].
Definition: mptrac.h:3048
int qnt_zt
Quantity array index for tropopause geopotential height.
Definition: mptrac.h:2252
int met_type
Type of meteo data files (0=netCDF, 1=binary, 2=pck, 3=zfp, 4=zstd, 5=cms).
Definition: mptrac.h:2494
int qnt_cc
Quantity array index for cloud cover.
Definition: mptrac.h:2297
int qnt_plcl
Quantity array index for pressure at lifted condensation level (LCL).
Definition: mptrac.h:2309
double grid_dt_out
Time step for gridded data output [s].
Definition: mptrac.h:3009
int qnt_tdew
Quantity array index for dew point temperature.
Definition: mptrac.h:2405
Meteo data structure.
Definition: mptrac.h:3374
int nx
Number of longitudes.
Definition: mptrac.h:3380
int ny
Number of latitudes.
Definition: mptrac.h:3383
int np
Number of pressure levels.
Definition: mptrac.h:3386
int npl
Number of model levels.
Definition: mptrac.h:3389
double time
Time [s].
Definition: mptrac.h:3377