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

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

Consider restart data in time-averaged surface output; revise error message; split initialization of surface-output module

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