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

Last change on this file since 3700 was 3700, checked in by knoop, 5 years ago

Moved user_define_netdf_grid into user_module.f90
Added module interface for the definition of additional timeseries

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