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

Last change on this file since 3769 was 3769, checked in by moh.hefny, 5 years ago

removed unused variables from urban_surface_mod radiation_model_mod and part of module_interface

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