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

Last change on this file since 3687 was 3687, checked in by knoop, 2 years ago

Moved all user routunes that are dependencies of the PALM core only, to user_module.f90
The files that formerly contained these routines, have been deleted.
Also module_interface routines for init_mask and last_actions have been added.

  • Property svn:keywords set to Id
File size: 55.6 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 3687 2019-01-22 10:42:06Z knoop $
27! Some interface calls moved to module_interface + cleanup
28!
29! 3684 2019-01-20 20:20:58Z knoop
30! Bugfix: made unit intend INOUT
31!
32! 3650 2019-01-04 13:01:33Z kanani
33! Add restart routines for biometeorology
34!
35! 3649 2019-01-02 16:52:21Z suehring
36! Initialize strings, in order to avoid compiler warnings for non-initialized
37! characters with intent(out) attribute
38!
39! 3648 2019-01-02 16:35:46Z suehring
40! Rename subroutines for surface-data output
41!
42! 3641 2018-12-23 22:10:01Z knoop
43! Initial implementation of the PALM module interface
44!
45!
46! Description:
47! ------------
48!> This is the interface between the PALM model core and all its modules.
49!>
50!------------------------------------------------------------------------------!
51MODULE module_interface
52
53   USE indices,                                                                &
54       ONLY:  nbgp, nxl, nxlg, nxr, nxrg, nys, nysg, nyn, nyng, nzb, nzt
55
56   USE kinds
57
58!- load module-specific control parameters.
59!- ToDo: move all of them to respective module or a dedicated central module
60
61   USE control_parameters,                                                     &
62       ONLY:  biometeorology,                                                  &
63              air_chemistry,                                                   &
64              indoor_model,                                                    &
65              land_surface,                                                    &
66              large_scale_forcing,                                             &
67              nesting_offline,                                                 &
68              nudging,                                                         &
69              ocean_mode,                                                      &
70              plant_canopy,                                                    &
71              salsa,                                                           &
72              surface_output,                                                  &
73              syn_turb_gen,                                                    &
74              urban_surface,                                                   &
75              virtual_flight,                                                  &
76              virtual_measurement,                                             &
77              wind_turbine
78
79!- load interface routines of all PALM modules
80
81   USE biometeorology_mod,                                                     &
82       ONLY:  bio_parin,                                                       &
83              bio_check_parameters,                                            &
84              bio_check_data_output,                                           &
85              bio_init,                                                        &
86              bio_header,                                                      &
87              bio_3d_data_averaging,                                           &
88              bio_data_output_2d,                                              &
89              bio_data_output_3d,                                              &
90              bio_rrd_global,                                                  &
91              bio_rrd_local,                                                   &
92              bio_wrd_global,                                                  &
93              bio_wrd_local
94
95   USE bulk_cloud_model_mod,                                                   &
96       ONLY:  bulk_cloud_model,                                                &
97              bcm_parin,                                                       &
98              bcm_check_parameters,                                            &
99              bcm_check_data_output_pr,                                        &
100              bcm_check_data_output,                                           &
101              bcm_init_arrays,                                                 &
102              bcm_init,                                                        &
103              bcm_header,                                                      &
104              bcm_swap_timelevel,                                              &
105              bcm_3d_data_averaging,                                           &
106              bcm_data_output_2d,                                              &
107              bcm_data_output_3d,                                              &
108              bcm_rrd_global,                                                  &
109              bcm_wrd_global,                                                  &
110              bcm_rrd_local,                                                   &
111              bcm_wrd_local
112
113   USE chemistry_model_mod,                                                    &
114       ONLY:  chem_parin,                                                      &
115              chem_check_parameters,                                           &
116              chem_check_data_output_pr,                                       &
117              chem_check_data_output,                                          &
118              chem_init_arrays,                                                &
119              chem_init,                                                       &
120              chem_header,                                                     &
121              chem_swap_timelevel,                                             &
122              chem_3d_data_averaging,                                          &
123              chem_data_output_2d,                                             &
124              chem_data_output_3d,                                             &
125              chem_statistics,                                                 &
126              chem_rrd_local,                                                  &
127              chem_wrd_local
128
129   USE flight_mod,                                                             &
130       ONLY:  flight_parin,                                                    &
131              flight_header,                                                   &
132              flight_init,                                                     &
133              flight_rrd_global,                                               &
134              flight_wrd_global
135
136   USE gust_mod,                                                               &
137       ONLY:  gust_module_enabled,                                             &
138              gust_parin,                                                      &
139              gust_check_parameters,                                           &
140              gust_check_data_output_pr,                                       &
141              gust_check_data_output,                                          &
142              gust_init_arrays,                                                &
143              gust_init,                                                       &
144              gust_header,                                                     &
145              gust_actions,                                                    &
146              gust_swap_timelevel,                                             &
147              gust_3d_data_averaging,                                          &
148              gust_data_output_2d,                                             &
149              gust_data_output_3d,                                             &
150              gust_statistics,                                                 &
151              gust_rrd_global,                                                 &
152              gust_wrd_global,                                                 &
153              gust_rrd_local,                                                  &
154              gust_wrd_local
155
156   USE indoor_model_mod,                                                       &
157       ONLY:  im_parin,                                                        &
158              im_init
159
160   USE land_surface_model_mod,                                                 &
161       ONLY:  lsm_parin,                                                       &
162              lsm_check_parameters,                                            &
163              lsm_check_data_output_pr,                                        &
164              lsm_check_data_output,                                           &
165              lsm_init_arrays,                                                 &
166              lsm_init,                                                        &
167              lsm_header,                                                      &
168              lsm_swap_timelevel,                                              &
169              lsm_3d_data_averaging,                                           &
170              lsm_data_output_2d,                                              &
171              lsm_rrd_local,                                                   &
172              lsm_wrd_local
173
174   USE lsf_nudging_mod,                                                        &
175       ONLY:  lsf_nudging_check_parameters,                                    &
176              lsf_nudging_check_data_output_pr,                                &
177              lsf_init,                                                        &
178              nudge_init,                                                      &
179              lsf_nudging_header
180
181   USE multi_agent_system_mod,                                                 &
182       ONLY:  mas_parin
183
184   USE nesting_offl_mod,                                                       &
185       ONLY:  nesting_offl_parin,                                              &
186              nesting_offl_check_parameters,                                   &
187              nesting_offl_header
188
189   USE ocean_mod,                                                              &
190       ONLY:  ocean_parin,                                                     &
191              ocean_check_parameters,                                          &
192              ocean_check_data_output_pr,                                      &
193              ocean_check_data_output,                                         &
194              ocean_init_arrays,                                               &
195              ocean_init,                                                      &
196              ocean_header,                                                    &
197              ocean_swap_timelevel,                                            &
198              ocean_3d_data_averaging,                                         &
199              ocean_data_output_2d,                                            &
200              ocean_data_output_3d,                                            &
201              ocean_rrd_global,                                                &
202              ocean_wrd_global,                                                &
203              ocean_rrd_local,                                                 &
204              ocean_wrd_local
205
206   USE plant_canopy_model_mod,                                                 &
207        ONLY: pcm_parin,                                                       &
208              pcm_check_parameters,                                            &
209              pcm_check_data_output,                                           &
210              pcm_init,                                                        &
211              pcm_header,                                                      &
212              pcm_data_output_3d
213
214   USE radiation_model_mod,                                                    &
215       ONLY:  radiation,                                                       &
216              radiation_parin,                                                 &
217              radiation_check_parameters,                                      &
218              radiation_check_data_output_pr,                                  &
219              radiation_check_data_output,                                     &
220              radiation_init,                                                  &
221              radiation_header,                                                &
222              radiation_3d_data_averaging,                                     &
223              radiation_data_output_2d,                                        &
224              radiation_data_output_3d,                                        &
225              radiation_rrd_local,                                             &
226              radiation_wrd_local
227
228   USE salsa_mod,                                                              &
229       ONLY:  salsa_parin,                                                     &
230              salsa_check_parameters,                                          &
231              salsa_check_data_output,                                         &
232              salsa_init_arrays,                                               &
233              salsa_init,                                                      &
234              salsa_header,                                                    &
235              salsa_swap_timelevel,                                            &
236              salsa_3d_data_averaging,                                         &
237              salsa_data_output_2d,                                            &
238              salsa_data_output_3d,                                            &
239              salsa_rrd_local,                                                 &
240              salsa_wrd_local
241
242   USE spectra_mod,                                                            &
243       ONLY:  calculate_spectra,                                               &
244              spectra_parin,                                                   &
245              spectra_check_parameters,                                        &
246              spectra_header
247
248   USE surface_data_output_mod,                                                &
249       ONLY:  surface_data_output_parin,                                       &
250              surface_data_output_check_parameters
251
252   USE synthetic_turbulence_generator_mod,                                     &
253       ONLY:  stg_parin,                                                       &
254              stg_check_parameters,                                            &
255              stg_header,                                                      &
256              stg_rrd_global,                                                  &
257              stg_wrd_global
258
259   USE urban_surface_mod,                                                      &
260       ONLY:  usm_parin,                                                       &
261              usm_check_parameters,                                            &
262              usm_check_data_output,                                           &
263              usm_init_arrays,                                                 &
264              usm_init,                                                        &
265              usm_swap_timelevel,                                              &
266              usm_3d_data_averaging,                                           &
267              usm_rrd_local,                                                   &
268              usm_wrd_local
269
270   USE user,                                                                   &
271       ONLY:  user_parin,                                                      &
272              user_check_parameters,                                           &
273              user_check_data_output_pr,                                       &
274              user_check_data_output,                                          &
275              user_init,                                                       &
276              user_header,                                                     &
277              user_actions,                                                    &
278              user_3d_data_averaging,                                          &
279              user_data_output_2d,                                             &
280              user_data_output_3d,                                             &
281              user_statistics,                                                 &
282              user_rrd_global,                                                 &
283              user_rrd_local,                                                  &
284              user_wrd_global,                                                 &
285              user_wrd_local,                                                  &
286              user_last_actions
287
288   USE virtual_measurement_mod,                                                &
289       ONLY:  vm_parin,                                                        &
290              vm_init
291
292   USE wind_turbine_model_mod,                                                 &
293       ONLY:  wtm_parin,                                                       &
294              wtm_check_parameters,                                            &
295              wtm_init_arrays,                                                 &
296              wtm_init,                                                        &
297              wtm_rrd_global,                                                  &
298              wtm_wrd_global
299
300   IMPLICIT NONE
301
302   PRIVATE
303
304!
305!- Public functions
306   PUBLIC                                                                      &
307      module_interface_parin,                                                  &
308      module_interface_check_parameters,                                       &
309      module_interface_check_data_output_pr,                                   &
310      module_interface_check_data_output,                                      &
311      module_interface_init_masks,                                             &
312      module_interface_define_netcdf_grid,                                     &
313      module_interface_init_arrays,                                            &
314      module_interface_init,                                                   &
315      module_interface_header,                                                 &
316      module_interface_actions,                                                &
317      module_interface_swap_timelevel,                                         &
318      module_interface_3d_data_averaging,                                      &
319      module_interface_data_output_2d,                                         &
320      module_interface_data_output_3d,                                         &
321      module_interface_statistics,                                             &
322      module_interface_rrd_global,                                             &
323      module_interface_wrd_global,                                             &
324      module_interface_rrd_local,                                              &
325      module_interface_wrd_local,                                              &
326      module_interface_last_actions
327
328
329   INTERFACE module_interface_parin
330      MODULE PROCEDURE module_interface_parin
331   END INTERFACE module_interface_parin
332
333   INTERFACE module_interface_check_parameters
334      MODULE PROCEDURE module_interface_check_parameters
335   END INTERFACE module_interface_check_parameters
336
337   INTERFACE module_interface_check_data_output_pr
338      MODULE PROCEDURE module_interface_check_data_output_pr
339   END INTERFACE module_interface_check_data_output_pr
340
341   INTERFACE module_interface_check_data_output
342      MODULE PROCEDURE module_interface_check_data_output
343   END INTERFACE module_interface_check_data_output
344
345   INTERFACE module_interface_init_masks
346      MODULE PROCEDURE module_interface_init_masks
347   END INTERFACE module_interface_init_masks
348
349   INTERFACE module_interface_define_netcdf_grid
350      MODULE PROCEDURE module_interface_define_netcdf_grid
351   END INTERFACE module_interface_define_netcdf_grid
352
353   INTERFACE module_interface_init_arrays
354      MODULE PROCEDURE module_interface_init_arrays
355   END INTERFACE module_interface_init_arrays
356
357   INTERFACE module_interface_init
358      MODULE PROCEDURE module_interface_init
359   END INTERFACE module_interface_init
360
361   INTERFACE module_interface_header
362      MODULE PROCEDURE module_interface_header
363   END INTERFACE module_interface_header
364
365   INTERFACE module_interface_actions
366      MODULE PROCEDURE module_interface_actions
367      MODULE PROCEDURE module_interface_actions_ij
368   END INTERFACE module_interface_actions
369
370   INTERFACE module_interface_swap_timelevel
371      MODULE PROCEDURE module_interface_swap_timelevel
372   END INTERFACE module_interface_swap_timelevel
373
374   INTERFACE module_interface_3d_data_averaging
375      MODULE PROCEDURE module_interface_3d_data_averaging
376   END INTERFACE module_interface_3d_data_averaging
377
378   INTERFACE module_interface_data_output_2d
379      MODULE PROCEDURE module_interface_data_output_2d
380   END INTERFACE module_interface_data_output_2d
381
382   INTERFACE module_interface_data_output_3d
383      MODULE PROCEDURE module_interface_data_output_3d
384   END INTERFACE module_interface_data_output_3d
385
386   INTERFACE module_interface_statistics
387      MODULE PROCEDURE module_interface_statistics
388   END INTERFACE module_interface_statistics
389
390   INTERFACE module_interface_rrd_global
391      MODULE PROCEDURE module_interface_rrd_global
392   END INTERFACE module_interface_rrd_global
393
394   INTERFACE module_interface_wrd_global
395      MODULE PROCEDURE module_interface_wrd_global
396   END INTERFACE module_interface_wrd_global
397
398   INTERFACE module_interface_rrd_local
399      MODULE PROCEDURE module_interface_rrd_local
400   END INTERFACE module_interface_rrd_local
401
402   INTERFACE module_interface_wrd_local
403      MODULE PROCEDURE module_interface_wrd_local
404   END INTERFACE module_interface_wrd_local
405
406   INTERFACE module_interface_last_actions
407      MODULE PROCEDURE module_interface_last_actions
408   END INTERFACE module_interface_last_actions
409
410
411CONTAINS
412
413
414!------------------------------------------------------------------------------!
415! Description:
416! ------------
417!> Read module-specific parameter namelists
418!------------------------------------------------------------------------------!
419SUBROUTINE module_interface_parin
420
421
422   CALL bio_parin
423   CALL bcm_parin
424   CALL chem_parin
425   CALL flight_parin ! ToDo: rename module to match filename
426   CALL gust_parin
427   CALL im_parin
428   CALL lsm_parin
429   ! ToDo: create parin routine for large_scale_forcing and nudging (should be seperate modules or new module switch)
430   CALL mas_parin
431   CALL nesting_offl_parin
432   CALL ocean_parin
433   CALL pcm_parin
434   CALL radiation_parin
435   CALL salsa_parin
436   CALL spectra_parin
437   CALL surface_data_output_parin
438   CALL stg_parin
439   CALL user_parin ! ToDo: make user code a single Fortran module
440   CALL usm_parin
441   CALL vm_parin
442   CALL wtm_parin
443
444   CALL package_parin ! ToDo: deprecated, needs to be dissolved
445
446
447END SUBROUTINE module_interface_parin
448
449
450!------------------------------------------------------------------------------!
451! Description:
452! ------------
453!> Perform module-specific initialization checks
454!------------------------------------------------------------------------------!
455SUBROUTINE module_interface_check_parameters
456
457
458   IF ( biometeorology )       CALL bio_check_parameters
459   IF ( bulk_cloud_model )     CALL bcm_check_parameters
460   IF ( air_chemistry )        CALL chem_check_parameters
461   IF ( gust_module_enabled )  CALL gust_check_parameters
462   IF ( land_surface )         CALL lsm_check_parameters
463   IF ( large_scale_forcing  .OR.  nudging )  CALL lsf_nudging_check_parameters ! ToDo: create single module switch
464   IF ( nesting_offline )      CALL nesting_offl_check_parameters
465   IF ( ocean_mode )           CALL ocean_check_parameters
466   IF ( plant_canopy )         CALL pcm_check_parameters
467   IF ( radiation )            CALL radiation_check_parameters
468   IF ( salsa )                CALL salsa_check_parameters
469   IF ( calculate_spectra )    CALL spectra_check_parameters
470   IF ( surface_output )       CALL surface_data_output_check_parameters
471   IF ( syn_turb_gen )         CALL stg_check_parameters
472   IF ( urban_surface )        CALL usm_check_parameters
473   IF ( wind_turbine )         CALL wtm_check_parameters
474                               CALL user_check_parameters
475
476
477END SUBROUTINE module_interface_check_parameters
478
479
480!------------------------------------------------------------------------------!
481! Description:
482! ------------
483!> Check module-specific data output of profiles
484!------------------------------------------------------------------------------!
485SUBROUTINE module_interface_check_data_output_pr( variable, var_count, unit,   &
486                                                dopr_unit )
487
488
489   CHARACTER (LEN=*), INTENT(IN)    ::  variable  !< variable name
490   INTEGER(iwp),      INTENT(IN)    ::  var_count !< variable output array index
491   CHARACTER (LEN=*), INTENT(INOUT) ::  unit      !< physical unit of variable
492   CHARACTER (LEN=*), INTENT(OUT)   ::  dopr_unit !< local value of dopr_unit
493
494   IF ( unit == 'illegal' .AND.  bulk_cloud_model )  THEN
495      CALL bcm_check_data_output_pr( variable, var_count, unit, dopr_unit )
496   ENDIF
497
498   IF ( unit == 'illegal' .AND.  air_chemistry )  THEN
499      CALL chem_check_data_output_pr( variable, var_count, unit, dopr_unit )
500   ENDIF
501
502   IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
503      CALL gust_check_data_output_pr( variable, var_count, unit, dopr_unit )
504   ENDIF
505
506   IF ( unit == 'illegal' )  THEN ! ToDo: add module switch if possible
507      CALL lsm_check_data_output_pr( variable, var_count, unit, dopr_unit )
508   ENDIF
509
510   IF ( unit == 'illegal' )  THEN ! ToDo: add module switch if possible
511      CALL lsf_nudging_check_data_output_pr( variable, var_count, unit, dopr_unit )
512   ENDIF
513
514   IF ( unit == 'illegal'  .AND.  ocean_mode )  THEN
515      CALL ocean_check_data_output_pr( variable, var_count, unit, dopr_unit )
516   ENDIF
517
518   IF ( unit == 'illegal'  .AND.  radiation )  THEN
519      CALL radiation_check_data_output_pr( variable, var_count, unit, dopr_unit )
520   ENDIF
521
522   IF ( unit == 'illegal' )  THEN
523      unit = '' ! ToDo: Seems like a hack. Find a general soultion!
524      CALL user_check_data_output_pr( variable, var_count, unit )
525   ENDIF
526
527
528
529END SUBROUTINE module_interface_check_data_output_pr
530
531!------------------------------------------------------------------------------!
532! Description:
533! ------------
534!> Check module-specific 2D and 3D data output
535!------------------------------------------------------------------------------!
536SUBROUTINE module_interface_check_data_output( variable, unit, i, ilen, k )
537
538
539   CHARACTER (LEN=*), INTENT(IN)    ::  variable !< variable name
540   CHARACTER (LEN=*), INTENT(INOUT) ::  unit     !< physical unit of variable
541
542   INTEGER(iwp),      INTENT(IN)    :: i         !< ToDo: remove dummy argument, instead pass string from data_output
543   INTEGER(iwp),      INTENT(IN)    :: ilen      !< ToDo: remove dummy argument, instead pass string from data_output
544   INTEGER(iwp),      INTENT(IN)    :: k         !< ToDo: remove dummy argument, instead pass string from data_output
545
546   IF ( unit == 'illegal'  .AND.  biometeorology )  THEN
547      CALL bio_check_data_output( variable, unit, i, ilen, k )
548   ENDIF
549
550   IF ( unit == 'illegal'  .AND.  bulk_cloud_model  )  THEN
551      CALL bcm_check_data_output( variable, unit )
552   ENDIF
553
554   IF ( unit == 'illegal'  .AND.  air_chemistry                                &
555        .AND.  (variable(1:3) == 'kc_' .OR. variable(1:3) == 'em_') )  THEN  ! ToDo: remove aditional conditions
556      CALL chem_check_data_output( variable, unit, i, ilen, k )
557   ENDIF
558
559   IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
560      CALL gust_check_data_output( variable, unit )
561   ENDIF
562
563   IF ( unit == 'illegal' )  THEN  ! ToDo: add module switch if possible
564      CALL lsm_check_data_output( variable, unit, i, ilen, k )
565   ENDIF
566
567   IF ( unit == 'illegal'  .AND.  ocean_mode )  THEN
568      CALL ocean_check_data_output( variable, unit )
569   ENDIF
570
571   IF ( unit == 'illegal'  .AND.  plant_canopy                                 &
572        .AND.  variable(1:4) == 'pcm_' )  THEN  ! ToDo: remove aditional conditions
573      CALL pcm_check_data_output( variable, unit )
574   ENDIF
575
576   IF ( unit == 'illegal'  .AND.  radiation )  THEN
577      CALL radiation_check_data_output( variable, unit, i, ilen, k )
578   ENDIF
579
580   IF ( unit == 'illegal' .AND. salsa ) THEN
581       CALL salsa_check_data_output( variable, unit )
582   ENDIF
583
584   IF ( unit == 'illegal'  .AND.  urban_surface                      &
585        .AND.  variable(1:4) == 'usm_' )  THEN  ! ToDo: remove aditional conditions
586       CALL usm_check_data_output( variable, unit )
587   ENDIF
588
589   IF ( unit == 'illegal' )  THEN
590      unit = ''
591      CALL user_check_data_output( variable, unit )
592   ENDIF
593
594
595END SUBROUTINE module_interface_check_data_output
596
597
598!------------------------------------------------------------------------------!
599!
600! Description:
601! ------------
602!> Interface for init_masks. ToDo: get rid of these redundant calls!
603!------------------------------------------------------------------------------!
604SUBROUTINE module_interface_init_masks( variable, unit )
605
606
607   CHARACTER (LEN=*), INTENT(IN)    ::  variable !< variable name
608   CHARACTER (LEN=*), INTENT(INOUT) ::  unit     !< physical unit of variable
609
610   IF ( unit == 'illegal'  .AND.  air_chemistry                                &
611        .AND.  (variable(1:3) == 'kc_' .OR. variable(1:3) == 'em_') )  THEN  ! ToDo: remove aditional conditions
612      CALL chem_check_data_output( variable, unit, 0, 0, 0 )
613   ENDIF
614
615   IF ( unit == 'illegal'  .AND.  radiation )  THEN
616      CALL radiation_check_data_output( variable, unit, 0, 0, 0 )
617   ENDIF
618
619   IF ( unit == 'illegal'  .AND.  salsa )  THEN
620      CALL salsa_check_data_output( variable, unit )
621   ENDIF
622
623   IF ( unit == 'illegal' )  THEN
624      unit = ''
625      CALL user_check_data_output( variable, unit )
626   ENDIF
627
628
629END SUBROUTINE module_interface_init_masks
630
631
632!------------------------------------------------------------------------------!
633!
634! Description:
635! ------------
636!> Define appropriate grid for module-specific netcdf output variables.
637!------------------------------------------------------------------------------!
638SUBROUTINE module_interface_define_netcdf_grid( var, found,                    &
639                                                grid_x, grid_y, grid_z )
640
641
642   CHARACTER (LEN=*), INTENT(IN)  ::  var    !< variable name
643   LOGICAL,           INTENT(OUT) ::  found  !< indicates if variable was found
644   CHARACTER (LEN=*), INTENT(OUT) ::  grid_x !< netcdf dimension in x-direction
645   CHARACTER (LEN=*), INTENT(OUT) ::  grid_y !< netcdf dimension in y-direction
646   CHARACTER (LEN=*), INTENT(OUT) ::  grid_z !< netcdf dimension in z-direction
647!
648!--As long as no action is done in this subroutine, initialize strings with   
649!--intent(out) attribute, in order to avoid compiler warnings.
650   found  = .FALSE.
651   grid_x = 'none'
652   grid_y = 'none'
653   grid_z = 'none'
654
655END SUBROUTINE module_interface_define_netcdf_grid
656
657
658!------------------------------------------------------------------------------!
659! Description:
660! ------------
661!> Allocate module-specific arrays and pointers
662!------------------------------------------------------------------------------!
663SUBROUTINE module_interface_init_arrays
664
665
666   IF ( bulk_cloud_model    )  CALL bcm_init_arrays
667   IF ( air_chemistry       )  CALL chem_init_arrays
668   IF ( gust_module_enabled )  CALL gust_init_arrays
669   IF ( land_surface        )  CALL lsm_init_arrays
670   IF ( ocean_mode          )  CALL ocean_init_arrays
671   IF ( salsa               )  CALL salsa_init_arrays
672   IF ( urban_surface       )  CALL usm_init_arrays
673   IF ( wind_turbine        )  CALL wtm_init_arrays
674
675
676END SUBROUTINE module_interface_init_arrays
677
678
679!------------------------------------------------------------------------------!
680! Description:
681! ------------
682!> Perform module-specific initialization
683!------------------------------------------------------------------------------!
684SUBROUTINE module_interface_init
685
686
687   IF ( biometeorology      )  CALL bio_init
688   IF ( bulk_cloud_model    )  CALL bcm_init
689   IF ( air_chemistry       )  CALL chem_init
690   IF ( virtual_flight      )  CALL flight_init
691   IF ( gust_module_enabled )  CALL gust_init
692   IF ( indoor_model        )  CALL im_init
693   IF ( large_scale_forcing )  CALL lsf_init
694   IF ( land_surface        )  CALL lsm_init
695   IF ( nudging             )  CALL nudge_init
696   IF ( ocean_mode          )  CALL ocean_init
697   IF ( plant_canopy        )  CALL pcm_init
698   IF ( salsa               )  CALL salsa_init
699   IF ( urban_surface       )  CALL usm_init
700   IF ( virtual_measurement )  CALL vm_init
701   IF ( wind_turbine        )  CALL wtm_init
702   IF ( radiation           )  CALL radiation_init
703                               CALL user_init
704
705
706END SUBROUTINE module_interface_init
707
708
709!------------------------------------------------------------------------------!
710! Description:
711! ------------
712!> Gather module-specific header output
713!------------------------------------------------------------------------------!
714SUBROUTINE module_interface_header( io )
715
716
717   INTEGER(iwp), INTENT(IN) ::  io  !< unit of the output file
718
719
720   IF ( biometeorology      )  CALL bio_header ( io )
721   IF ( bulk_cloud_model    )  CALL bcm_header( io )
722   IF ( air_chemistry       )  CALL chem_header ( io )
723   IF ( virtual_flight      )  CALL flight_header( io )
724   IF ( gust_module_enabled )  CALL gust_header( io )
725   IF ( land_surface        )  CALL lsm_header( io )
726   IF ( large_scale_forcing )  CALL lsf_nudging_header( io )
727   IF ( nesting_offline     )  CALL nesting_offl_header( io )
728   IF ( ocean_mode          )  CALL ocean_header( io )
729   IF ( plant_canopy        )  CALL pcm_header( io )
730   IF ( radiation           )  CALL radiation_header( io )
731   IF ( salsa               )  CALL salsa_header( io )
732   IF ( calculate_spectra   )  CALL spectra_header( io )
733   IF ( syn_turb_gen        )  CALL stg_header( io )
734
735   CALL user_header( io ) ! ToDo: make user module switch
736
737
738END SUBROUTINE module_interface_header
739
740
741!------------------------------------------------------------------------------!
742! Description:
743! ------------
744!> Perform module-specific actions while in time-integration (cache-optimized)
745!------------------------------------------------------------------------------!
746SUBROUTINE module_interface_actions( location )
747
748
749   CHARACTER (LEN=*), INTENT(IN) ::  location !< call location string
750
751
752   IF ( gust_module_enabled )  CALL gust_actions( location )
753
754   CALL user_actions( location ) ! ToDo: make user module switch
755
756
757END SUBROUTINE module_interface_actions
758
759
760!------------------------------------------------------------------------------!
761! Description:
762! ------------
763!> Perform module-specific actions while in time-integration (vector-optimized)
764!------------------------------------------------------------------------------!
765SUBROUTINE module_interface_actions_ij( i, j, location )
766
767
768   INTEGER(iwp),      INTENT(IN) ::  i         !< grid index in x-direction
769   INTEGER(iwp),      INTENT(IN) ::  j         !< grid index in y-direction
770   CHARACTER (LEN=*), INTENT(IN) ::  location  !< call location string
771
772
773   IF ( gust_module_enabled )  CALL gust_actions( i, j, location )
774
775   CALL user_actions( i, j, location ) ! ToDo: make user module switch
776
777
778END SUBROUTINE module_interface_actions_ij
779
780
781!------------------------------------------------------------------------------!
782! Description:
783! ------------
784!> Swap the timelevel pointers for module-specific arrays
785!------------------------------------------------------------------------------!
786SUBROUTINE module_interface_swap_timelevel ( swap_mode )
787
788
789   INTEGER(iwp), INTENT(IN) :: swap_mode !< determines procedure of pointer swap
790
791   IF ( bulk_cloud_model    )  CALL bcm_swap_timelevel( swap_mode )
792   IF ( air_chemistry       )  CALL chem_swap_timelevel( swap_mode )
793   IF ( gust_module_enabled )  CALL gust_swap_timelevel( swap_mode )
794   IF ( land_surface        )  CALL lsm_swap_timelevel( swap_mode )
795   IF ( ocean_mode          )  CALL ocean_swap_timelevel( swap_mode )
796   IF ( salsa               )  CALL salsa_swap_timelevel( swap_mode )
797   IF ( urban_surface       )  CALL usm_swap_timelevel( swap_mode )
798
799
800END SUBROUTINE module_interface_swap_timelevel
801
802
803!------------------------------------------------------------------------------!
804!
805! Description:
806! ------------
807!> Perform module-specific averaging of 3D data
808!------------------------------------------------------------------------------!
809SUBROUTINE module_interface_3d_data_averaging( mode, variable )
810
811
812   CHARACTER (LEN=*), INTENT(IN) ::  mode     !< averaging interface mode
813   CHARACTER (LEN=*), INTENT(IN) ::  variable !< variable name
814
815   IF ( biometeorology      )  CALL bio_3d_data_averaging( mode, variable )
816   IF ( bulk_cloud_model    )  CALL bcm_3d_data_averaging( mode, variable )
817   IF ( air_chemistry       )  CALL chem_3d_data_averaging( mode, variable )
818   IF ( gust_module_enabled )  CALL gust_3d_data_averaging( mode, variable )
819   IF ( land_surface        )  CALL lsm_3d_data_averaging( mode, variable )
820   IF ( ocean_mode          )  CALL ocean_3d_data_averaging( mode, variable )
821   IF ( radiation           )  CALL radiation_3d_data_averaging( mode, variable )
822   IF ( salsa               )  CALL salsa_3d_data_averaging( mode, variable )
823   IF ( urban_surface       )  CALL usm_3d_data_averaging( mode, variable )
824
825   CALL user_3d_data_averaging( mode, variable ) ! ToDo: make user module switch
826
827
828END SUBROUTINE module_interface_3d_data_averaging
829
830!------------------------------------------------------------------------------!
831!
832! Description:
833! ------------
834!> Define module-specific 2D output variables
835!------------------------------------------------------------------------------!
836SUBROUTINE module_interface_data_output_2d( av, variable, found, grid, mode,   &
837                                            local_pf, two_d, nzb_do, nzt_do,   &
838                                            fill_value )
839
840   INTEGER(iwp),      INTENT(IN)    ::  av         !< flag for (non-)average output
841   CHARACTER (LEN=*), INTENT(IN)    ::  variable   !< variable name
842   LOGICAL,           INTENT(INOUT) ::  found      !< flag if output variable is found
843   CHARACTER (LEN=*), INTENT(INOUT) ::  grid       !< name of vertical grid
844   CHARACTER (LEN=*), INTENT(IN)    ::  mode       !< either 'xy', 'xz' or 'yz'
845   LOGICAL,           INTENT(OUT)   ::  two_d      !< flag for 2D variables
846   INTEGER(iwp),      INTENT(IN)    ::  nzb_do     !< vertical output index (bottom) (usually 0)
847   INTEGER(iwp),      INTENT(IN)    ::  nzt_do     !< vertical output index (top) (usually nz_do3d)
848   REAL(wp),          INTENT(IN)    ::  fill_value !< to be removed
849
850   REAL(wp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do), INTENT(OUT) ::  local_pf !< ToDo: can also be kind=sp
851
852
853   IF ( .NOT. found  .AND.  biometeorology )  THEN
854      CALL bio_data_output_2d(                                                 &
855              av, variable, found, grid, local_pf, two_d, nzb_do, nzt_do       &
856           )
857   ENDIF
858
859   IF ( .NOT. found  .AND.  bulk_cloud_model )  THEN
860      CALL bcm_data_output_2d(                                                 &
861              av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do &
862           )
863   ENDIF
864
865   IF ( .NOT. found  .AND.  air_chemistry )  THEN
866      CALL chem_data_output_2d(                                                &
867              av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do, fill_value &
868           )
869   ENDIF
870
871   IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
872      CALL gust_data_output_2d(                                                &
873              av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do, fill_value &
874           )
875   ENDIF
876
877   IF ( .NOT. found  .AND.  land_surface )  THEN
878      CALL lsm_data_output_2d(                                                 &
879              av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do &
880           )
881   ENDIF
882
883   IF ( .NOT. found  .AND.  ocean_mode )  THEN
884      CALL ocean_data_output_2d(                                               &
885              av, variable, found, grid, mode, local_pf, nzb_do, nzt_do        &
886           )
887   ENDIF
888
889   IF ( .NOT. found  .AND.  radiation )  THEN
890      CALL radiation_data_output_2d(                                           &
891              av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do &
892           )
893   ENDIF
894
895   IF ( .NOT. found  .AND.  salsa )  THEN
896      CALL salsa_data_output_2d(                                               &
897              av, variable, found, grid, mode, local_pf, two_d, nzb_do, nzt_do &
898           )
899   ENDIF
900
901   IF ( .NOT. found )  THEN  ! ToDo: make user module switch
902      CALL user_data_output_2d(                                                &
903              av, variable, found, grid, local_pf, two_d, nzb_do, nzt_do       &
904           )
905   ENDIF
906
907END SUBROUTINE module_interface_data_output_2d
908
909
910!------------------------------------------------------------------------------!
911!
912! Description:
913! ------------
914!> Define module-specific 3D output variables
915!------------------------------------------------------------------------------!
916SUBROUTINE module_interface_data_output_3d( av, variable, found, local_pf,     &
917                                            fill_value, resorted, nzb_do, nzt_do )
918
919
920   INTEGER(iwp),      INTENT(IN)    ::  av         !< flag for (non-)average output
921   CHARACTER (LEN=*), INTENT(IN)    ::  variable   !< variable name
922   LOGICAL,           INTENT(INOUT) ::  found      !< flag if output variable is found
923   REAL(wp),          INTENT(IN)    ::  fill_value !< ToDo: refactor
924   LOGICAL,           INTENT(OUT)   ::  resorted   !< flag if output has been resorted
925   INTEGER(iwp),      INTENT(IN)    ::  nzb_do     !< vertical output index (bottom) (usually 0)
926   INTEGER(iwp),      INTENT(IN)    ::  nzt_do     !< vertical output index (top) (usually nz_do3d)
927
928   REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do), INTENT(OUT) ::  local_pf
929
930
931   IF ( .NOT. found  .AND.  biometeorology )  THEN
932      CALL bio_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
933      resorted = .FALSE.
934   ENDIF
935
936   IF ( .NOT. found  .AND.  bulk_cloud_model )  THEN
937      CALL bcm_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
938      resorted = .TRUE.
939   ENDIF
940
941   IF ( .NOT. found  .AND.  air_chemistry )  THEN
942      CALL chem_data_output_3d( av, variable, found, local_pf, fill_value, nzb_do, nzt_do )
943      resorted = .TRUE.
944   ENDIF
945
946   IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
947      CALL gust_data_output_3d( av, variable, found, local_pf, fill_value, nzb_do, nzt_do )
948      resorted = .TRUE.
949   ENDIF
950
951   IF ( .NOT. found  .AND.  ocean_mode )  THEN
952      CALL ocean_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
953      resorted = .TRUE.
954   ENDIF
955
956   IF ( .NOT. found  .AND.  plant_canopy )  THEN
957      CALL pcm_data_output_3d( av, variable, found, local_pf, fill_value, nzb_do, nzt_do )
958      resorted = .TRUE.
959   ENDIF
960
961   IF ( .NOT. found  .AND.  radiation )  THEN
962      CALL radiation_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
963      resorted = .TRUE.
964   ENDIF
965
966   IF ( .NOT. found  .AND.  salsa )  THEN
967      CALL salsa_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
968      resorted = .TRUE.
969   ENDIF
970
971   IF ( .NOT. found )  THEN  ! ToDo: make user module switch
972      CALL user_data_output_3d( av, variable, found, local_pf, nzb_do, nzt_do )
973      resorted = .TRUE.
974   ENDIF
975
976
977END SUBROUTINE module_interface_data_output_3d
978
979
980!------------------------------------------------------------------------------!
981! Description:
982! ------------
983!> Compute module-specific profile and timeseries data
984!------------------------------------------------------------------------------!
985SUBROUTINE module_interface_statistics( mode, sr, tn, dots_max )
986
987
988   CHARACTER (LEN=*), INTENT(IN) ::  mode     !< statistical analysis mode
989   INTEGER(iwp),      INTENT(IN) ::  sr       !<
990   INTEGER(iwp),      INTENT(IN) ::  tn       !<
991   INTEGER(iwp),      INTENT(IN) ::  dots_max !< maximum number of timeseries
992
993   IF ( gust_module_enabled )  CALL gust_statistics( mode, sr, tn, dots_max )
994   IF ( air_chemistry       )  CALL chem_statistics( mode, sr, tn )
995
996   CALL user_statistics( mode, sr, tn ) ! ToDo: make user module switch
997
998
999END SUBROUTINE module_interface_statistics
1000
1001
1002!------------------------------------------------------------------------------!
1003! Description:
1004! ------------
1005!> Read module-specific restart data globaly shared by all MPI ranks
1006!------------------------------------------------------------------------------!
1007SUBROUTINE module_interface_rrd_global( variable, found )
1008
1009
1010   CHARACTER (LEN=*), INTENT(IN)  ::  variable !< name of global variable
1011   LOGICAL,           INTENT(OUT) ::  found    !< flag if variable was found
1012
1013   IF ( .NOT. found )  CALL bio_rrd_global( found ) ! ToDo: change interface to pass variable
1014   IF ( .NOT. found )  CALL bcm_rrd_global( found ) ! ToDo: change interface to pass variable
1015   IF ( .NOT. found )  CALL flight_rrd_global( found ) ! ToDo: change interface to pass variable
1016   IF ( .NOT. found )  CALL gust_rrd_global( found ) ! ToDo: change interface to pass variable
1017   IF ( .NOT. found )  CALL ocean_rrd_global( found ) ! ToDo: change interface to pass variable
1018   IF ( .NOT. found )  CALL stg_rrd_global ( found ) ! ToDo: change interface to pass variable
1019   IF ( .NOT. found )  CALL wtm_rrd_global( found ) ! ToDo: change interface to pass variable
1020
1021   IF ( .NOT. found )  CALL user_rrd_global( found ) ! ToDo: change interface to pass variable
1022
1023
1024END SUBROUTINE module_interface_rrd_global
1025
1026
1027!------------------------------------------------------------------------------!
1028! Description:
1029! ------------
1030!> Write module-specific restart data globaly shared by all MPI ranks
1031!------------------------------------------------------------------------------!
1032SUBROUTINE module_interface_wrd_global
1033
1034
1035   IF ( biometeorology )       CALL bio_wrd_global
1036   IF ( bulk_cloud_model )     CALL bcm_wrd_global
1037   IF ( virtual_flight )       CALL flight_wrd_global
1038   IF ( gust_module_enabled )  CALL gust_wrd_global
1039   IF ( ocean_mode )           CALL ocean_wrd_global
1040   IF ( syn_turb_gen )         CALL stg_wrd_global
1041   IF ( wind_turbine )         CALL wtm_wrd_global
1042
1043   CALL user_wrd_global ! ToDo: make user module switch
1044
1045
1046END SUBROUTINE module_interface_wrd_global
1047
1048
1049!------------------------------------------------------------------------------!
1050! Description:
1051! ------------
1052!> Read module-specific restart data specific to local MPI ranks
1053!------------------------------------------------------------------------------!
1054SUBROUTINE module_interface_rrd_local( variable, file_index, map_index,        &
1055                                       nxlf, nxlc, nxl_on_file,                &
1056                                       nxrf, nxrc, nxr_on_file,                &
1057                                       nynf, nync, nyn_on_file,                &
1058                                       nysf, nysc, nys_on_file,                &
1059                                       tmp_2d, tmp_3d, found )
1060
1061
1062   CHARACTER (LEN=*), INTENT(IN)  ::  variable     !< name of global variable
1063   INTEGER(iwp),      INTENT(IN)  ::  file_index   !<
1064   INTEGER(iwp),      INTENT(IN)  ::  map_index    !<
1065   INTEGER(iwp),      INTENT(IN)  ::  nxlc         !<
1066   INTEGER(iwp),      INTENT(IN)  ::  nxlf         !<
1067   INTEGER(iwp),      INTENT(IN)  ::  nxl_on_file  !<
1068   INTEGER(iwp),      INTENT(IN)  ::  nxrc         !<
1069   INTEGER(iwp),      INTENT(IN)  ::  nxrf         !<
1070   INTEGER(iwp),      INTENT(IN)  ::  nxr_on_file  !<
1071   INTEGER(iwp),      INTENT(IN)  ::  nync         !<
1072   INTEGER(iwp),      INTENT(IN)  ::  nynf         !<
1073   INTEGER(iwp),      INTENT(IN)  ::  nyn_on_file  !<
1074   INTEGER(iwp),      INTENT(IN)  ::  nysc         !<
1075   INTEGER(iwp),      INTENT(IN)  ::  nysf         !<
1076   INTEGER(iwp),      INTENT(IN)  ::  nys_on_file  !<
1077   LOGICAL,           INTENT(OUT) ::  found        !< flag if variable was found
1078
1079   REAL(wp), DIMENSION(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp), INTENT(OUT) :: tmp_2d   !<
1080   REAL(wp), DIMENSION(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp), INTENT(OUT) :: tmp_3d   !<
1081
1082
1083   IF ( .NOT. found ) CALL bio_rrd_local(                                      &
1084                              found                                            &
1085                           )
1086
1087   IF ( .NOT. found ) CALL bcm_rrd_local(                                      &
1088                              file_index, map_index,                           &
1089                              nxlf, nxlc, nxl_on_file,                         &
1090                              nxrf, nxrc, nxr_on_file,                         &
1091                              nynf, nync, nyn_on_file,                         &
1092                              nysf, nysc, nys_on_file,                         &
1093                              tmp_2d, tmp_3d, found                            &
1094                           ) ! ToDo: change interface to pass variable
1095
1096   IF ( .NOT. found ) CALL chem_rrd_local(                                     &
1097                              file_index, map_index,                           &
1098                              nxlf, nxlc, nxl_on_file,                         &
1099                              nxrf, nxrc, nxr_on_file,                         &
1100                              nynf, nync, nyn_on_file,                         &
1101                              nysf, nysc, nys_on_file,                         &
1102                              tmp_3d, found                                    &
1103                           ) ! ToDo: change interface to pass variable
1104
1105   IF ( .NOT. found ) CALL gust_rrd_local(                                     &
1106                              file_index, map_index,                           &
1107                              nxlf, nxlc, nxl_on_file,                         &
1108                              nxrf, nxrc, nxr_on_file,                         &
1109                              nynf, nync, nyn_on_file,                         &
1110                              nysf, nysc, nys_on_file,                         &
1111                              tmp_2d, tmp_3d, found                            &
1112                           ) ! ToDo: change interface to pass variable
1113
1114   IF ( .NOT. found ) CALL lsm_rrd_local(                                      &
1115                              file_index, map_index,                           &
1116                              nxlf, nxlc, nxl_on_file,                         &
1117                              nxrf, nxrc, nxr_on_file,                         &
1118                              nynf, nync, nyn_on_file,                         &
1119                              nysf, nysc, nys_on_file,                         &
1120                              tmp_2d, found                                    &
1121                           ) ! ToDo: change interface to pass variable
1122
1123   IF ( .NOT. found ) CALL ocean_rrd_local(                                    &
1124                              file_index, map_index,                           &
1125                              nxlf, nxlc, nxl_on_file,                         &
1126                              nxrf, nxrc, nxr_on_file,                         &
1127                              nynf, nync, nyn_on_file,                         &
1128                              nysf, nysc, nys_on_file,                         &
1129                              tmp_2d, tmp_3d, found                            &
1130                           ) ! ToDo: change interface to pass variable
1131
1132   IF ( .NOT. found ) CALL radiation_rrd_local(                                &
1133                              file_index, map_index,                           &
1134                              nxlf, nxlc, nxl_on_file,                         &
1135                              nxrf, nxrc, nxr_on_file,                         &
1136                              nynf, nync, nyn_on_file,                         &
1137                              nysf, nysc, nys_on_file,                         &
1138                              tmp_2d, tmp_3d, found                            &
1139                           ) ! ToDo: change interface to pass variable
1140
1141   IF ( .NOT. found ) CALL salsa_rrd_local(                                    &
1142                              file_index, map_index,                           &
1143                              nxlf, nxlc, nxl_on_file,                         &
1144                              nxrf, nxrc, nxr_on_file,                         &
1145                              nynf, nync, nyn_on_file,                         &
1146                              nysf, nysc, nys_on_file,                         &
1147                              tmp_3d, found                                    &
1148                           ) ! ToDo: change interface to pass variable
1149
1150   IF ( .NOT. found ) CALL usm_rrd_local(                                      &
1151                              file_index, map_index,                           &
1152                              nxlf, nxlc, nxl_on_file,                         &
1153                              nxrf, nxrc, nxr_on_file,                         &
1154                              nynf, nync, nyn_on_file,                         &
1155                              nysf, nysc, nys_on_file,                         &
1156                              found                                            &
1157                           ) ! ToDo: change interface to pass variable
1158
1159   IF ( .NOT. found ) CALL user_rrd_local(                                     &
1160                              file_index, map_index,                           &
1161                              nxlf, nxlc, nxl_on_file,                         &
1162                              nxrf, nxrc, nxr_on_file,                         &
1163                              nynf, nync, nyn_on_file,                         &
1164                              nysf, nysc, nys_on_file,                         &
1165                              tmp_3d, found                                    &
1166                           ) ! ToDo: change interface to pass variable
1167
1168
1169END SUBROUTINE module_interface_rrd_local
1170
1171
1172!------------------------------------------------------------------------------!
1173! Description:
1174! ------------
1175!> Write module-specific restart data specific to local MPI ranks
1176!------------------------------------------------------------------------------!
1177SUBROUTINE module_interface_wrd_local
1178
1179
1180   IF ( biometeorology )       CALL bio_wrd_local
1181   IF ( bulk_cloud_model )     CALL bcm_wrd_local
1182   IF ( air_chemistry )        CALL chem_wrd_local
1183   IF ( gust_module_enabled )  CALL gust_wrd_local
1184   IF ( land_surface )         CALL lsm_wrd_local
1185   IF ( ocean_mode )           CALL ocean_wrd_local
1186   IF ( radiation )            CALL radiation_wrd_local
1187   IF ( salsa )                CALL salsa_wrd_local
1188   IF ( urban_surface )        CALL usm_wrd_local
1189
1190   CALL user_wrd_local ! ToDo: make user module switch
1191
1192
1193END SUBROUTINE module_interface_wrd_local
1194
1195
1196!------------------------------------------------------------------------------!
1197! Description:
1198! ------------
1199!> Perform module-specific last actions before the program terminates
1200!------------------------------------------------------------------------------!
1201SUBROUTINE module_interface_last_actions
1202
1203
1204   CALL user_last_actions ! ToDo: make user module switch
1205
1206
1207END SUBROUTINE module_interface_last_actions
1208
1209
1210END MODULE module_interface
Note: See TracBrowser for help on using the repository browser.