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

Last change on this file since 3871 was 3871, checked in by knoop, 6 years ago

Moving prognostic equations of bcm into bulk_cloud_model_mod

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