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

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

Moved ocean_mode specific code from advec_ws to ocean_mod + implemented ocean_actions

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