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

Last change on this file since 3701 was 3701, checked in by knoop, 5 years ago

Added module switch for user_module.
User module is enabled as soon as the user_parameters namelist is found.

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