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

Last change on this file since 3744 was 3744, checked in by suehring, 2 years ago

Coupling of indoor model to atmosphere; output of indoor temperatures and waste heat; enable restarts with indoor model; bugfix plant transpiration; bugfix - missing calculation of 10cm temperature

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