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

Last change on this file since 3885 was 3885, checked in by kanani, 5 years ago

restructure/add location/debug messages

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