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

Last change on this file since 3762 was 3762, checked in by suehring, 5 years ago

remove unused variables in surface_data_output_mod and use compiler diretives to declare variables only if netcdf4-output is used

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