source: palm/trunk/SOURCE/module_interface.f90 @ 4268

Last change on this file since 4268 was 4268, checked in by schwenkel, 3 years ago

Introducing module interface for boundary conditions and move module specific boundary conditions into their modules

  • Property svn:keywords set to Id
File size: 83.8 KB
Line 
1!> @file module_interface.f90
2!------------------------------------------------------------------------------!
3! This file is part of PALM.
4!
5! PALM is free software: you can redistribute it and/or modify it under the
6! terms of the GNU General Public License as published by the Free Software
7! Foundation, either version 3 of the License, or (at your option) any later
8! version.
9!
10! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
11! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13!
14! You should have received a copy of the GNU General Public License along with
15! PALM. If not, see <http://www.gnu.org/licenses/>.
16!
17! Copyright 1997-2019 Leibniz Universitaet Hannover
18!------------------------------------------------------------------------------!
19!
20! Current revisions:
21! -----------------
22!
23!
24! Former revisions:
25! -----------------
26! $Id: module_interface.f90 4268 2019-10-17 11:29:38Z schwenkel $
27! Introduction of module_interface_boundary_conditions
28!
29! 4182 2019-08-22 15:20:23Z scharf
30! Corrected "Former revisions" section
31!
32! 4173 2019-08-20 12:04:06Z gronemeier
33! add vdi_internal_controls
34!
35! 4157 2019-08-14 09:19:12Z suehring
36! Call doq_init from module interface
37!
38! 4132 2019-08-02 12:34:17Z suehring
39! Bugfix in masked data output for diagnostic quantities
40!
41! 4131 2019-08-02 11:06:18Z monakurppa
42! Add output of 3D plant-canopy outputs (merge from branch resler)
43!
44! 4048 2019-06-21 21:00:21Z knoop
45! Moved turbulence_closure_mod calls into this module_interface
46!
47! 4047 2019-06-21 18:58:09Z knoop
48! Introduction of the dynamics module
49!
50! 4039 2019-06-18 10:32:41Z suehring
51! Introduce diagnostic output
52!
53! 4028 2019-06-13 12:21:37Z schwenkel
54! Further modularization of particle code components
55!
56! 4017 2019-06-06 12:16:46Z schwenkel
57! local_pf need INTENT(INOUT) attribute rather than INTENT(OUT). This is
58! because INTENT(OUT) sets the array to not-defined. Especially for outputs that
59! are not defined everywhere, e.g. land-surface outputs, this will be
60! problematic as NaN will be output.
61!
62! 3987 2019-05-22 09:52:13Z kanani
63! Introduce switchable DEBUG file output via debug_message routine
64!
65! 3956 2019-05-07 12:32:52Z monakurppa
66! - Added calls for salsa_non_advective_processes and
67!   salsa_exchange_horiz_bounds
68! - Moved the call for salsa_data_output_2d/3d before that of
69!   radiation_data_output_2d/3d. radiation_data_output_2d/3d tries to read a
70!   salsa output variable and encounters a segmentation fault for "Ntot" due
71!   to the shortoutput name
72!
73! 3931 2019-04-24 16:34:28Z schwenkel
74! Changed non_transport_physics to non_advective_processes
75!
76! 3930 2019-04-24 14:57:18Z forkel
77! Correct/complete module_interface introduction for chemistry model
78!
79! 3887 2019 -04-12 08:47:41Z schwenkel
80! Changes related to global restructuring of location messages and introduction
81! of additional debug messages
82!
83! 3880 2019 -04-08 21:43:02Z knoop
84! Add a call for salsa_prognostic_equations
85!
86! 3840 2019-03-29 10:35:52Z knoop
87! bugfix: intent of dummy arguments changed to inout
88!
89! 3770 2019-02-28 11:22:32Z moh.hefny
90! removed unused variables in module_interface_check_data_output_ts
91!
92! 3767 08:18:02Z raasch
93! unused variable file_index removed from subroutine parameter list
94!
95! 3766 2019-02-26 16:23:41Z raasch
96! first argument removed from module_interface_rrd_*, statement added to avoid
97! compiler warning about unused variable, file reformatted with respect to coding
98! standards
99!
100! 3762 2019-02-25 16:54:16Z suehring
101! only pass required arguments to surface_data_output_rrd_local
102!
103! 3747 2019-02-16 15:15:23Z gronemeier
104! Call user_init_arrays
105!
106! 3745 2019-02-15 18:57:56Z suehring
107! Add indoor model
108!
109! 3744 2019-02-15 18:38:58Z suehring
110! Removed bio_check_parameters as the method is empty.
111!
112! 3735 2019-02-12 09:52:40Z dom_dwd_user
113! Accepting variable j from check_parameters and passing it to
114! bio_check_data_output
115! Add required restart data for surface output module
116!
117! 3731 2019-02-11 13:06:27Z suehring
118! Add check_parameters routine for virtual measurements
119!
120! 3711 2019-01-31 13:44:26Z knoop
121! Introduced module_interface_init_checks for post-init checks
122!
123! 3705 2019-01-29 19:56:39Z suehring
124! Add last_actions for virtual measurements
125!
126! 3704 2019-01-29 19:51:41Z suehring
127! Some interface calls moved to module_interface + cleanup
128!
129! 3684 2019-01-20 20:20:58Z knoop
130! Bugfix: made unit intend INOUT
131!
132! 3650 2019-01-04 13:01:33Z kanani
133! Add restart routines for biometeorology
134!
135! 3649 2019-01-02 16:52:21Z suehring
136! Initialize strings, in order to avoid compiler warnings for non-initialized
137! characters with intent(out) attribute
138!
139! 3648 2019-01-02 16:35:46Z suehring
140! 3641 2018-12-23 22:10:01Z knoop
141! Initial implementation of the PALM module interface
142!
143!
144! Description:
145! ------------
146!> This is the interface between the PALM model core and all its modules.
147!>
148!> @todo Re-format module to be consistent with coding standard
149!------------------------------------------------------------------------------!
150 MODULE module_interface
151
152    USE indices,                                                               &
153        ONLY:  nbgp, nxl, nxlg, nxr, nxrg, nys, nysg, nyn, nyng, nzb, nzt
154
155    USE kinds
156
157!
158!-- load module-specific control parameters.
159!-- ToDo: move all of them to respective module or a dedicated central module
160
161    USE dynamics_mod, &
162        ONLY:  dynamics_parin, &
163               dynamics_check_parameters, &
164               dynamics_check_data_output_ts, &
165               dynamics_check_data_output_pr, &
166               dynamics_check_data_output, &
167               dynamics_init_masks, &
168               dynamics_define_netcdf_grid, &
169               dynamics_init_arrays, &
170               dynamics_init, &
171               dynamics_init_checks, &
172               dynamics_header, &
173               dynamics_actions, &
174               dynamics_non_advective_processes, &
175               dynamics_exchange_horiz, &
176               dynamics_prognostic_equations, &
177               dynamics_swap_timelevel, &
178               dynamics_3d_data_averaging, &
179               dynamics_data_output_2d, &
180               dynamics_data_output_3d, &
181               dynamics_statistics, &
182               dynamics_rrd_global, &
183               dynamics_rrd_local, &
184               dynamics_wrd_global, &
185               dynamics_wrd_local, &
186               dynamics_last_actions
187
188    USE turbulence_closure_mod, &
189        ONLY:  tcm_check_parameters, &
190               tcm_check_data_output, &
191               tcm_init_arrays, &
192               tcm_init, &
193               tcm_actions, &
194               tcm_prognostic_equations, &
195               tcm_swap_timelevel, &
196               tcm_3d_data_averaging, &
197               tcm_data_output_2d, &
198               tcm_data_output_3d
199
200    USE control_parameters,                                                    &
201        ONLY:  air_chemistry,                                                  &
202               biometeorology,                                                 &
203               debug_output,                                                   &
204               debug_output_timestep,                                          &
205               indoor_model,                                                   &
206               land_surface,                                                   &
207               large_scale_forcing,                                            &
208               nesting_offline,                                                &
209               nudging,                                                        &
210               ocean_mode,                                                     &
211               plant_canopy,                                                   &
212               salsa,                                                          &
213               surface_output,                                                 &
214               syn_turb_gen,                                                   &
215               urban_surface,                                                  &
216               vdi_checks,                                                     &
217               virtual_flight,                                                 &
218               virtual_measurement,                                            &
219               wind_turbine
220
221!
222!-- load interface routines of all PALM modules
223    USE biometeorology_mod,                                                    &
224        ONLY:  bio_parin,                                                      &
225               bio_check_data_output,                                          &
226               bio_init,                                                       &
227               bio_init_checks,                                                &
228               bio_header,                                                     &
229               bio_3d_data_averaging,                                          &
230               bio_data_output_2d,                                             &
231               bio_data_output_3d,                                             &
232               bio_rrd_global,                                                 &
233               bio_rrd_local,                                                  &
234               bio_wrd_global,                                                 &
235               bio_wrd_local
236
237    USE bulk_cloud_model_mod,                                                  &
238        ONLY:  bulk_cloud_model,                                               &
239               bcm_parin,                                                      &
240               bcm_check_parameters,                                           &
241               bcm_check_data_output_pr,                                       &
242               bcm_check_data_output,                                          &
243               bcm_init_arrays,                                                &
244               bcm_init,                                                       &
245               bcm_header,                                                     &
246               bcm_actions,                                                    &
247               bcm_non_advective_processes,                                    &
248               bcm_exchange_horiz,                                             &
249               bcm_prognostic_equations,                                       &
250               bcm_boundary_conditions,                                        &
251               bcm_swap_timelevel,                                             &
252               bcm_3d_data_averaging,                                          &
253               bcm_data_output_2d,                                             &
254               bcm_data_output_3d,                                             &
255               bcm_rrd_global,                                                 &
256               bcm_wrd_global,                                                 &
257               bcm_rrd_local,                                                  &
258               bcm_wrd_local
259
260   USE chemistry_model_mod,                                                    &
261       ONLY:  chem_parin,                                                      &
262              chem_check_parameters,                                           &
263              chem_check_data_output_pr,                                       &
264              chem_check_data_output,                                          &
265              chem_exchange_horiz_bounds,                                      &
266              chem_init_arrays,                                                &
267              chem_init,                                                       &
268              chem_header,                                                     &
269              chem_actions,                                                    &
270              chem_non_advective_processes,                                    &
271              chem_prognostic_equations,                                       &
272              chem_boundary_conditions,                                        &
273              chem_swap_timelevel,                                             &
274              chem_3d_data_averaging,                                          &
275              chem_data_output_2d,                                             &
276              chem_data_output_3d,                                             &
277              chem_statistics,                                                 &
278              chem_rrd_local,                                                  &
279              chem_wrd_local
280
281    USE diagnostic_output_quantities_mod,                                      &
282        ONLY:  doq_3d_data_averaging,                                          &
283               doq_check_data_output,                                          &
284               doq_define_netcdf_grid,                                         &
285               doq_init,                                                       &
286               doq_output_2d,                                                  &
287               doq_output_3d,                                                  &
288               doq_wrd_local
289!                doq_rrd_local,                                                  &
290
291    USE flight_mod,                                                            &
292        ONLY:  flight_parin,                                                   &
293               flight_header,                                                  &
294               flight_init,                                                    &
295               flight_rrd_global,                                              &
296               flight_wrd_global
297
298    USE gust_mod,                                                              &
299        ONLY:  gust_module_enabled,                                            &
300               gust_parin,                                                     &
301               gust_check_parameters,                                          &
302               gust_check_data_output_pr,                                      &
303               gust_check_data_output,                                         &
304               gust_init_arrays,                                               &
305               gust_init,                                                      &
306               gust_header,                                                    &
307               gust_actions,                                                   &
308               gust_prognostic_equations,                                      &
309               gust_swap_timelevel,                                            &
310               gust_3d_data_averaging,                                         &
311               gust_data_output_2d,                                            &
312               gust_data_output_3d,                                            &
313               gust_statistics,                                                &
314               gust_rrd_global,                                                &
315               gust_wrd_global,                                                &
316               gust_rrd_local,                                                 &
317               gust_wrd_local
318
319    USE indoor_model_mod,                                                      &
320        ONLY:  im_parin,                                                       &
321               im_check_data_output,                                           &
322               im_check_parameters,                                            &
323               im_data_output_3d,                                              &
324               im_init
325
326    USE lagrangian_particle_model_mod,                                         &
327        ONLY:  lpm_parin,                                                      &
328               lpm_header,                                                     &
329               lpm_check_parameters,                                           &
330               lpm_init_arrays,                                                &
331               lpm_init,                                                       &
332               lpm_actions,                                                    &
333               lpm_rrd_global,                                                 &
334               lpm_rrd_local,                                                  &
335               lpm_wrd_local,                                                  &
336               lpm_wrd_global
337
338    USE land_surface_model_mod,                                                &
339        ONLY:  lsm_parin,                                                      &
340               lsm_check_parameters,                                           &
341               lsm_check_data_output_pr,                                       &
342               lsm_check_data_output,                                          &
343               lsm_init_arrays,                                                &
344               lsm_init,                                                       &
345               lsm_header,                                                     &
346               lsm_swap_timelevel,                                             &
347               lsm_3d_data_averaging,                                          &
348               lsm_data_output_2d,                                             &
349               lsm_rrd_local,                                                  &
350               lsm_wrd_local
351
352    USE lsf_nudging_mod,                                                       &
353        ONLY:  lsf_nudging_check_parameters,                                   &
354               lsf_nudging_check_data_output_pr,                               &
355               lsf_init,                                                       &
356               nudge_init,                                                     &
357               lsf_nudging_header
358
359    USE multi_agent_system_mod,                                                &
360        ONLY:  mas_parin
361
362    USE nesting_offl_mod,                                                      &
363        ONLY:  nesting_offl_parin,                                             &
364               nesting_offl_check_parameters,                                  &
365               nesting_offl_header
366
367    USE ocean_mod,                                                             &
368        ONLY:  ocean_parin,                                                    &
369               ocean_check_parameters,                                         &
370               ocean_check_data_output_pr,                                     &
371               ocean_check_data_output,                                        &
372               ocean_init_arrays,                                              &
373               ocean_init,                                                     &
374               ocean_header,                                                   &
375               ocean_actions,                                                  &
376               ocean_prognostic_equations,                                     &
377               ocean_swap_timelevel,                                           &
378               ocean_3d_data_averaging,                                        &
379               ocean_data_output_2d,                                           &
380               ocean_data_output_3d,                                           &
381               ocean_rrd_global,                                               &
382               ocean_wrd_global,                                               &
383               ocean_rrd_local,                                                &
384               ocean_wrd_local
385
386    USE particle_attributes,                                                   &
387        ONLY:  particle_advection
388
389    USE plant_canopy_model_mod,                                                &
390         ONLY: pcm_parin,                                                      &
391               pcm_check_parameters,                                           &
392               pcm_check_data_output,                                          &
393               pcm_init,                                                       &
394               pcm_header,                                                     &
395               pcm_3d_data_averaging,                                          &
396               pcm_data_output_3d
397
398    USE radiation_model_mod,                                                   &
399        ONLY:  radiation,                                                      &
400               radiation_parin,                                                &
401               radiation_check_parameters,                                     &
402               radiation_check_data_output_ts,                                 &
403               radiation_check_data_output_pr,                                 &
404               radiation_check_data_output,                                    &
405               radiation_init,                                                 &
406               radiation_header,                                               &
407               radiation_3d_data_averaging,                                    &
408               radiation_data_output_2d,                                       &
409               radiation_data_output_3d,                                       &
410               radiation_rrd_local,                                            &
411               radiation_wrd_local
412
413    USE salsa_mod,                                                             &
414        ONLY:  salsa_parin,                                                    &
415               salsa_check_parameters,                                         &
416               salsa_check_data_output_pr,                                     &
417               salsa_check_data_output,                                        &
418               salsa_init_arrays,                                              &
419               salsa_init,                                                     &
420               salsa_header,                                                   &
421               salsa_actions,                                                  &
422               salsa_non_advective_processes,                                  &
423               salsa_exchange_horiz_bounds,                                    &
424               salsa_prognostic_equations,                                     &
425               salsa_boundary_conditions,                                      &
426               salsa_swap_timelevel,                                           &
427               salsa_3d_data_averaging,                                        &
428               salsa_data_output_2d,                                           &
429               salsa_data_output_3d,                                           &
430               salsa_statistics,                                               &
431               salsa_rrd_local,                                                &
432               salsa_wrd_local
433
434    USE spectra_mod,                                                           &
435        ONLY:  calculate_spectra,                                              &
436               spectra_parin,                                                  &
437               spectra_check_parameters,                                       &
438               spectra_header
439
440    USE surface_data_output_mod,                                               &
441        ONLY:  surface_data_output_parin,                                      &
442               surface_data_output_check_parameters,                           &
443               surface_data_output_init_arrays,                                &
444               surface_data_output_rrd_local,                                  &
445               surface_data_output_rrd_global,                                 &
446               surface_data_output_wrd_local,                                  &
447               surface_data_output_wrd_global
448
449    USE synthetic_turbulence_generator_mod,                                    &
450        ONLY:  stg_parin,                                                      &
451               stg_check_parameters,                                           &
452               stg_header,                                                     &
453               stg_rrd_global,                                                 &
454               stg_wrd_global
455
456    USE urban_surface_mod,                                                     &
457        ONLY:  usm_parin,                                                      &
458               usm_check_parameters,                                           &
459               usm_check_data_output,                                          &
460               usm_init_arrays,                                                &
461               usm_init,                                                       &
462               usm_swap_timelevel,                                             &
463               usm_3d_data_averaging,                                          &
464               usm_rrd_local,                                                  &
465               usm_wrd_local
466
467    USE vdi_internal_controls,                                                 &
468        ONLY:  vdi_actions
469               
470    USE virtual_measurement_mod,                                               &
471        ONLY:  vm_check_parameters,                                            &
472               vm_init,                                                        &
473               vm_last_actions,                                                &
474               vm_parin
475
476    USE wind_turbine_model_mod,                                                &
477        ONLY:  wtm_parin,                                                      &
478               wtm_check_parameters,                                           &
479               wtm_init_arrays,                                                &
480               wtm_init,                                                       &
481               wtm_actions,                                                    &
482               wtm_rrd_global,                                                 &
483               wtm_wrd_global
484
485    USE user,                                                                  &
486        ONLY:  user_module_enabled,                                            &
487               user_parin,                                                     &
488               user_check_parameters,                                          &
489               user_check_data_output_ts,                                      &
490               user_check_data_output_pr,                                      &
491               user_check_data_output,                                         &
492               user_init,                                                      &
493               user_init_arrays,                                               &
494               user_header,                                                    &
495               user_actions,                                                   &
496               user_3d_data_averaging,                                         &
497               user_data_output_2d,                                            &
498               user_data_output_3d,                                            &
499               user_statistics,                                                &
500               user_rrd_global,                                                &
501               user_rrd_local,                                                 &
502               user_wrd_global,                                                &
503               user_wrd_local,                                                 &
504               user_last_actions
505
506    IMPLICIT NONE
507
508    PRIVATE
509
510!
511!-- Public functions
512    PUBLIC                                                                     &
513       module_interface_parin,                                                 &
514       module_interface_check_parameters,                                      &
515       module_interface_check_data_output_ts,                                  &
516       module_interface_check_data_output_pr,                                  &
517       module_interface_check_data_output,                                     &
518       module_interface_init_masks,                                            &
519       module_interface_define_netcdf_grid,                                    &
520       module_interface_init_arrays,                                           &
521       module_interface_init,                                                  &
522       module_interface_init_checks,                                           &
523       module_interface_header,                                                &
524       module_interface_actions,                                               &
525       module_interface_non_advective_processes,                               &
526       module_interface_exchange_horiz,                                        &
527       module_interface_prognostic_equations,                                  &
528       module_interface_boundary_conditions,                                   &
529       module_interface_swap_timelevel,                                        &
530       module_interface_3d_data_averaging,                                     &
531       module_interface_data_output_2d,                                        &
532       module_interface_data_output_3d,                                        &
533       module_interface_statistics,                                            &
534       module_interface_rrd_global,                                            &
535       module_interface_wrd_global,                                            &
536       module_interface_rrd_local,                                             &
537       module_interface_wrd_local,                                             &
538       module_interface_last_actions
539
540
541    INTERFACE module_interface_parin
542       MODULE PROCEDURE module_interface_parin
543    END INTERFACE module_interface_parin
544
545    INTERFACE module_interface_check_parameters
546       MODULE PROCEDURE module_interface_check_parameters
547    END INTERFACE module_interface_check_parameters
548
549    INTERFACE module_interface_check_data_output_ts
550       MODULE PROCEDURE module_interface_check_data_output_ts
551    END INTERFACE module_interface_check_data_output_ts
552
553    INTERFACE module_interface_check_data_output_pr
554       MODULE PROCEDURE module_interface_check_data_output_pr
555    END INTERFACE module_interface_check_data_output_pr
556
557    INTERFACE module_interface_check_data_output
558       MODULE PROCEDURE module_interface_check_data_output
559    END INTERFACE module_interface_check_data_output
560
561    INTERFACE module_interface_init_masks
562       MODULE PROCEDURE module_interface_init_masks
563    END INTERFACE module_interface_init_masks
564
565    INTERFACE module_interface_define_netcdf_grid
566       MODULE PROCEDURE module_interface_define_netcdf_grid
567    END INTERFACE module_interface_define_netcdf_grid
568
569    INTERFACE module_interface_init_arrays
570       MODULE PROCEDURE module_interface_init_arrays
571    END INTERFACE module_interface_init_arrays
572
573    INTERFACE module_interface_init
574       MODULE PROCEDURE module_interface_init
575    END INTERFACE module_interface_init
576
577    INTERFACE module_interface_init_checks
578       MODULE PROCEDURE module_interface_init_checks
579    END INTERFACE module_interface_init_checks
580
581    INTERFACE module_interface_header
582       MODULE PROCEDURE module_interface_header
583    END INTERFACE module_interface_header
584
585    INTERFACE module_interface_actions
586       MODULE PROCEDURE module_interface_actions
587       MODULE PROCEDURE module_interface_actions_ij
588    END INTERFACE module_interface_actions
589
590    INTERFACE module_interface_non_advective_processes
591       MODULE PROCEDURE module_interface_non_advective_processes
592       MODULE PROCEDURE module_interface_non_advective_processes_ij
593    END INTERFACE module_interface_non_advective_processes
594
595    INTERFACE module_interface_exchange_horiz
596       MODULE PROCEDURE module_interface_exchange_horiz
597    END INTERFACE module_interface_exchange_horiz
598
599    INTERFACE module_interface_prognostic_equations
600       MODULE PROCEDURE module_interface_prognostic_equations
601       MODULE PROCEDURE module_interface_prognostic_equations_ij
602    END INTERFACE module_interface_prognostic_equations
603
604    INTERFACE module_interface_swap_timelevel
605       MODULE PROCEDURE module_interface_swap_timelevel
606    END INTERFACE module_interface_swap_timelevel
607
608    INTERFACE module_interface_boundary_conditions
609       MODULE PROCEDURE module_interface_boundary_conditions
610    END INTERFACE module_interface_boundary_conditions
611
612    INTERFACE module_interface_3d_data_averaging
613       MODULE PROCEDURE module_interface_3d_data_averaging
614    END INTERFACE module_interface_3d_data_averaging
615
616    INTERFACE module_interface_data_output_2d
617       MODULE PROCEDURE module_interface_data_output_2d
618    END INTERFACE module_interface_data_output_2d
619
620    INTERFACE module_interface_data_output_3d
621       MODULE PROCEDURE module_interface_data_output_3d
622    END INTERFACE module_interface_data_output_3d
623
624    INTERFACE module_interface_statistics
625       MODULE PROCEDURE module_interface_statistics
626    END INTERFACE module_interface_statistics
627
628    INTERFACE module_interface_rrd_global
629       MODULE PROCEDURE module_interface_rrd_global
630    END INTERFACE module_interface_rrd_global
631
632    INTERFACE module_interface_wrd_global
633       MODULE PROCEDURE module_interface_wrd_global
634    END INTERFACE module_interface_wrd_global
635
636    INTERFACE module_interface_rrd_local
637       MODULE PROCEDURE module_interface_rrd_local
638    END INTERFACE module_interface_rrd_local
639
640    INTERFACE module_interface_wrd_local
641       MODULE PROCEDURE module_interface_wrd_local
642    END INTERFACE module_interface_wrd_local
643
644    INTERFACE module_interface_last_actions
645       MODULE PROCEDURE module_interface_last_actions
646    END INTERFACE module_interface_last_actions
647
648
649 CONTAINS
650
651
652!------------------------------------------------------------------------------!
653! Description:
654! ------------
655!> Read module-specific parameter namelists
656!------------------------------------------------------------------------------!
657 SUBROUTINE module_interface_parin
658
659
660    IF ( debug_output )  CALL debug_message( 'reading module-specific parameters', 'start' )
661
662    CALL dynamics_parin
663
664    CALL bio_parin
665    CALL bcm_parin
666    CALL chem_parin
667    CALL flight_parin ! ToDo: rename module to match filename
668    CALL gust_parin
669    CALL im_parin
670    CALL lpm_parin
671    CALL lsm_parin
672    ! ToDo: create parin routine for large_scale_forcing and nudging (should be seperate modules or new module switch)
673    CALL mas_parin
674    CALL nesting_offl_parin
675    CALL ocean_parin
676    CALL pcm_parin
677    CALL radiation_parin
678    CALL salsa_parin
679    CALL spectra_parin
680    CALL surface_data_output_parin
681    CALL stg_parin
682    CALL usm_parin
683    CALL vm_parin
684    CALL wtm_parin
685
686    CALL user_parin
687
688    IF ( debug_output )  CALL debug_message( 'reading module-specific parameters', 'end' )
689
690
691 END SUBROUTINE module_interface_parin
692
693
694!------------------------------------------------------------------------------!
695! Description:
696! ------------
697!> Perform module-specific initialization checks
698!------------------------------------------------------------------------------!
699 SUBROUTINE module_interface_check_parameters
700
701
702    IF ( debug_output )  CALL debug_message( 'checking module-specific parameters', 'start' )
703
704    CALL dynamics_check_parameters
705    CALL tcm_check_parameters
706
707    IF ( bulk_cloud_model )     CALL bcm_check_parameters
708    IF ( air_chemistry )        CALL chem_check_parameters
709    IF ( gust_module_enabled )  CALL gust_check_parameters
710    IF ( indoor_model )         CALL im_check_parameters
711    IF ( particle_advection )   CALL lpm_check_parameters
712    IF ( land_surface )         CALL lsm_check_parameters
713    IF ( large_scale_forcing  .OR.  nudging )  CALL lsf_nudging_check_parameters ! ToDo: create single module switch
714    IF ( nesting_offline )      CALL nesting_offl_check_parameters
715    IF ( ocean_mode )           CALL ocean_check_parameters
716    IF ( plant_canopy )         CALL pcm_check_parameters
717    IF ( radiation )            CALL radiation_check_parameters
718    IF ( salsa )                CALL salsa_check_parameters
719    IF ( calculate_spectra )    CALL spectra_check_parameters
720    IF ( surface_output )       CALL surface_data_output_check_parameters
721    IF ( syn_turb_gen )         CALL stg_check_parameters
722    IF ( urban_surface )        CALL usm_check_parameters
723    IF ( virtual_measurement )  CALL vm_check_parameters
724    IF ( wind_turbine )         CALL wtm_check_parameters
725
726    IF ( user_module_enabled )  CALL user_check_parameters
727
728    IF ( debug_output )  CALL debug_message( 'checking module-specific parameters', 'end' )
729
730
731 END SUBROUTINE module_interface_check_parameters
732
733
734!------------------------------------------------------------------------------!
735! Description:
736! ------------
737!> Check module-specific data output of timeseries
738!------------------------------------------------------------------------------!
739 SUBROUTINE module_interface_check_data_output_ts( dots_max, dots_num, dots_label, dots_unit )
740
741
742    INTEGER(iwp),      INTENT(IN)    ::  dots_max !< variable output array index
743    INTEGER(iwp),      INTENT(INOUT)    ::  dots_num !< variable output array index
744    CHARACTER (LEN=*), DIMENSION(dots_max), INTENT(INOUT) :: dots_label
745    CHARACTER (LEN=*), DIMENSION(dots_max), INTENT(INOUT) :: dots_unit
746
747
748    IF ( debug_output )  CALL debug_message( 'checking module-specific data output ts', 'start' )
749
750    CALL dynamics_check_data_output_ts( dots_max, dots_num, dots_label, dots_unit )
751
752    IF ( radiation )  THEN
753       CALL radiation_check_data_output_ts( dots_max, dots_num )
754    ENDIF
755
756    IF ( user_module_enabled )  THEN
757       CALL user_check_data_output_ts( dots_max, dots_num, dots_label, dots_unit )
758    ENDIF
759
760    IF ( debug_output )  CALL debug_message( 'checking module-specific data output ts', 'end' )
761
762
763 END SUBROUTINE module_interface_check_data_output_ts
764
765
766!------------------------------------------------------------------------------!
767! Description:
768! ------------
769!> Check module-specific data output of profiles
770!------------------------------------------------------------------------------!
771 SUBROUTINE module_interface_check_data_output_pr( variable, var_count, unit,  &
772                                                   dopr_unit )
773
774
775    CHARACTER (LEN=*), INTENT(IN)    ::  variable  !< variable name
776    INTEGER(iwp),      INTENT(IN)    ::  var_count !< variable output array index
777    CHARACTER (LEN=*), INTENT(INOUT) ::  unit      !< physical unit of variable
778    CHARACTER (LEN=*), INTENT(OUT)   ::  dopr_unit !< local value of dopr_unit
779
780
781    IF ( debug_output )  CALL debug_message( 'checking module-specific data output pr', 'start' )
782
783    CALL dynamics_check_data_output_pr( variable, var_count, unit, dopr_unit )
784
785    IF ( unit == 'illegal' .AND.  bulk_cloud_model )  THEN
786       CALL bcm_check_data_output_pr( variable, var_count, unit, dopr_unit )
787    ENDIF
788
789    IF ( unit == 'illegal' .AND.  air_chemistry )  THEN
790       CALL chem_check_data_output_pr( variable, var_count, unit, dopr_unit )
791    ENDIF
792
793    IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
794       CALL gust_check_data_output_pr( variable, var_count, unit, dopr_unit )
795    ENDIF
796
797    IF ( unit == 'illegal' )  THEN ! ToDo: add module switch if possible
798       CALL lsm_check_data_output_pr( variable, var_count, unit, dopr_unit )
799    ENDIF
800
801    IF ( unit == 'illegal' )  THEN ! ToDo: add module switch if possible
802       CALL lsf_nudging_check_data_output_pr( variable, var_count, unit, dopr_unit )
803    ENDIF
804
805    IF ( unit == 'illegal'  .AND.  ocean_mode )  THEN
806       CALL ocean_check_data_output_pr( variable, var_count, unit, dopr_unit )
807    ENDIF
808
809    IF ( unit == 'illegal'  .AND.  radiation )  THEN
810       CALL radiation_check_data_output_pr( variable, var_count, unit, dopr_unit )
811    ENDIF
812
813    IF ( unit == 'illegal'  .AND.  salsa )  THEN
814       CALL salsa_check_data_output_pr( variable, var_count, unit, dopr_unit )
815    ENDIF
816
817    IF ( unit == 'illegal'  .AND.  user_module_enabled )  THEN
818       unit = '' ! ToDo: Seems like a hack. Find a general soultion!
819       CALL user_check_data_output_pr( variable, var_count, unit, dopr_unit )
820    ENDIF
821
822    IF ( debug_output )  CALL debug_message( 'checking module-specific data output pr', 'end' )
823
824
825 END SUBROUTINE module_interface_check_data_output_pr
826
827!------------------------------------------------------------------------------!
828! Description:
829! ------------
830!> Check module-specific 2D and 3D data output
831!------------------------------------------------------------------------------!
832 SUBROUTINE module_interface_check_data_output( variable, unit, i, j, ilen, k )
833
834
835    CHARACTER (LEN=*), INTENT(IN)    ::  variable !< variable name
836    CHARACTER (LEN=*), INTENT(INOUT) ::  unit     !< physical unit of variable
837
838    INTEGER(iwp),      INTENT(IN)    :: i         !< ToDo: remove dummy argument, instead pass string from data_output
839    INTEGER(iwp),      INTENT(IN)    :: j         !< average quantity? 0 = no, 1 = yes
840    INTEGER(iwp),      INTENT(IN)    :: ilen      !< ToDo: remove dummy argument, instead pass string from data_output
841    INTEGER(iwp),      INTENT(IN)    :: k         !< ToDo: remove dummy argument, instead pass string from data_output
842
843
844    IF ( debug_output )  CALL debug_message( 'checking module-specific data output 2d/3d', 'start' )
845
846    CALL dynamics_check_data_output( variable, unit )
847
848    CALL tcm_check_data_output( variable, unit )
849
850    IF ( unit == 'illegal'  .AND.  biometeorology )  THEN
851       CALL bio_check_data_output( variable, unit, i, j, ilen, k )
852    ENDIF
853
854    IF ( unit == 'illegal'  .AND.  bulk_cloud_model  )  THEN
855       CALL bcm_check_data_output( variable, unit )
856    ENDIF
857
858    IF ( unit == 'illegal'  .AND.  air_chemistry                               &
859         .AND.  (variable(1:3) == 'kc_' .OR. variable(1:3) == 'em_') )  THEN  ! ToDo: remove aditional conditions
860       CALL chem_check_data_output( variable, unit, i, ilen, k )
861    ENDIF
862
863    IF ( unit == 'illegal' )  THEN
864       CALL doq_check_data_output( variable, unit )
865    ENDIF
866
867    IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
868       CALL gust_check_data_output( variable, unit )
869    ENDIF
870
871    IF ( unit == 'illegal' )  THEN  ! ToDo: add module switch if possible
872       CALL lsm_check_data_output( variable, unit, i, ilen, k )
873    ENDIF
874
875    IF ( unit == 'illegal'  .AND.  ocean_mode )  THEN
876       CALL ocean_check_data_output( variable, unit )
877    ENDIF
878
879    IF ( unit == 'illegal'  .AND.  plant_canopy                                &
880         .AND.  variable(1:4) == 'pcm_' )  THEN  ! ToDo: remove aditional conditions
881       CALL pcm_check_data_output( variable, unit )
882    ENDIF
883
884    IF ( unit == 'illegal'  .AND.  radiation )  THEN
885       CALL radiation_check_data_output( variable, unit, i, ilen, k )
886    ENDIF
887
888    IF ( unit == 'illegal' .AND. salsa ) THEN
889       CALL salsa_check_data_output( variable, unit )
890    ENDIF
891
892    IF ( unit == 'illegal' .AND. indoor_model ) THEN
893       CALL im_check_data_output( variable, unit )
894    ENDIF
895
896    IF ( unit == 'illegal'  .AND.  urban_surface                      &
897        .AND.  variable(1:4) == 'usm_' )  THEN  ! ToDo: remove aditional conditions
898       CALL usm_check_data_output( variable, unit )
899    ENDIF
900
901    IF ( unit == 'illegal'  .AND.  user_module_enabled )  THEN
902       unit = ''
903       CALL user_check_data_output( variable, unit )
904    ENDIF
905
906    IF ( debug_output )  CALL debug_message( 'checking module-specific data output 2d/3d', 'end' )
907
908
909 END SUBROUTINE module_interface_check_data_output
910
911
912!------------------------------------------------------------------------------!
913!
914! Description:
915! ------------
916!> Interface for init_masks. ToDo: get rid of these redundant calls!
917!------------------------------------------------------------------------------!
918 SUBROUTINE module_interface_init_masks( variable, unit )
919
920
921    CHARACTER (LEN=*), INTENT(IN)    ::  variable !< variable name
922    CHARACTER (LEN=*), INTENT(INOUT) ::  unit     !< physical unit of variable
923
924
925    IF ( debug_output )  CALL debug_message( 'initializing module-specific masks', 'start' )
926
927    CALL dynamics_init_masks( variable, unit )
928
929    IF ( unit == 'illegal'  .AND.  air_chemistry                               &
930         .AND.  (variable(1:3) == 'kc_' .OR. variable(1:3) == 'em_') )  THEN  ! ToDo: remove aditional conditions
931       CALL chem_check_data_output( variable, unit, 0, 0, 0 )
932    ENDIF
933   
934    IF ( unit == 'illegal' )  THEN
935       CALL doq_check_data_output( variable, unit )
936    ENDIF
937
938    IF ( unit == 'illegal'  .AND.  radiation )  THEN
939       CALL radiation_check_data_output( variable, unit, 0, 0, 0 )
940    ENDIF
941
942    IF ( unit == 'illegal'  .AND.  salsa )  THEN
943       CALL salsa_check_data_output( variable, unit )
944    ENDIF
945
946    IF ( unit == 'illegal'  .AND.  user_module_enabled )  THEN
947       unit = ''
948       CALL user_check_data_output( variable, unit )
949    ENDIF
950
951    IF ( debug_output )  CALL debug_message( 'initializing module-specific masks', 'end' )
952
953
954 END SUBROUTINE module_interface_init_masks
955
956
957!------------------------------------------------------------------------------!
958!
959! Description:
960! ------------
961!> Define appropriate grid for module-specific netcdf output variables.
962!------------------------------------------------------------------------------!
963 SUBROUTINE module_interface_define_netcdf_grid( var, found,                   &
964                                                 grid_x, grid_y, grid_z )
965
966
967    CHARACTER (LEN=*), INTENT(IN)  ::  var    !< variable name
968    LOGICAL,           INTENT(OUT) ::  found  !< indicates if variable was found
969    CHARACTER (LEN=*), INTENT(OUT) ::  grid_x !< netcdf dimension in x-direction
970    CHARACTER (LEN=*), INTENT(OUT) ::  grid_y !< netcdf dimension in y-direction
971    CHARACTER (LEN=*), INTENT(OUT) ::  grid_z !< netcdf dimension in z-direction
972
973
974    IF ( debug_output )  CALL debug_message( 'defining module-specific netcdf grids', 'start' )
975!
976!-- As long as no action is done in this subroutine, initialize strings with
977!-- intent(out) attribute, in order to avoid compiler warnings.
978    found  = .FALSE.
979    grid_x = 'none'
980    grid_y = 'none'
981    grid_z = 'none'
982!
983!-- Use var to avoid compiler warning about unused variable
984    IF ( var == ' ' )  RETURN
985
986    IF ( debug_output )  CALL debug_message( 'defining module-specific netcdf grids', 'end' )
987
988
989 END SUBROUTINE module_interface_define_netcdf_grid
990
991
992!------------------------------------------------------------------------------!
993! Description:
994! ------------
995!> Allocate module-specific arrays and pointers
996!------------------------------------------------------------------------------!
997 SUBROUTINE module_interface_init_arrays
998
999
1000    IF ( debug_output )  CALL debug_message( 'initializing module-specific arrays', 'start' )
1001
1002    CALL dynamics_init_arrays
1003    CALL tcm_init_arrays
1004
1005    IF ( bulk_cloud_model    )  CALL bcm_init_arrays
1006    IF ( air_chemistry       )  CALL chem_init_arrays
1007    IF ( gust_module_enabled )  CALL gust_init_arrays
1008    IF ( particle_advection  )  CALL lpm_init_arrays
1009    IF ( land_surface        )  CALL lsm_init_arrays
1010    IF ( ocean_mode          )  CALL ocean_init_arrays
1011    IF ( salsa               )  CALL salsa_init_arrays
1012    IF ( urban_surface       )  CALL usm_init_arrays
1013    IF ( surface_output      )  CALL surface_data_output_init_arrays
1014    IF ( wind_turbine        )  CALL wtm_init_arrays
1015
1016    IF ( user_module_enabled )  CALL user_init_arrays
1017
1018    IF ( debug_output )  CALL debug_message( 'initializing module-specific arrays', 'end' )
1019
1020
1021 END SUBROUTINE module_interface_init_arrays
1022
1023
1024!------------------------------------------------------------------------------!
1025! Description:
1026! ------------
1027!> Perform module-specific initialization
1028!------------------------------------------------------------------------------!
1029 SUBROUTINE module_interface_init
1030
1031
1032    IF ( debug_output )  CALL debug_message( 'module-specific initialization', 'start' )
1033
1034    CALL dynamics_init
1035    CALL tcm_init
1036
1037    IF ( biometeorology      )  CALL bio_init
1038    IF ( bulk_cloud_model    )  CALL bcm_init
1039    IF ( air_chemistry       )  CALL chem_init
1040    IF ( virtual_flight      )  CALL flight_init
1041    IF ( gust_module_enabled )  CALL gust_init
1042    IF ( indoor_model        )  CALL im_init
1043    IF ( particle_advection  )  CALL lpm_init
1044    IF ( large_scale_forcing )  CALL lsf_init
1045    IF ( land_surface        )  CALL lsm_init
1046    IF ( nudging             )  CALL nudge_init
1047    IF ( ocean_mode          )  CALL ocean_init
1048    IF ( plant_canopy        )  CALL pcm_init
1049    IF ( salsa               )  CALL salsa_init
1050    IF ( urban_surface       )  CALL usm_init
1051    IF ( virtual_measurement )  CALL vm_init
1052    IF ( wind_turbine        )  CALL wtm_init
1053    IF ( radiation           )  CALL radiation_init
1054
1055    CALL doq_init
1056
1057    IF ( user_module_enabled )  CALL user_init
1058
1059    IF ( debug_output )  CALL debug_message( 'module-specific initialization', 'end' )
1060
1061
1062 END SUBROUTINE module_interface_init
1063
1064
1065!------------------------------------------------------------------------------!
1066! Description:
1067! ------------
1068!> Perform module-specific post-initialization checks
1069!------------------------------------------------------------------------------!
1070 SUBROUTINE module_interface_init_checks
1071
1072
1073    IF ( debug_output )  CALL debug_message( 'module-specific post-initialization checks', 'start' )
1074
1075    CALL dynamics_init_checks
1076
1077    IF ( biometeorology      )  CALL bio_init_checks
1078
1079    IF ( debug_output )  CALL debug_message( 'module-specific post-initialization checks', 'end' )
1080
1081
1082 END SUBROUTINE module_interface_init_checks
1083
1084
1085!------------------------------------------------------------------------------!
1086! Description:
1087! ------------
1088!> Gather module-specific header output
1089!------------------------------------------------------------------------------!
1090 SUBROUTINE module_interface_header( io )
1091
1092
1093    INTEGER(iwp), INTENT(IN) ::  io  !< unit of the output file
1094
1095
1096    IF ( debug_output )  CALL debug_message( 'module-specific header output', 'start' )
1097
1098    CALL dynamics_header( io )
1099
1100    IF ( biometeorology      )  CALL bio_header ( io )
1101    IF ( bulk_cloud_model    )  CALL bcm_header( io )
1102    IF ( air_chemistry       )  CALL chem_header ( io )
1103    IF ( virtual_flight      )  CALL flight_header( io )
1104    IF ( gust_module_enabled )  CALL gust_header( io )
1105    IF ( particle_advection  )  CALL lpm_header( io )
1106    IF ( land_surface        )  CALL lsm_header( io )
1107    IF ( large_scale_forcing )  CALL lsf_nudging_header( io )
1108    IF ( nesting_offline     )  CALL nesting_offl_header( io )
1109    IF ( ocean_mode          )  CALL ocean_header( io )
1110    IF ( plant_canopy        )  CALL pcm_header( io )
1111    IF ( radiation           )  CALL radiation_header( io )
1112    IF ( salsa               )  CALL salsa_header( io )
1113    IF ( calculate_spectra   )  CALL spectra_header( io )
1114    IF ( syn_turb_gen        )  CALL stg_header( io )
1115
1116    IF ( user_module_enabled )  CALL user_header( io )
1117
1118    IF ( debug_output )  CALL debug_message( 'module-specific header output', 'end' )
1119
1120
1121 END SUBROUTINE module_interface_header
1122
1123
1124!------------------------------------------------------------------------------!
1125! Description:
1126! ------------
1127!> Perform module-specific actions while in time-integration (vector-optimized)
1128!------------------------------------------------------------------------------!
1129 SUBROUTINE module_interface_actions( location )
1130
1131
1132    CHARACTER (LEN=*), INTENT(IN) ::  location !< call location string
1133
1134    CALL dynamics_actions( location )
1135    CALL tcm_actions( location )
1136
1137    IF ( bulk_cloud_model    )  CALL bcm_actions( location )
1138    IF ( air_chemistry       )  CALL chem_actions( location )
1139    IF ( gust_module_enabled )  CALL gust_actions( location )
1140    IF ( particle_advection  )  CALL lpm_actions( location )
1141    IF ( ocean_mode          )  CALL ocean_actions( location )
1142    IF ( salsa               )  CALL salsa_actions( location )
1143    IF ( wind_turbine        )  CALL wtm_actions( location )
1144
1145    IF ( user_module_enabled )  CALL user_actions( location )
1146    IF ( vdi_checks          )  CALL vdi_actions( location )
1147
1148
1149 END SUBROUTINE module_interface_actions
1150
1151
1152!------------------------------------------------------------------------------!
1153! Description:
1154! ------------
1155!> Perform module-specific actions while in time-integration (cache-optimized)
1156!------------------------------------------------------------------------------!
1157 SUBROUTINE module_interface_actions_ij( i, j, location )
1158
1159
1160    INTEGER(iwp),      INTENT(IN) ::  i         !< grid index in x-direction
1161    INTEGER(iwp),      INTENT(IN) ::  j         !< grid index in y-direction
1162    CHARACTER (LEN=*), INTENT(IN) ::  location  !< call location string
1163
1164    CALL dynamics_actions( i, j, location )
1165    CALL tcm_actions( i, j, location )
1166
1167    IF ( bulk_cloud_model    )  CALL bcm_actions( i, j, location )
1168    IF ( air_chemistry       )  CALL chem_actions( i, j, location )
1169    IF ( gust_module_enabled )  CALL gust_actions( i, j, location )
1170    IF ( ocean_mode          )  CALL ocean_actions( i, j, location )
1171    IF ( salsa               )  CALL salsa_actions( i, j, location )
1172    IF ( wind_turbine        )  CALL wtm_actions( i, j, location )
1173
1174    IF ( user_module_enabled )  CALL user_actions( i, j, location )
1175
1176
1177 END SUBROUTINE module_interface_actions_ij
1178
1179
1180!------------------------------------------------------------------------------!
1181! Description:
1182! ------------
1183!> Compute module-specific non_advective_processes (vector-optimized)
1184!------------------------------------------------------------------------------!
1185 SUBROUTINE module_interface_non_advective_processes
1186
1187
1188    CALL dynamics_non_advective_processes
1189
1190    IF ( bulk_cloud_model    )  CALL bcm_non_advective_processes
1191    IF ( air_chemistry       )  CALL chem_non_advective_processes
1192    IF ( salsa               )  CALL salsa_non_advective_processes
1193
1194
1195 END SUBROUTINE module_interface_non_advective_processes
1196
1197
1198!------------------------------------------------------------------------------!
1199! Description:
1200! ------------
1201!> Compute module-specific non_advective_processes (cache-optimized)
1202!------------------------------------------------------------------------------!
1203 SUBROUTINE module_interface_non_advective_processes_ij( i, j )
1204
1205
1206    INTEGER(iwp), INTENT(IN) ::  i            !< grid index in x-direction
1207    INTEGER(iwp), INTENT(IN) ::  j            !< grid index in y-direction
1208
1209    CALL dynamics_non_advective_processes( i, j )
1210
1211    IF ( bulk_cloud_model    )  CALL bcm_non_advective_processes( i, j )
1212    IF ( air_chemistry       )  CALL chem_non_advective_processes( i, j )
1213    IF ( salsa               )  CALL salsa_non_advective_processes( i, j )
1214
1215
1216 END SUBROUTINE module_interface_non_advective_processes_ij
1217
1218!------------------------------------------------------------------------------!
1219! Description:
1220! ------------
1221!> Exchange horiz for module-specific quantities
1222!------------------------------------------------------------------------------!
1223 SUBROUTINE module_interface_exchange_horiz
1224
1225
1226    IF ( debug_output_timestep )  CALL debug_message( 'module-specific exchange_horiz', 'start' )
1227
1228    CALL dynamics_exchange_horiz
1229
1230    IF ( bulk_cloud_model    )  CALL bcm_exchange_horiz
1231    IF ( air_chemistry       )  CALL chem_exchange_horiz_bounds
1232    IF ( salsa               )  CALL salsa_exchange_horiz_bounds
1233
1234    IF ( debug_output_timestep )  CALL debug_message( 'module-specific exchange_horiz', 'end' )
1235
1236
1237 END SUBROUTINE module_interface_exchange_horiz
1238
1239
1240!------------------------------------------------------------------------------!
1241! Description:
1242! ------------
1243!> Compute module-specific prognostic_equations (vector-optimized)
1244!------------------------------------------------------------------------------!
1245 SUBROUTINE module_interface_prognostic_equations
1246
1247
1248    CALL dynamics_prognostic_equations
1249    CALL tcm_prognostic_equations
1250
1251    IF ( bulk_cloud_model    )  CALL bcm_prognostic_equations
1252    IF ( air_chemistry       )  CALL chem_prognostic_equations
1253    IF ( gust_module_enabled )  CALL gust_prognostic_equations
1254    IF ( ocean_mode          )  CALL ocean_prognostic_equations
1255    IF ( salsa               )  CALL salsa_prognostic_equations
1256
1257
1258 END SUBROUTINE module_interface_prognostic_equations
1259
1260
1261!------------------------------------------------------------------------------!
1262! Description:
1263! ------------
1264!> Compute module-specific prognostic_equations (cache-optimized)
1265!------------------------------------------------------------------------------!
1266 SUBROUTINE module_interface_prognostic_equations_ij( i, j, i_omp_start, tn )
1267
1268
1269    INTEGER(iwp), INTENT(IN) ::  i            !< grid index in x-direction
1270    INTEGER(iwp), INTENT(IN) ::  j            !< grid index in y-direction
1271    INTEGER(iwp), INTENT(IN) ::  i_omp_start  !< first loop index of i-loop in prognostic_equations
1272    INTEGER(iwp), INTENT(IN) ::  tn           !< task number of openmp task
1273
1274    CALL dynamics_prognostic_equations( i, j, i_omp_start, tn )
1275    CALL tcm_prognostic_equations( i, j, i_omp_start, tn )
1276
1277    IF ( bulk_cloud_model    )  CALL bcm_prognostic_equations( i, j, i_omp_start, tn )
1278    IF ( air_chemistry       )  CALL chem_prognostic_equations( i, j, i_omp_start, tn )
1279    IF ( gust_module_enabled )  CALL gust_prognostic_equations( i, j, i_omp_start, tn )
1280    IF ( ocean_mode          )  CALL ocean_prognostic_equations( i, j, i_omp_start, tn )
1281    IF ( salsa               )  CALL salsa_prognostic_equations( i, j, i_omp_start, tn )
1282
1283
1284 END SUBROUTINE module_interface_prognostic_equations_ij
1285
1286!------------------------------------------------------------------------------!
1287! Description:
1288! ------------
1289!> Compute module-specific boundary conditions
1290!------------------------------------------------------------------------------!
1291 SUBROUTINE module_interface_boundary_conditions
1292
1293
1294    IF ( debug_output_timestep )  CALL debug_message( 'module-specific boundary_conditions', 'start' )
1295
1296    IF ( bulk_cloud_model    )  CALL bcm_boundary_conditions
1297    IF ( air_chemistry       )  CALL chem_boundary_conditions
1298    IF ( salsa               )  CALL salsa_boundary_conditions
1299
1300    IF ( debug_output_timestep )  CALL debug_message( 'module-specific boundary_conditions', 'end' )
1301
1302
1303 END SUBROUTINE module_interface_boundary_conditions
1304
1305!------------------------------------------------------------------------------!
1306! Description:
1307! ------------
1308!> Swap the timelevel pointers for module-specific arrays
1309!------------------------------------------------------------------------------!
1310 SUBROUTINE module_interface_swap_timelevel ( swap_mode )
1311
1312
1313    INTEGER(iwp), INTENT(IN) :: swap_mode !< determines procedure of pointer swap
1314
1315
1316    IF ( debug_output_timestep )  CALL debug_message( 'module-specific swap timelevel', 'start' )
1317
1318    CALL dynamics_swap_timelevel( swap_mode )
1319    CALL tcm_swap_timelevel( swap_mode )
1320
1321    IF ( bulk_cloud_model    )  CALL bcm_swap_timelevel( swap_mode )
1322    IF ( air_chemistry       )  CALL chem_swap_timelevel( swap_mode )
1323    IF ( gust_module_enabled )  CALL gust_swap_timelevel( swap_mode )
1324    IF ( land_surface        )  CALL lsm_swap_timelevel( swap_mode )
1325    IF ( ocean_mode          )  CALL ocean_swap_timelevel( swap_mode )
1326    IF ( salsa               )  CALL salsa_swap_timelevel( swap_mode )
1327    IF ( urban_surface       )  CALL usm_swap_timelevel( swap_mode )
1328
1329    IF ( debug_output_timestep )  CALL debug_message( 'module-specific swap timelevel', 'end' )
1330
1331
1332 END SUBROUTINE module_interface_swap_timelevel
1333
1334
1335!------------------------------------------------------------------------------!
1336!
1337! Description:
1338! ------------
1339!> Perform module-specific averaging of 3D data
1340!------------------------------------------------------------------------------!
1341 SUBROUTINE module_interface_3d_data_averaging( mode, variable )
1342
1343
1344    CHARACTER (LEN=*), INTENT(IN) ::  mode     !< averaging interface mode
1345    CHARACTER (LEN=*), INTENT(IN) ::  variable !< variable name
1346
1347
1348    IF ( debug_output_timestep )  CALL debug_message( 'module-specific 3d data averaging', 'start' )
1349
1350    CALL dynamics_3d_data_averaging( mode, variable )
1351    CALL tcm_3d_data_averaging( mode, variable )
1352
1353    IF ( biometeorology      )  CALL bio_3d_data_averaging( mode, variable )
1354    IF ( bulk_cloud_model    )  CALL bcm_3d_data_averaging( mode, variable )
1355    IF ( air_chemistry       )  CALL chem_3d_data_averaging( mode, variable )
1356    CALL doq_3d_data_averaging( mode, variable )  ! ToDo: this seems to be not according to the design
1357    IF ( gust_module_enabled )  CALL gust_3d_data_averaging( mode, variable )
1358    IF ( land_surface        )  CALL lsm_3d_data_averaging( mode, variable )
1359    IF ( ocean_mode          )  CALL ocean_3d_data_averaging( mode, variable )
1360    IF ( plant_canopy        )  CALL pcm_3d_data_averaging( mode, variable )
1361    IF ( radiation           )  CALL radiation_3d_data_averaging( mode, variable )
1362    IF ( salsa               )  CALL salsa_3d_data_averaging( mode, variable )
1363    IF ( urban_surface       )  CALL usm_3d_data_averaging( mode, variable )
1364
1365    IF ( user_module_enabled )  CALL user_3d_data_averaging( mode, variable )
1366
1367    IF ( debug_output_timestep )  CALL debug_message( 'module-specific 3d data averaging', 'end' )
1368
1369
1370 END SUBROUTINE module_interface_3d_data_averaging
1371
1372!------------------------------------------------------------------------------!
1373!
1374! Description:
1375! ------------
1376!> Define module-specific 2D output variables
1377!------------------------------------------------------------------------------!
1378 SUBROUTINE module_interface_data_output_2d( av, variable, found, grid, mode,  &
1379                                             local_pf, two_d, nzb_do, nzt_do,  &
1380                                             fill_value )
1381
1382    INTEGER(iwp),      INTENT(IN)    ::  av         !< flag for (non-)average output
1383    CHARACTER (LEN=*), INTENT(IN)    ::  variable   !< variable name
1384    LOGICAL,           INTENT(INOUT) ::  found      !< flag if output variable is found
1385    CHARACTER (LEN=*), INTENT(INOUT) ::  grid       !< name of vertical grid
1386    CHARACTER (LEN=*), INTENT(IN)    ::  mode       !< either 'xy', 'xz' or 'yz'
1387    LOGICAL,           INTENT(OUT)   ::  two_d      !< flag for 2D variables
1388    INTEGER(iwp),      INTENT(IN)    ::  nzb_do     !< vertical output index (bottom) (usually 0)
1389    INTEGER(iwp),      INTENT(IN)    ::  nzt_do     !< vertical output index (top) (usually nz_do3d)
1390    REAL(wp),          INTENT(IN)    ::  fill_value !< to be removed
1391
1392    REAL(wp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do), INTENT(INOUT) ::  local_pf !< ToDo: can also be kind=sp
1393
1394
1395    IF ( debug_output_timestep )  CALL debug_message( 'module-specific 2d data output', 'start' )
1396
1397    CALL dynamics_data_output_2d(                                                  &
1398               av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do, fill_value &
1399            )
1400
1401    IF ( .NOT. found )  THEN
1402       CALL tcm_data_output_2d(                                                  &
1403               av, variable, found, grid, mode, local_pf, nzb_do, nzt_do &
1404            )
1405    ENDIF
1406
1407    IF ( .NOT. found  .AND.  biometeorology )  THEN
1408       CALL bio_data_output_2d(                                                &
1409               av, variable, found, grid, local_pf, two_d, nzb_do, nzt_do      &
1410            )
1411    ENDIF
1412
1413    IF ( .NOT. found  .AND.  bulk_cloud_model )  THEN
1414       CALL bcm_data_output_2d(                                                &
1415               av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do&
1416            )
1417    ENDIF
1418
1419    IF ( .NOT. found  .AND.  air_chemistry )  THEN
1420       CALL chem_data_output_2d(                                               &
1421               av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do, fill_value &
1422            )
1423    ENDIF
1424
1425    IF ( .NOT. found )  THEN
1426       CALL doq_output_2d(                                                     &
1427               av, variable, found, grid, mode, local_pf, two_d,               &
1428               nzb_do, nzt_do, fill_value )
1429    ENDIF
1430
1431    IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
1432       CALL gust_data_output_2d(                                               &
1433               av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do, fill_value &
1434            )
1435    ENDIF
1436
1437    IF ( .NOT. found  .AND.  land_surface )  THEN
1438       CALL lsm_data_output_2d(                                                &
1439               av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do&
1440            )
1441    ENDIF
1442
1443    IF ( .NOT. found  .AND.  ocean_mode )  THEN
1444       CALL ocean_data_output_2d(                                              &
1445               av, variable, found, grid, mode, local_pf, nzb_do, nzt_do       &
1446            )
1447    ENDIF
1448
1449    IF ( .NOT. found  .AND.  radiation )  THEN
1450       CALL radiation_data_output_2d(                                          &
1451               av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do&
1452            )
1453    ENDIF
1454
1455    IF ( .NOT. found  .AND.  salsa )  THEN
1456       CALL salsa_data_output_2d(                                              &
1457               av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do&
1458            )
1459    ENDIF
1460
1461    IF ( .NOT. found  .AND.  user_module_enabled )  THEN
1462       CALL user_data_output_2d(                                               &
1463               av, variable, found, grid, local_pf, two_d, nzb_do, nzt_do      &
1464            )
1465    ENDIF
1466
1467    IF ( debug_output_timestep )  CALL debug_message( 'module-specific 2d data output', 'end' )
1468
1469
1470 END SUBROUTINE module_interface_data_output_2d
1471
1472
1473!------------------------------------------------------------------------------!
1474!
1475! Description:
1476! ------------
1477!> Define module-specific 3D output variables
1478!------------------------------------------------------------------------------!
1479 SUBROUTINE module_interface_data_output_3d( av, variable, found, local_pf,    &
1480                                             fill_value, resorted, nzb_do, nzt_do )
1481
1482
1483    INTEGER(iwp),      INTENT(IN)    ::  av         !< flag for (non-)average output
1484    CHARACTER (LEN=*), INTENT(IN)    ::  variable   !< variable name
1485    LOGICAL,           INTENT(INOUT) ::  found      !< flag if output variable is found
1486    REAL(wp),          INTENT(IN)    ::  fill_value !< ToDo: refactor
1487    LOGICAL,           INTENT(OUT)   ::  resorted   !< flag if output has been resorted
1488    INTEGER(iwp),      INTENT(IN)    ::  nzb_do     !< vertical output index (bottom) (usually 0)
1489    INTEGER(iwp),      INTENT(IN)    ::  nzt_do     !< vertical output index (top) (usually nz_do3d)
1490
1491    REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do), INTENT(INOUT) ::  local_pf
1492
1493
1494    IF ( debug_output_timestep )  CALL debug_message( 'module-specific 3d data output', 'start' )
1495
1496    CALL dynamics_data_output_3d( av, variable, found, local_pf, fill_value, nzb_do, nzt_do )
1497    resorted = .FALSE.
1498
1499    IF ( .NOT. found )  THEN
1500       CALL tcm_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
1501       resorted = .TRUE.
1502    ENDIF
1503
1504    IF ( .NOT. found  .AND.  biometeorology )  THEN
1505       CALL bio_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
1506       resorted = .FALSE.
1507    ENDIF
1508
1509    IF ( .NOT. found  .AND.  bulk_cloud_model )  THEN
1510       CALL bcm_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
1511       resorted = .TRUE.
1512    ENDIF
1513
1514    IF ( .NOT. found  .AND.  air_chemistry )  THEN
1515       CALL chem_data_output_3d( av, variable, found, local_pf, fill_value, nzb_do, nzt_do )
1516       resorted = .TRUE.
1517    ENDIF
1518
1519    IF ( .NOT. found )  THEN
1520       CALL doq_output_3d( av, variable, found, local_pf, fill_value, nzb_do, nzt_do )
1521       resorted = .TRUE.
1522    ENDIF
1523
1524    IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
1525       CALL gust_data_output_3d( av, variable, found, local_pf, fill_value, nzb_do, nzt_do )
1526       resorted = .TRUE.
1527    ENDIF
1528
1529    IF ( .NOT. found  .AND.  indoor_model )  THEN
1530       CALL im_data_output_3d( av, variable, found, local_pf, fill_value, nzb_do, nzt_do )
1531       resorted = .TRUE.
1532    ENDIF
1533
1534    IF ( .NOT. found  .AND.  ocean_mode )  THEN
1535       CALL ocean_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
1536       resorted = .TRUE.
1537    ENDIF
1538
1539    IF ( .NOT. found  .AND.  plant_canopy )  THEN
1540       CALL pcm_data_output_3d( av, variable, found, local_pf, fill_value, nzb_do, nzt_do )
1541       resorted = .TRUE.
1542    ENDIF
1543
1544    IF ( .NOT. found  .AND.  radiation )  THEN
1545       CALL radiation_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
1546       resorted = .TRUE.
1547    ENDIF
1548
1549    IF ( .NOT. found  .AND.  salsa )  THEN
1550       CALL salsa_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
1551       resorted = .TRUE.
1552    ENDIF
1553
1554    IF ( .NOT. found  .AND.  user_module_enabled )  THEN
1555       CALL user_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
1556       resorted = .TRUE.
1557    ENDIF
1558
1559    IF ( debug_output_timestep )  CALL debug_message( 'module-specific 3d data output', 'end' )
1560
1561
1562 END SUBROUTINE module_interface_data_output_3d
1563
1564
1565!------------------------------------------------------------------------------!
1566! Description:
1567! ------------
1568!> Compute module-specific profile and timeseries data
1569!------------------------------------------------------------------------------!
1570 SUBROUTINE module_interface_statistics( mode, sr, tn, dots_max )
1571
1572
1573    CHARACTER (LEN=*), INTENT(IN) ::  mode     !< statistical analysis mode
1574    INTEGER(iwp),      INTENT(IN) ::  sr       !<
1575    INTEGER(iwp),      INTENT(IN) ::  tn       !<
1576    INTEGER(iwp),      INTENT(IN) ::  dots_max !< maximum number of timeseries
1577
1578
1579    IF ( debug_output_timestep )  CALL debug_message( 'module-specific statistics', 'start' )
1580
1581    CALL dynamics_statistics( mode, sr, tn )
1582
1583    IF ( gust_module_enabled )  CALL gust_statistics( mode, sr, tn, dots_max )
1584    IF ( air_chemistry       )  CALL chem_statistics( mode, sr, tn )
1585    IF ( salsa               )  CALL salsa_statistics( mode, sr, tn )
1586
1587    IF ( user_module_enabled )  CALL user_statistics( mode, sr, tn )
1588
1589    IF ( debug_output_timestep )  CALL debug_message( 'module-specific statistics', 'end' )
1590
1591
1592 END SUBROUTINE module_interface_statistics
1593
1594
1595!------------------------------------------------------------------------------!
1596! Description:
1597! ------------
1598!> Read module-specific restart data globaly shared by all MPI ranks
1599!------------------------------------------------------------------------------!
1600 SUBROUTINE module_interface_rrd_global( found )
1601
1602
1603    LOGICAL, INTENT(INOUT) ::  found    !< flag if variable was found
1604
1605
1606    IF ( debug_output )  CALL debug_message( 'module-specific read global restart data', 'start' )
1607
1608    CALL dynamics_rrd_global( found ) ! ToDo: change interface to pass variable
1609
1610    IF ( .NOT. found )  CALL bio_rrd_global( found ) ! ToDo: change interface to pass variable
1611    IF ( .NOT. found )  CALL bcm_rrd_global( found ) ! ToDo: change interface to pass variable
1612    IF ( .NOT. found )  CALL flight_rrd_global( found ) ! ToDo: change interface to pass variable
1613    IF ( .NOT. found )  CALL gust_rrd_global( found ) ! ToDo: change interface to pass variable
1614    IF ( .NOT. found )  CALL lpm_rrd_global( found ) ! ToDo: change interface to pass variable
1615    IF ( .NOT. found )  CALL ocean_rrd_global( found ) ! ToDo: change interface to pass variable
1616    IF ( .NOT. found )  CALL stg_rrd_global ( found ) ! ToDo: change interface to pass variable
1617    IF ( .NOT. found )  CALL wtm_rrd_global( found ) ! ToDo: change interface to pass variable
1618    IF ( .NOT. found )  CALL surface_data_output_rrd_global( found )
1619
1620    IF ( .NOT. found )  CALL user_rrd_global( found ) ! ToDo: change interface to pass variable
1621
1622    IF ( debug_output )  CALL debug_message( 'module-specific read global restart data', 'end' )
1623
1624
1625 END SUBROUTINE module_interface_rrd_global
1626
1627
1628!------------------------------------------------------------------------------!
1629! Description:
1630! ------------
1631!> Write module-specific restart data globaly shared by all MPI ranks
1632!------------------------------------------------------------------------------!
1633 SUBROUTINE module_interface_wrd_global
1634
1635
1636    IF ( debug_output )  CALL debug_message( 'module-specific write global restart data', 'start' )
1637
1638    CALL dynamics_wrd_global
1639
1640    IF ( biometeorology )       CALL bio_wrd_global
1641    IF ( bulk_cloud_model )     CALL bcm_wrd_global
1642    IF ( virtual_flight )       CALL flight_wrd_global
1643    IF ( gust_module_enabled )  CALL gust_wrd_global
1644    IF ( ocean_mode )           CALL ocean_wrd_global
1645    IF ( syn_turb_gen )         CALL stg_wrd_global
1646    IF ( wind_turbine )         CALL wtm_wrd_global
1647    IF ( surface_output )       CALL surface_data_output_wrd_global
1648
1649    IF ( user_module_enabled )  CALL user_wrd_global
1650
1651    IF ( debug_output )  CALL debug_message( 'module-specific write global restart data', 'end' )
1652
1653
1654 END SUBROUTINE module_interface_wrd_global
1655
1656
1657!------------------------------------------------------------------------------!
1658! Description:
1659! ------------
1660!> Read module-specific restart data specific to local MPI ranks
1661!------------------------------------------------------------------------------!
1662 SUBROUTINE module_interface_rrd_local( map_index,                             &
1663                                        nxlf, nxlc, nxl_on_file,               &
1664                                        nxrf, nxrc, nxr_on_file,               &
1665                                        nynf, nync, nyn_on_file,               &
1666                                        nysf, nysc, nys_on_file,               &
1667                                        tmp_2d, tmp_3d, found )
1668
1669
1670    INTEGER(iwp), INTENT(IN)  ::  map_index    !<
1671    INTEGER(iwp), INTENT(IN)  ::  nxlc         !<
1672    INTEGER(iwp), INTENT(IN)  ::  nxlf         !<
1673    INTEGER(iwp), INTENT(IN)  ::  nxl_on_file  !<
1674    INTEGER(iwp), INTENT(IN)  ::  nxrc         !<
1675    INTEGER(iwp), INTENT(IN)  ::  nxrf         !<
1676    INTEGER(iwp), INTENT(IN)  ::  nxr_on_file  !<
1677    INTEGER(iwp), INTENT(IN)  ::  nync         !<
1678    INTEGER(iwp), INTENT(IN)  ::  nynf         !<
1679    INTEGER(iwp), INTENT(IN)  ::  nyn_on_file  !<
1680    INTEGER(iwp), INTENT(IN)  ::  nysc         !<
1681    INTEGER(iwp), INTENT(IN)  ::  nysf         !<
1682    INTEGER(iwp), INTENT(IN)  ::  nys_on_file  !<
1683    LOGICAL,      INTENT(INOUT) ::  found        !< flag if variable was found
1684
1685    REAL(wp), &
1686       DIMENSION(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp), &
1687       INTENT(OUT) :: tmp_2d   !<
1688    REAL(wp), &
1689       DIMENSION(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp), &
1690       INTENT(OUT) :: tmp_3d   !<
1691
1692
1693    IF ( debug_output )  CALL debug_message( 'module-specific read local restart data', 'start' )
1694
1695    CALL dynamics_rrd_local(                                                   &
1696           map_index,                                                          &
1697           nxlf, nxlc, nxl_on_file,                                            &
1698           nxrf, nxrc, nxr_on_file,                                            &
1699           nynf, nync, nyn_on_file,                                            &
1700           nysf, nysc, nys_on_file,                                            &
1701           tmp_2d, tmp_3d, found                                               &
1702        ) ! ToDo: change interface to pass variable
1703
1704    IF ( .NOT. found )  CALL bio_rrd_local(                                    &
1705                               found                                           &
1706                            )
1707
1708    IF ( .NOT. found )  CALL bcm_rrd_local(                                    &
1709                               map_index,                                      &
1710                               nxlf, nxlc, nxl_on_file,                        &
1711                               nxrf, nxrc, nxr_on_file,                        &
1712                               nynf, nync, nyn_on_file,                        &
1713                               nysf, nysc, nys_on_file,                        &
1714                               tmp_2d, tmp_3d, found                           &
1715                            ) ! ToDo: change interface to pass variable
1716
1717    IF ( .NOT. found )  CALL chem_rrd_local(                                   &
1718                               map_index,                                      &
1719                               nxlf, nxlc, nxl_on_file,                        &
1720                               nxrf, nxrc, nxr_on_file,                        &
1721                               nynf, nync, nyn_on_file,                        &
1722                               nysf, nysc, nys_on_file,                        &
1723                               tmp_3d, found                                   &
1724                            ) ! ToDo: change interface to pass variable
1725
1726!     IF ( .NOT. found )  CALL doq_rrd_local(                                    &
1727!                                map_index,                                      &
1728!                                nxlf, nxlc, nxl_on_file,                        &
1729!                                nxrf, nxrc, nxr_on_file,                        &
1730!                                nynf, nync, nyn_on_file,                        &
1731!                                nysf, nysc, nys_on_file,                        &
1732!                                tmp_3d_non_standard, found                      &
1733!                             ) ! ToDo: change interface to pass variable CALL doq_wrd_local
1734
1735    IF ( .NOT. found )  CALL gust_rrd_local(                                   &
1736                               map_index,                                      &
1737                               nxlf, nxlc, nxl_on_file,                        &
1738                               nxrf, nxrc, nxr_on_file,                        &
1739                               nynf, nync, nyn_on_file,                        &
1740                               nysf, nysc, nys_on_file,                        &
1741                               tmp_2d, tmp_3d, found                           &
1742                            ) ! ToDo: change interface to pass variable
1743
1744    IF ( .NOT. found )  CALL lpm_rrd_local(                                    &
1745                               map_index,                                      &
1746                               nxlf, nxlc, nxl_on_file,                        &
1747                               nxrf, nxrc, nxr_on_file,                        &
1748                               nynf, nync, nyn_on_file,                        &
1749                               nysf, nysc, nys_on_file,                        &
1750                               tmp_3d, found                                   &
1751                            ) ! ToDo: change interface to pass variable
1752
1753    IF ( .NOT. found )  CALL lsm_rrd_local(                                    &
1754                               map_index,                                      &
1755                               nxlf, nxlc, nxl_on_file,                        &
1756                               nxrf, nxrc, nxr_on_file,                        &
1757                               nynf, nync, nyn_on_file,                        &
1758                               nysf, nysc, nys_on_file,                        &
1759                               tmp_2d, found                                   &
1760                            ) ! ToDo: change interface to pass variable
1761
1762    IF ( .NOT. found )  CALL ocean_rrd_local(                                  &
1763                               map_index,                                      &
1764                               nxlf, nxlc, nxl_on_file,                        &
1765                               nxrf, nxrc, nxr_on_file,                        &
1766                               nynf, nync, nyn_on_file,                        &
1767                               nysf, nysc, nys_on_file,                        &
1768                               tmp_3d, found                                   &
1769                            ) ! ToDo: change interface to pass variable
1770
1771    IF ( .NOT. found )  CALL radiation_rrd_local(                              &
1772                               map_index,                                      &
1773                               nxlf, nxlc, nxl_on_file,                        &
1774                               nxrf, nxrc, nxr_on_file,                        &
1775                               nynf, nync, nyn_on_file,                        &
1776                               nysf, nysc, nys_on_file,                        &
1777                               tmp_2d, tmp_3d, found                           &
1778                            ) ! ToDo: change interface to pass variable
1779
1780    IF ( .NOT. found )  CALL salsa_rrd_local(                                  &
1781                               map_index,                                      &
1782                               nxlf, nxlc, nxl_on_file,                        &
1783                               nxrf, nxrc, nxr_on_file,                        &
1784                               nynf, nync, nyn_on_file,                        &
1785                               nysf, nysc, nys_on_file,                        &
1786                               tmp_3d, found                                   &
1787                            ) ! ToDo: change interface to pass variable
1788
1789    IF ( .NOT. found )  CALL usm_rrd_local(                                    &
1790                               map_index,                                      &
1791                               nxlf, nxlc, nxl_on_file,                        &
1792                               nxrf, nxr_on_file,                              &
1793                               nynf, nyn_on_file,                              &
1794                               nysf, nysc, nys_on_file,                        &
1795                               found                                           &
1796                            ) ! ToDo: change interface to pass variable
1797!
1798!-- Surface data do not need overlap data, so do not pass these information.
1799    IF ( .NOT. found )  CALL surface_data_output_rrd_local( found )
1800
1801    IF ( .NOT. found )  CALL user_rrd_local(                                   &
1802                               map_index,                                      &
1803                               nxlf, nxlc, nxl_on_file,                        &
1804                               nxrf, nxrc, nxr_on_file,                        &
1805                               nynf, nync, nyn_on_file,                        &
1806                               nysf, nysc, nys_on_file,                        &
1807                               tmp_3d, found                                   &
1808                            ) ! ToDo: change interface to pass variable
1809
1810    IF ( debug_output )  CALL debug_message( 'module-specific read local restart data', 'end' )
1811
1812
1813 END SUBROUTINE module_interface_rrd_local
1814
1815
1816!------------------------------------------------------------------------------!
1817! Description:
1818! ------------
1819!> Write module-specific restart data specific to local MPI ranks
1820!------------------------------------------------------------------------------!
1821 SUBROUTINE module_interface_wrd_local
1822
1823
1824    IF ( debug_output )  CALL debug_message( 'module-specific write local restart data', 'start' )
1825
1826    CALL dynamics_wrd_local
1827
1828    IF ( biometeorology )       CALL bio_wrd_local
1829    IF ( bulk_cloud_model )     CALL bcm_wrd_local
1830    IF ( air_chemistry )        CALL chem_wrd_local
1831    CALL doq_wrd_local
1832    IF ( gust_module_enabled )  CALL gust_wrd_local
1833    IF ( particle_advection )   CALL lpm_wrd_local
1834    IF ( land_surface )         CALL lsm_wrd_local
1835    IF ( ocean_mode )           CALL ocean_wrd_local
1836    IF ( radiation )            CALL radiation_wrd_local
1837    IF ( salsa )                CALL salsa_wrd_local
1838    IF ( urban_surface )        CALL usm_wrd_local
1839    IF ( surface_output )       CALL surface_data_output_wrd_local
1840
1841    IF ( user_module_enabled )  CALL user_wrd_local
1842
1843    IF ( debug_output )  CALL debug_message( 'module-specific write local restart data', 'end' )
1844
1845
1846 END SUBROUTINE module_interface_wrd_local
1847
1848
1849!------------------------------------------------------------------------------!
1850! Description:
1851! ------------
1852!> Perform module-specific last actions before the program terminates
1853!------------------------------------------------------------------------------!
1854 SUBROUTINE module_interface_last_actions
1855
1856
1857    IF ( debug_output )  CALL debug_message( 'module-specific last actions', 'start' )
1858
1859    CALL dynamics_last_actions
1860
1861    IF ( virtual_measurement )  CALL vm_last_actions
1862
1863    IF ( user_module_enabled )  CALL user_last_actions
1864
1865    IF ( debug_output )  CALL debug_message( 'module-specific last actions', 'end' )
1866
1867
1868 END SUBROUTINE module_interface_last_actions
1869
1870
1871 END MODULE module_interface
Note: See TracBrowser for help on using the repository browser.