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

Last change on this file since 3956 was 3956, checked in by monakurppa, 5 years ago

Remove salsa calls from prognostic_equations and correct a bug in the salsa deposition for urban and land surface models

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