45 {
46
48
50
52
54
56
58
59 FILE *dirlist;
60
61 char dirname[
LEN], filename[2 *
LEN];
62
63 int ntask = -1, rank = 0, size = 1;
64
65
67
68
69#ifdef MPI
70 MPI_Init(&argc, &argv);
71 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
72 MPI_Comm_size(MPI_COMM_WORLD, &size);
73#endif
74
75
76 if (argc < 4)
77 ERRMSG(
"Missing or invalid command-line arguments.\n\n"
78 "Usage: trac <dirlist> <ctl> <atm_in> [KEY VALUE ...]\n\n"
79 "Use -h for full help.");
80
81
82 if (!(dirlist = fopen(argv[1], "r")))
83 ERRMSG(
"Cannot open directory list!");
84
85
86 while (fscanf(dirlist, "%4999s", dirname) != EOF) {
87
88
89 if ((++ntask) % size != rank)
90 continue;
91
92
93 LOG(1,
"Parallelization: ntask= %d | rank= %d | size= %d",
94 ntask, rank, size);
95
96
97
98
99
100
101 mptrac_alloc(&ctl, &cache, &clim, &met0, &met1, &atm, &dd);
102
103
104 sprintf(filename, "%s/%s", dirname, argv[2]);
106
107
109
110
111 sprintf(filename, "%s/%s", dirname, argv[3]);
113 ERRMSG(
"Cannot open file!");
114
115
117
118
119
120
121
122
126
127
130
131
133
134
135 if (ctl->
dt_mod > fabs(met0->
lon[1] - met0->
lon[0]) * 111132. / 150.)
136 WARN(
"Violation of CFL criterion! Check DT_MOD!");
137
138#ifdef DD
139
140 if ((t == ctl->
t_start) && (ctl->
dd == 1))
142#endif
143
144
146
147
149 }
150
151
152
153
154
155
156 fflush(NULL);
157
158
159 LOG(1,
"SIZE_NP = %d", atm->
np);
160 LOG(1,
"SIZE_MPI_TASKS = %d", size);
161 LOG(1,
"SIZE_OMP_THREADS = %d", omp_get_max_threads());
162
163
164 LOG(1,
"MEMORY_ATM = %g MByte",
sizeof(
atm_t) / 1024. / 1024.);
165 LOG(1,
"MEMORY_CACHE = %g MByte",
sizeof(
cache_t) / 1024. / 1024.);
166 LOG(1,
"MEMORY_CLIM = %g MByte",
sizeof(
clim_t) / 1024. / 1024.);
167 LOG(1,
"MEMORY_METEO = %g MByte",
sizeof(
met_t) / 1024. / 1024.);
168
169
170 mptrac_free(ctl, cache, clim, met0, met1, atm, dd);
171
172
174 }
175
176
177#ifdef MPI
178 MPI_Finalize();
179#endif
180
181 return EXIT_SUCCESS;
182}
void mptrac_alloc(ctl_t **ctl, cache_t **cache, clim_t **clim, met_t **met0, met_t **met1, atm_t **atm, dd_t **dd)
Allocates and initializes memory resources for MPTRAC.
void mptrac_run_timestep(ctl_t *ctl, cache_t *cache, clim_t *clim, met_t **met0, met_t **met1, atm_t *atm, double t, dd_t *dd)
Executes a single timestep of the MPTRAC model simulation.
void mptrac_init(ctl_t *ctl, cache_t *cache, clim_t *clim, atm_t *atm, const int ntask)
Initializes the MPTRAC model and its associated components.
void mptrac_get_met(ctl_t *ctl, clim_t *clim, const double t, met_t **met0, met_t **met1, dd_t *dd)
Retrieves meteorological data for the specified time.
void mptrac_read_clim(const ctl_t *ctl, clim_t *clim)
Reads various climatological data and populates the given climatology structure.
int mptrac_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.
void mptrac_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.
void mptrac_read_ctl(const char *filename, int argc, char *argv[], ctl_t *ctl)
Reads control parameters from a configuration file and populates the given structure.
void mptrac_free(ctl_t *ctl, cache_t *cache, clim_t *clim, met_t *met0, met_t *met1, atm_t *atm, dd_t *dd)
Frees memory resources allocated for MPTRAC.
void dd_init(const ctl_t *ctl, dd_t *dd, atm_t *atm)
Initialize the domain decomposition infrastructure.
#define LEN
Maximum length of ASCII data lines.
#define ERRMSG(...)
Print an error message with contextual information and terminate the program.
#define USAGE
Print usage information on -h or --help.
#define WARN(...)
Print a warning message with contextual information.
#define PRINT_TIMERS
Print the current state of all timers.
#define LOG(level,...)
Print a log message with a specified logging level.
int np
Number of air parcels.
int direction
Direction flag (1=forward calculation, -1=backward calculation).
int dd
Domain decomposition (0=no, 1=yes, with 2x2 if not specified).
double t_stop
Stop time of simulation [s].
double dt_mod
Time step of simulation [s].
double t_start
Start time of simulation [s].
Domain decomposition data structure.
double lon[EX]
Longitudes [deg].