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

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

restructure/add location/debug messages

  • Property svn:keywords set to Id
File size: 66.8 KB
Line 
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!
17! Copyright 1997-2019 Leibniz Universitaet Hannover
18!------------------------------------------------------------------------------!
19!
20! Current revisions:
21! -----------------
22!
23!
24! Former revisions:
25! -----------------
26! $Id: module_interface.f90 3885 2019-04-11 11:29:34Z kanani $
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
31! Add a call for salsa_prognostic_equations
32!
33! 3840 2019-03-29 10:35:52Z knoop
34! bugfix: intent of dummy arguments changed to inout
35!
36! 3770 2019-02-28 11:22:32Z moh.hefny
37! removed unused variables in module_interface_check_data_output_ts
38!
39! 3767 08:18:02Z raasch
40! unused variable file_index removed from subroutine parameter list
41!
42! 3766 2019-02-26 16:23:41Z raasch
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
48! only pass required arguments to surface_data_output_rrd_local
49!
50! 3747 2019-02-16 15:15:23Z gronemeier
51! Call user_init_arrays
52!
53! 3745 2019-02-15 18:57:56Z suehring
54! Add indoor model
55!
56! 3744 2019-02-15 18:38:58Z suehring
57! Removed bio_check_parameters as the method is empty.
58!
59! 3735 2019-02-12 09:52:40Z dom_dwd_user
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
65! Add check_parameters routine for virtual measurements
66!
67! 3711 2019-01-31 13:44:26Z knoop
68! Introduced module_interface_init_checks for post-init checks
69!
70! 3705 2019-01-29 19:56:39Z suehring
71! Add last_actions for virtual measurements
72!
73! 3704 2019-01-29 19:51:41Z suehring
74! Some interface calls moved to module_interface + cleanup
75!
76! 3684 2019-01-20 20:20:58Z knoop
77! Bugfix: made unit intend INOUT
78!
79! 3650 2019-01-04 13:01:33Z kanani
80! Add restart routines for biometeorology
81!
82! 3649 2019-01-02 16:52:21Z suehring
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
87! Rename subroutines for surface-data output
88!
89! 3641 2018-12-23 22:10:01Z knoop
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!>
97!> @todo Re-format module to be consistent with coding standard
98!------------------------------------------------------------------------------!
99 MODULE module_interface
100
101    USE indices,                                                               &
102        ONLY:  nbgp, nxl, nxlg, nxr, nxrg, nys, nysg, nyn, nyng, nzb, nzt
103
104    USE kinds
105
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
126
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
142
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,                                                     &
152               bcm_actions,                                                    &
153               bcm_non_transport_physics,                                      &
154               bcm_prognostic_equations,                                       &
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
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,                                          &
169              chem_init_arrays,                                                &
170              chem_init,                                                       &
171              chem_header,                                                     &
172              chem_actions,                                                    &
173              chem_non_transport_physics,                                      &
174              chem_prognostic_equations,                                       &
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,                                                  &
181               chem_wrd_local
182
183    USE flight_mod,                                                            &
184        ONLY:  flight_parin,                                                   &
185               flight_header,                                                  &
186               flight_init,                                                    &
187               flight_rrd_global,                                              &
188               flight_wrd_global
189
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,                                                   &
200               gust_prognostic_equations,                                      &
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
210
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
217
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
231
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
238
239    USE multi_agent_system_mod,                                                &
240        ONLY:  mas_parin
241
242    USE nesting_offl_mod,                                                      &
243        ONLY:  nesting_offl_parin,                                             &
244               nesting_offl_check_parameters,                                  &
245               nesting_offl_header
246
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,                                                   &
255               ocean_actions,                                                  &
256               ocean_prognostic_equations,                                     &
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
265
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
273
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
288
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,                                                   &
296               salsa_actions,                                                  &
297               salsa_prognostic_equations,                                     &
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
304
305    USE spectra_mod,                                                           &
306        ONLY:  calculate_spectra,                                              &
307               spectra_parin,                                                  &
308               spectra_check_parameters,                                       &
309               spectra_header
310
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
319
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
326
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
337
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
358
359    USE virtual_measurement_mod,                                               &
360        ONLY:  vm_check_parameters,                                            &
361               vm_init,                                                        &
362               vm_last_actions,                                                &
363               vm_parin
364
365    USE wind_turbine_model_mod,                                                &
366        ONLY:  wtm_parin,                                                      &
367               wtm_check_parameters,                                           &
368               wtm_init_arrays,                                                &
369               wtm_init,                                                       &
370               wtm_actions,                                                    &
371               wtm_rrd_global,                                                 &
372               wtm_wrd_global
373
374    IMPLICIT NONE
375
376    PRIVATE
377
378!
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,                                               &
393       module_interface_non_transport_physics,                                 &
394       module_interface_prognostic_equations,                                  &
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
405
406
407    INTERFACE module_interface_parin
408       MODULE PROCEDURE module_interface_parin
409    END INTERFACE module_interface_parin
410
411    INTERFACE module_interface_check_parameters
412       MODULE PROCEDURE module_interface_check_parameters
413    END INTERFACE module_interface_check_parameters
414
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
418
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
422
423    INTERFACE module_interface_check_data_output
424       MODULE PROCEDURE module_interface_check_data_output
425    END INTERFACE module_interface_check_data_output
426
427    INTERFACE module_interface_init_masks
428       MODULE PROCEDURE module_interface_init_masks
429    END INTERFACE module_interface_init_masks
430
431    INTERFACE module_interface_define_netcdf_grid
432       MODULE PROCEDURE module_interface_define_netcdf_grid
433    END INTERFACE module_interface_define_netcdf_grid
434
435    INTERFACE module_interface_init_arrays
436       MODULE PROCEDURE module_interface_init_arrays
437    END INTERFACE module_interface_init_arrays
438
439    INTERFACE module_interface_init
440       MODULE PROCEDURE module_interface_init
441    END INTERFACE module_interface_init
442
443    INTERFACE module_interface_init_checks
444       MODULE PROCEDURE module_interface_init_checks
445    END INTERFACE module_interface_init_checks
446
447    INTERFACE module_interface_header
448       MODULE PROCEDURE module_interface_header
449    END INTERFACE module_interface_header
450
451    INTERFACE module_interface_actions
452       MODULE PROCEDURE module_interface_actions
453       MODULE PROCEDURE module_interface_actions_ij
454    END INTERFACE module_interface_actions
455
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
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
466    INTERFACE module_interface_swap_timelevel
467       MODULE PROCEDURE module_interface_swap_timelevel
468    END INTERFACE module_interface_swap_timelevel
469
470    INTERFACE module_interface_3d_data_averaging
471       MODULE PROCEDURE module_interface_3d_data_averaging
472    END INTERFACE module_interface_3d_data_averaging
473
474    INTERFACE module_interface_data_output_2d
475       MODULE PROCEDURE module_interface_data_output_2d
476    END INTERFACE module_interface_data_output_2d
477
478    INTERFACE module_interface_data_output_3d
479       MODULE PROCEDURE module_interface_data_output_3d
480    END INTERFACE module_interface_data_output_3d
481
482    INTERFACE module_interface_statistics
483       MODULE PROCEDURE module_interface_statistics
484    END INTERFACE module_interface_statistics
485
486    INTERFACE module_interface_rrd_global
487       MODULE PROCEDURE module_interface_rrd_global
488    END INTERFACE module_interface_rrd_global
489
490    INTERFACE module_interface_wrd_global
491       MODULE PROCEDURE module_interface_wrd_global
492    END INTERFACE module_interface_wrd_global
493
494    INTERFACE module_interface_rrd_local
495       MODULE PROCEDURE module_interface_rrd_local
496    END INTERFACE module_interface_rrd_local
497
498    INTERFACE module_interface_wrd_local
499       MODULE PROCEDURE module_interface_wrd_local
500    END INTERFACE module_interface_wrd_local
501
502    INTERFACE module_interface_last_actions
503       MODULE PROCEDURE module_interface_last_actions
504    END INTERFACE module_interface_last_actions
505
506
507 CONTAINS
508
509
510!------------------------------------------------------------------------------!
511! Description:
512! ------------
513!> Read module-specific parameter namelists
514!------------------------------------------------------------------------------!
515 SUBROUTINE module_interface_parin
516
517
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
539
540    CALL package_parin ! ToDo: deprecated, needs to be dissolved
541
542
543 END SUBROUTINE module_interface_parin
544
545
546!------------------------------------------------------------------------------!
547! Description:
548! ------------
549!> Perform module-specific initialization checks
550!------------------------------------------------------------------------------!
551 SUBROUTINE module_interface_check_parameters
552
553
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
572
573
574 END SUBROUTINE module_interface_check_parameters
575
576
577!------------------------------------------------------------------------------!
578! Description:
579! ------------
580!> Check module-specific data output of timeseries
581!------------------------------------------------------------------------------!
582 SUBROUTINE module_interface_check_data_output_ts( dots_max, dots_num, dots_label, dots_unit )
583
584
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
589
590
591    IF ( radiation )  THEN
592       CALL radiation_check_data_output_ts( dots_max, dots_num )
593    ENDIF
594
595    IF ( user_module_enabled )  THEN
596       CALL user_check_data_output_ts( dots_max, dots_num, dots_label, dots_unit )
597    ENDIF
598
599
600 END SUBROUTINE module_interface_check_data_output_ts
601
602
603!------------------------------------------------------------------------------!
604! Description:
605! ------------
606!> Check module-specific data output of profiles
607!------------------------------------------------------------------------------!
608 SUBROUTINE module_interface_check_data_output_pr( variable, var_count, unit,  &
609                                                   dopr_unit )
610
611
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
616
617    IF ( unit == 'illegal' .AND.  bulk_cloud_model )  THEN
618       CALL bcm_check_data_output_pr( variable, var_count, unit, dopr_unit )
619    ENDIF
620
621    IF ( unit == 'illegal' .AND.  air_chemistry )  THEN
622       CALL chem_check_data_output_pr( variable, var_count, unit, dopr_unit )
623    ENDIF
624
625    IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
626       CALL gust_check_data_output_pr( variable, var_count, unit, dopr_unit )
627    ENDIF
628
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
632
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
636
637    IF ( unit == 'illegal'  .AND.  ocean_mode )  THEN
638       CALL ocean_check_data_output_pr( variable, var_count, unit, dopr_unit )
639    ENDIF
640
641    IF ( unit == 'illegal'  .AND.  radiation )  THEN
642       CALL radiation_check_data_output_pr( variable, var_count, unit, dopr_unit )
643    ENDIF
644
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
649
650
651 END SUBROUTINE module_interface_check_data_output_pr
652
653!------------------------------------------------------------------------------!
654! Description:
655! ------------
656!> Check module-specific 2D and 3D data output
657!------------------------------------------------------------------------------!
658 SUBROUTINE module_interface_check_data_output( variable, unit, i, j, ilen, k )
659
660
661    CHARACTER (LEN=*), INTENT(IN)    ::  variable !< variable name
662    CHARACTER (LEN=*), INTENT(INOUT) ::  unit     !< physical unit of variable
663
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
668
669    IF ( unit == 'illegal'  .AND.  biometeorology )  THEN
670       CALL bio_check_data_output( variable, unit, i, j, ilen, k )
671    ENDIF
672
673    IF ( unit == 'illegal'  .AND.  bulk_cloud_model  )  THEN
674       CALL bcm_check_data_output( variable, unit )
675    ENDIF
676
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
681
682    IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
683       CALL gust_check_data_output( variable, unit )
684    ENDIF
685
686    IF ( unit == 'illegal' )  THEN  ! ToDo: add module switch if possible
687       CALL lsm_check_data_output( variable, unit, i, ilen, k )
688    ENDIF
689
690    IF ( unit == 'illegal'  .AND.  ocean_mode )  THEN
691       CALL ocean_check_data_output( variable, unit )
692    ENDIF
693
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
698
699    IF ( unit == 'illegal'  .AND.  radiation )  THEN
700       CALL radiation_check_data_output( variable, unit, i, ilen, k )
701    ENDIF
702
703    IF ( unit == 'illegal' .AND. salsa ) THEN
704       CALL salsa_check_data_output( variable, unit )
705    ENDIF
706
707    IF ( unit == 'illegal' .AND. indoor_model ) THEN
708       CALL im_check_data_output( variable, unit )
709    ENDIF
710   
711    IF ( unit == 'illegal'  .AND.  urban_surface                      &
712        .AND.  variable(1:4) == 'usm_' )  THEN  ! ToDo: remove aditional conditions
713       CALL usm_check_data_output( variable, unit )
714    ENDIF
715
716    IF ( unit == 'illegal'  .AND.  user_module_enabled )  THEN
717       unit = ''
718       CALL user_check_data_output( variable, unit )
719    ENDIF
720
721
722 END SUBROUTINE module_interface_check_data_output
723
724
725!------------------------------------------------------------------------------!
726!
727! Description:
728! ------------
729!> Interface for init_masks. ToDo: get rid of these redundant calls!
730!------------------------------------------------------------------------------!
731 SUBROUTINE module_interface_init_masks( variable, unit )
732
733
734    CHARACTER (LEN=*), INTENT(IN)    ::  variable !< variable name
735    CHARACTER (LEN=*), INTENT(INOUT) ::  unit     !< physical unit of variable
736
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
741
742    IF ( unit == 'illegal'  .AND.  radiation )  THEN
743       CALL radiation_check_data_output( variable, unit, 0, 0, 0 )
744    ENDIF
745
746    IF ( unit == 'illegal'  .AND.  salsa )  THEN
747       CALL salsa_check_data_output( variable, unit )
748    ENDIF
749
750    IF ( unit == 'illegal'  .AND.  user_module_enabled )  THEN
751       unit = ''
752       CALL user_check_data_output( variable, unit )
753    ENDIF
754
755
756 END SUBROUTINE module_interface_init_masks
757
758
759!------------------------------------------------------------------------------!
760!
761! Description:
762! ------------
763!> Define appropriate grid for module-specific netcdf output variables.
764!------------------------------------------------------------------------------!
765 SUBROUTINE module_interface_define_netcdf_grid( var, found,                   &
766                                                 grid_x, grid_y, grid_z )
767
768
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
774!
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
784
785 END SUBROUTINE module_interface_define_netcdf_grid
786
787
788!------------------------------------------------------------------------------!
789! Description:
790! ------------
791!> Allocate module-specific arrays and pointers
792!------------------------------------------------------------------------------!
793 SUBROUTINE module_interface_init_arrays
794
795
796    CALL location_message( 'initializing module-specific arrays', 'start' )
797
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
808
809    CALL location_message( 'initializing module-specific arrays', 'finished' )
810
811
812 END SUBROUTINE module_interface_init_arrays
813
814
815!------------------------------------------------------------------------------!
816! Description:
817! ------------
818!> Perform module-specific initialization
819!------------------------------------------------------------------------------!
820 SUBROUTINE module_interface_init
821
822
823    CALL location_message( 'initializing module features', 'start' )
824
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
842
843    CALL location_message( 'initializing module features', 'finished' )
844
845
846 END SUBROUTINE module_interface_init
847
848
849!------------------------------------------------------------------------------!
850! Description:
851! ------------
852!> Perform module-specific post-initialization checks
853!------------------------------------------------------------------------------!
854 SUBROUTINE module_interface_init_checks
855
856
857    IF ( biometeorology      )  CALL bio_init_checks
858
859
860 END SUBROUTINE module_interface_init_checks
861
862
863!------------------------------------------------------------------------------!
864! Description:
865! ------------
866!> Gather module-specific header output
867!------------------------------------------------------------------------------!
868 SUBROUTINE module_interface_header( io )
869
870
871    INTEGER(iwp), INTENT(IN) ::  io  !< unit of the output file
872
873
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 )
889
890
891 END SUBROUTINE module_interface_header
892
893
894!------------------------------------------------------------------------------!
895! Description:
896! ------------
897!> Perform module-specific actions while in time-integration (vector-optimized)
898!------------------------------------------------------------------------------!
899 SUBROUTINE module_interface_actions( location )
900
901
902    CHARACTER (LEN=*), INTENT(IN) ::  location !< call location string
903
904
905    IF ( bulk_cloud_model    )  CALL bcm_actions( location )
906    IF ( air_chemistry       )  CALL chem_actions( location )
907    IF ( gust_module_enabled )  CALL gust_actions( location )
908    IF ( ocean_mode          )  CALL ocean_actions( location )
909    IF ( salsa               )  CALL salsa_actions( location )
910    IF ( wind_turbine        )  CALL wtm_actions( location )
911    IF ( user_module_enabled )  CALL user_actions( location )
912
913
914 END SUBROUTINE module_interface_actions
915
916
917!------------------------------------------------------------------------------!
918! Description:
919! ------------
920!> Perform module-specific actions while in time-integration (cache-optimized)
921!------------------------------------------------------------------------------!
922 SUBROUTINE module_interface_actions_ij( i, j, location )
923
924
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
928
929
930    IF ( bulk_cloud_model    )  CALL bcm_actions( i, j, location )
931    IF ( air_chemistry       )  CALL chem_actions( i, j, location )
932    IF ( gust_module_enabled )  CALL gust_actions( i, j, location )
933    IF ( ocean_mode          )  CALL ocean_actions( i, j, location )
934    IF ( salsa               )  CALL salsa_actions( i, j, location )
935    IF ( wind_turbine        )  CALL wtm_actions( i, j, location )
936    IF ( user_module_enabled )  CALL user_actions( i, j, location )
937
938
939 END SUBROUTINE module_interface_actions_ij
940
941
942!------------------------------------------------------------------------------!
943! Description:
944! ------------
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()
951    IF ( air_chemistry       )  CALL chem_non_transport_physics()
952
953
954 END SUBROUTINE module_interface_non_transport_physics
955
956
957!------------------------------------------------------------------------------!
958! Description:
959! ------------
960!> Compute module-specific prognostic_equations (cache-optimized)
961!------------------------------------------------------------------------------!
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
969    IF ( air_chemistry       )  CALL chem_non_transport_physics( i, j )
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!------------------------------------------------------------------------------!
981 SUBROUTINE module_interface_prognostic_equations()
982
983
984    IF ( bulk_cloud_model    )  CALL bcm_prognostic_equations()
985    IF ( air_chemistry       )  CALL chem_prognostic_equations()
986    IF ( gust_module_enabled )  CALL gust_prognostic_equations()
987    IF ( ocean_mode          )  CALL ocean_prognostic_equations()
988    IF ( salsa               )  CALL salsa_prognostic_equations()
989
990
991 END SUBROUTINE module_interface_prognostic_equations
992
993
994!------------------------------------------------------------------------------!
995! Description:
996! ------------
997!> Compute module-specific prognostic_equations (cache-optimized)
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
1008    IF ( bulk_cloud_model    )  CALL bcm_prognostic_equations( i, j, i_omp_start, tn )
1009    IF ( air_chemistry       )  CALL chem_prognostic_equations( i, j, i_omp_start, tn )
1010    IF ( gust_module_enabled )  CALL gust_prognostic_equations( i, j, i_omp_start, tn )
1011    IF ( ocean_mode          )  CALL ocean_prognostic_equations( i, j, i_omp_start, tn )
1012    IF ( salsa               )  CALL salsa_prognostic_equations( i, j, i_omp_start, tn )
1013
1014
1015 END SUBROUTINE module_interface_prognostic_equations_ij
1016
1017
1018!------------------------------------------------------------------------------!
1019! Description:
1020! ------------
1021!> Swap the timelevel pointers for module-specific arrays
1022!------------------------------------------------------------------------------!
1023 SUBROUTINE module_interface_swap_timelevel ( swap_mode )
1024
1025
1026    INTEGER(iwp), INTENT(IN) :: swap_mode !< determines procedure of pointer swap
1027
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 )
1035
1036
1037 END SUBROUTINE module_interface_swap_timelevel
1038
1039
1040!------------------------------------------------------------------------------!
1041!
1042! Description:
1043! ------------
1044!> Perform module-specific averaging of 3D data
1045!------------------------------------------------------------------------------!
1046 SUBROUTINE module_interface_3d_data_averaging( mode, variable )
1047
1048
1049    CHARACTER (LEN=*), INTENT(IN) ::  mode     !< averaging interface mode
1050    CHARACTER (LEN=*), INTENT(IN) ::  variable !< variable name
1051
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 )
1062
1063
1064 END SUBROUTINE module_interface_3d_data_averaging
1065
1066!------------------------------------------------------------------------------!
1067!
1068! Description:
1069! ------------
1070!> Define module-specific 2D output variables
1071!------------------------------------------------------------------------------!
1072 SUBROUTINE module_interface_data_output_2d( av, variable, found, grid, mode,  &
1073                                             local_pf, two_d, nzb_do, nzt_do,  &
1074                                             fill_value )
1075
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
1085
1086    REAL(wp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do), INTENT(OUT) ::  local_pf !< ToDo: can also be kind=sp
1087
1088
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
1094
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
1100
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
1106
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
1112
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
1118
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
1124
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
1130
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
1136
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
1142
1143 END SUBROUTINE module_interface_data_output_2d
1144
1145
1146!------------------------------------------------------------------------------!
1147!
1148! Description:
1149! ------------
1150!> Define module-specific 3D output variables
1151!------------------------------------------------------------------------------!
1152 SUBROUTINE module_interface_data_output_3d( av, variable, found, local_pf,    &
1153                                             fill_value, resorted, nzb_do, nzt_do )
1154
1155
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)
1163
1164    REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do), INTENT(OUT) ::  local_pf
1165
1166
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
1171
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
1176
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
1181
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
1186   
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
1191
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
1196
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
1201
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
1206
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
1211
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
1216
1217
1218 END SUBROUTINE module_interface_data_output_3d
1219
1220
1221!------------------------------------------------------------------------------!
1222! Description:
1223! ------------
1224!> Compute module-specific profile and timeseries data
1225!------------------------------------------------------------------------------!
1226 SUBROUTINE module_interface_statistics( mode, sr, tn, dots_max )
1227
1228
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
1233
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 )
1237
1238
1239 END SUBROUTINE module_interface_statistics
1240
1241
1242!------------------------------------------------------------------------------!
1243! Description:
1244! ------------
1245!> Read module-specific restart data globaly shared by all MPI ranks
1246!------------------------------------------------------------------------------!
1247 SUBROUTINE module_interface_rrd_global( found )
1248
1249
1250    LOGICAL, INTENT(INOUT) ::  found    !< flag if variable was found
1251
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
1261
1262
1263 END SUBROUTINE module_interface_rrd_global
1264
1265
1266!------------------------------------------------------------------------------!
1267! Description:
1268! ------------
1269!> Write module-specific restart data globaly shared by all MPI ranks
1270!------------------------------------------------------------------------------!
1271 SUBROUTINE module_interface_wrd_global
1272
1273
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
1283
1284
1285 END SUBROUTINE module_interface_wrd_global
1286
1287
1288!------------------------------------------------------------------------------!
1289! Description:
1290! ------------
1291!> Read module-specific restart data specific to local MPI ranks
1292!------------------------------------------------------------------------------!
1293 SUBROUTINE module_interface_rrd_local( map_index,                             &
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 )
1299
1300
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
1315
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   !<
1318
1319
1320    IF ( .NOT. found ) CALL bio_rrd_local(                                     &
1321                               found                                           &
1322                            )
1323
1324    IF ( .NOT. found ) CALL bcm_rrd_local(                                     &
1325                               map_index,                                      &
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
1332
1333    IF ( .NOT. found ) CALL chem_rrd_local(                                    &
1334                               map_index,                                      &
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
1341
1342    IF ( .NOT. found ) CALL gust_rrd_local(                                    &
1343                               map_index,                                      &
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
1350
1351    IF ( .NOT. found ) CALL lsm_rrd_local(                                     &
1352                               map_index,                                      &
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
1359
1360    IF ( .NOT. found ) CALL ocean_rrd_local(                                   &
1361                               map_index,                                      &
1362                               nxlf, nxlc, nxl_on_file,                        &
1363                               nxrf, nxrc, nxr_on_file,                        &
1364                               nynf, nync, nyn_on_file,                        &
1365                               nysf, nysc, nys_on_file,                        &
1366                               tmp_3d, found                                   &
1367                            ) ! ToDo: change interface to pass variable
1368
1369    IF ( .NOT. found ) CALL radiation_rrd_local(                               &
1370                               map_index,                                      &
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
1377
1378    IF ( .NOT. found ) CALL salsa_rrd_local(                                   &
1379                               map_index,                                      &
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
1386
1387    IF ( .NOT. found ) CALL usm_rrd_local(                                     &
1388                               map_index,                                      &
1389                               nxlf, nxlc, nxl_on_file,                        &
1390                               nxrf, nxr_on_file,                              &
1391                               nynf, nyn_on_file,                              &
1392                               nysf, nysc, nys_on_file,                        &
1393                               found                                           &
1394                            ) ! ToDo: change interface to pass variable
1395!
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 )
1398                           
1399    IF ( .NOT. found ) CALL user_rrd_local(                                    &
1400                               map_index,                                      &
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
1407
1408
1409 END SUBROUTINE module_interface_rrd_local
1410
1411
1412!------------------------------------------------------------------------------!
1413! Description:
1414! ------------
1415!> Write module-specific restart data specific to local MPI ranks
1416!------------------------------------------------------------------------------!
1417 SUBROUTINE module_interface_wrd_local
1418
1419
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
1431
1432
1433 END SUBROUTINE module_interface_wrd_local
1434
1435
1436!------------------------------------------------------------------------------!
1437! Description:
1438! ------------
1439!> Perform module-specific last actions before the program terminates
1440!------------------------------------------------------------------------------!
1441 SUBROUTINE module_interface_last_actions
1442
1443
1444    IF ( virtual_measurement )  CALL vm_last_actions
1445    IF ( user_module_enabled )  CALL user_last_actions
1446
1447
1448 END SUBROUTINE module_interface_last_actions
1449
1450
1451 END MODULE module_interface
Note: See TracBrowser for help on using the repository browser.