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

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

Revision of virtual-measurement module and data output enabled. Further, post-processing tool added to merge distributed virtually sampled data and to output it into NetCDF files.

  • Property svn:keywords set to Id
File size: 57.3 KB
Line 
1!> @file module_interface.f90
2!------------------------------------------------------------------------------!
3! This file is part of PALM.
4!
5! PALM is free software: you can redistribute it and/or modify it under the
6! terms of the GNU General Public License as published by the Free Software
7! Foundation, either version 3 of the License, or (at your option) any later
8! version.
9!
10! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
11! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13!
14! You should have received a copy of the GNU General Public License along with
15! PALM. If not, see <http://www.gnu.org/licenses/>.
16!
17! Copyright 1997-2019 Leibniz Universitaet Hannover
18!------------------------------------------------------------------------------!
19!
20! Current revisions:
21! -----------------
22! Add last_actions for virtual measurements
23!
24! Former revisions:
25! -----------------
26! $Id: module_interface.f90 3704 2019-01-29 19:51:41Z suehring $
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_module_enabled,                                             &
273              user_parin,                                                      &
274              user_check_parameters,                                           &
275              user_check_data_output_ts,                                       &
276              user_check_data_output_pr,                                       &
277              user_check_data_output,                                          &
278              user_init,                                                       &
279              user_header,                                                     &
280              user_actions,                                                    &
281              user_3d_data_averaging,                                          &
282              user_data_output_2d,                                             &
283              user_data_output_3d,                                             &
284              user_statistics,                                                 &
285              user_rrd_global,                                                 &
286              user_rrd_local,                                                  &
287              user_wrd_global,                                                 &
288              user_wrd_local,                                                  &
289              user_last_actions
290
291   USE virtual_measurement_mod,                                                &
292       ONLY:  vm_init,                                                         &
293              vm_last_actions,                                                 &
294              vm_parin
295
296   USE wind_turbine_model_mod,                                                 &
297       ONLY:  wtm_parin,                                                       &
298              wtm_check_parameters,                                            &
299              wtm_init_arrays,                                                 &
300              wtm_init,                                                        &
301              wtm_rrd_global,                                                  &
302              wtm_wrd_global
303
304   IMPLICIT NONE
305
306   PRIVATE
307
308!
309!- Public functions
310   PUBLIC                                                                      &
311      module_interface_parin,                                                  &
312      module_interface_check_parameters,                                       &
313      module_interface_check_data_output_ts,                                   &
314      module_interface_check_data_output_pr,                                   &
315      module_interface_check_data_output,                                      &
316      module_interface_init_masks,                                             &
317      module_interface_define_netcdf_grid,                                     &
318      module_interface_init_arrays,                                            &
319      module_interface_init,                                                   &
320      module_interface_header,                                                 &
321      module_interface_actions,                                                &
322      module_interface_swap_timelevel,                                         &
323      module_interface_3d_data_averaging,                                      &
324      module_interface_data_output_2d,                                         &
325      module_interface_data_output_3d,                                         &
326      module_interface_statistics,                                             &
327      module_interface_rrd_global,                                             &
328      module_interface_wrd_global,                                             &
329      module_interface_rrd_local,                                              &
330      module_interface_wrd_local,                                              &
331      module_interface_last_actions
332
333
334   INTERFACE module_interface_parin
335      MODULE PROCEDURE module_interface_parin
336   END INTERFACE module_interface_parin
337
338   INTERFACE module_interface_check_parameters
339      MODULE PROCEDURE module_interface_check_parameters
340   END INTERFACE module_interface_check_parameters
341
342   INTERFACE module_interface_check_data_output_ts
343      MODULE PROCEDURE module_interface_check_data_output_ts
344   END INTERFACE module_interface_check_data_output_ts
345
346   INTERFACE module_interface_check_data_output_pr
347      MODULE PROCEDURE module_interface_check_data_output_pr
348   END INTERFACE module_interface_check_data_output_pr
349
350   INTERFACE module_interface_check_data_output
351      MODULE PROCEDURE module_interface_check_data_output
352   END INTERFACE module_interface_check_data_output
353
354   INTERFACE module_interface_init_masks
355      MODULE PROCEDURE module_interface_init_masks
356   END INTERFACE module_interface_init_masks
357
358   INTERFACE module_interface_define_netcdf_grid
359      MODULE PROCEDURE module_interface_define_netcdf_grid
360   END INTERFACE module_interface_define_netcdf_grid
361
362   INTERFACE module_interface_init_arrays
363      MODULE PROCEDURE module_interface_init_arrays
364   END INTERFACE module_interface_init_arrays
365
366   INTERFACE module_interface_init
367      MODULE PROCEDURE module_interface_init
368   END INTERFACE module_interface_init
369
370   INTERFACE module_interface_header
371      MODULE PROCEDURE module_interface_header
372   END INTERFACE module_interface_header
373
374   INTERFACE module_interface_actions
375      MODULE PROCEDURE module_interface_actions
376      MODULE PROCEDURE module_interface_actions_ij
377   END INTERFACE module_interface_actions
378
379   INTERFACE module_interface_swap_timelevel
380      MODULE PROCEDURE module_interface_swap_timelevel
381   END INTERFACE module_interface_swap_timelevel
382
383   INTERFACE module_interface_3d_data_averaging
384      MODULE PROCEDURE module_interface_3d_data_averaging
385   END INTERFACE module_interface_3d_data_averaging
386
387   INTERFACE module_interface_data_output_2d
388      MODULE PROCEDURE module_interface_data_output_2d
389   END INTERFACE module_interface_data_output_2d
390
391   INTERFACE module_interface_data_output_3d
392      MODULE PROCEDURE module_interface_data_output_3d
393   END INTERFACE module_interface_data_output_3d
394
395   INTERFACE module_interface_statistics
396      MODULE PROCEDURE module_interface_statistics
397   END INTERFACE module_interface_statistics
398
399   INTERFACE module_interface_rrd_global
400      MODULE PROCEDURE module_interface_rrd_global
401   END INTERFACE module_interface_rrd_global
402
403   INTERFACE module_interface_wrd_global
404      MODULE PROCEDURE module_interface_wrd_global
405   END INTERFACE module_interface_wrd_global
406
407   INTERFACE module_interface_rrd_local
408      MODULE PROCEDURE module_interface_rrd_local
409   END INTERFACE module_interface_rrd_local
410
411   INTERFACE module_interface_wrd_local
412      MODULE PROCEDURE module_interface_wrd_local
413   END INTERFACE module_interface_wrd_local
414
415   INTERFACE module_interface_last_actions
416      MODULE PROCEDURE module_interface_last_actions
417   END INTERFACE module_interface_last_actions
418
419
420CONTAINS
421
422
423!------------------------------------------------------------------------------!
424! Description:
425! ------------
426!> Read module-specific parameter namelists
427!------------------------------------------------------------------------------!
428SUBROUTINE module_interface_parin
429
430
431   CALL bio_parin
432   CALL bcm_parin
433   CALL chem_parin
434   CALL flight_parin ! ToDo: rename module to match filename
435   CALL gust_parin
436   CALL im_parin
437   CALL lsm_parin
438   ! ToDo: create parin routine for large_scale_forcing and nudging (should be seperate modules or new module switch)
439   CALL mas_parin
440   CALL nesting_offl_parin
441   CALL ocean_parin
442   CALL pcm_parin
443   CALL radiation_parin
444   CALL salsa_parin
445   CALL spectra_parin
446   CALL surface_data_output_parin
447   CALL stg_parin
448   CALL user_parin ! ToDo: make user code a single Fortran module
449   CALL usm_parin
450   CALL vm_parin
451   CALL wtm_parin
452
453   CALL package_parin ! ToDo: deprecated, needs to be dissolved
454
455
456END SUBROUTINE module_interface_parin
457
458
459!------------------------------------------------------------------------------!
460! Description:
461! ------------
462!> Perform module-specific initialization checks
463!------------------------------------------------------------------------------!
464SUBROUTINE module_interface_check_parameters
465
466
467   IF ( biometeorology )       CALL bio_check_parameters
468   IF ( bulk_cloud_model )     CALL bcm_check_parameters
469   IF ( air_chemistry )        CALL chem_check_parameters
470   IF ( gust_module_enabled )  CALL gust_check_parameters
471   IF ( land_surface )         CALL lsm_check_parameters
472   IF ( large_scale_forcing  .OR.  nudging )  CALL lsf_nudging_check_parameters ! ToDo: create single module switch
473   IF ( nesting_offline )      CALL nesting_offl_check_parameters
474   IF ( ocean_mode )           CALL ocean_check_parameters
475   IF ( plant_canopy )         CALL pcm_check_parameters
476   IF ( radiation )            CALL radiation_check_parameters
477   IF ( salsa )                CALL salsa_check_parameters
478   IF ( calculate_spectra )    CALL spectra_check_parameters
479   IF ( surface_output )       CALL surface_data_output_check_parameters
480   IF ( syn_turb_gen )         CALL stg_check_parameters
481   IF ( urban_surface )        CALL usm_check_parameters
482   IF ( wind_turbine )         CALL wtm_check_parameters
483   IF ( user_module_enabled )  CALL user_check_parameters
484
485
486END SUBROUTINE module_interface_check_parameters
487
488
489!------------------------------------------------------------------------------!
490! Description:
491! ------------
492!> Check module-specific data output of timeseries
493!------------------------------------------------------------------------------!
494SUBROUTINE module_interface_check_data_output_ts( dots_max, dots_num, dots_label, dots_unit )
495
496
497   INTEGER(iwp),      INTENT(IN)    ::  dots_max !< variable output array index
498   INTEGER(iwp),      INTENT(INOUT)    ::  dots_num !< variable output array index
499   CHARACTER (LEN=*), DIMENSION(dots_max), INTENT(INOUT) :: dots_label
500   CHARACTER (LEN=*), DIMENSION(dots_max), INTENT(INOUT) :: dots_unit
501
502
503   IF ( radiation )  THEN
504      CALL radiation_check_data_output_ts( dots_max, dots_num, dots_label, dots_unit )
505   ENDIF
506
507   IF ( user_module_enabled )  THEN
508      CALL user_check_data_output_ts( dots_max, dots_num, dots_label, dots_unit )
509   ENDIF
510
511
512END SUBROUTINE module_interface_check_data_output_ts
513
514
515!------------------------------------------------------------------------------!
516! Description:
517! ------------
518!> Check module-specific data output of profiles
519!------------------------------------------------------------------------------!
520SUBROUTINE module_interface_check_data_output_pr( variable, var_count, unit,   &
521                                                dopr_unit )
522
523
524   CHARACTER (LEN=*), INTENT(IN)    ::  variable  !< variable name
525   INTEGER(iwp),      INTENT(IN)    ::  var_count !< variable output array index
526   CHARACTER (LEN=*), INTENT(INOUT) ::  unit      !< physical unit of variable
527   CHARACTER (LEN=*), INTENT(OUT)   ::  dopr_unit !< local value of dopr_unit
528
529   IF ( unit == 'illegal' .AND.  bulk_cloud_model )  THEN
530      CALL bcm_check_data_output_pr( variable, var_count, unit, dopr_unit )
531   ENDIF
532
533   IF ( unit == 'illegal' .AND.  air_chemistry )  THEN
534      CALL chem_check_data_output_pr( variable, var_count, unit, dopr_unit )
535   ENDIF
536
537   IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
538      CALL gust_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 lsm_check_data_output_pr( variable, var_count, unit, dopr_unit )
543   ENDIF
544
545   IF ( unit == 'illegal' )  THEN ! ToDo: add module switch if possible
546      CALL lsf_nudging_check_data_output_pr( variable, var_count, unit, dopr_unit )
547   ENDIF
548
549   IF ( unit == 'illegal'  .AND.  ocean_mode )  THEN
550      CALL ocean_check_data_output_pr( variable, var_count, unit, dopr_unit )
551   ENDIF
552
553   IF ( unit == 'illegal'  .AND.  radiation )  THEN
554      CALL radiation_check_data_output_pr( variable, var_count, unit, dopr_unit )
555   ENDIF
556
557   IF ( unit == 'illegal'  .AND.  user_module_enabled )  THEN
558      unit = '' ! ToDo: Seems like a hack. Find a general soultion!
559      CALL user_check_data_output_pr( variable, var_count, unit, dopr_unit )
560   ENDIF
561
562
563
564END SUBROUTINE module_interface_check_data_output_pr
565
566!------------------------------------------------------------------------------!
567! Description:
568! ------------
569!> Check module-specific 2D and 3D data output
570!------------------------------------------------------------------------------!
571SUBROUTINE module_interface_check_data_output( variable, unit, i, ilen, k )
572
573
574   CHARACTER (LEN=*), INTENT(IN)    ::  variable !< variable name
575   CHARACTER (LEN=*), INTENT(INOUT) ::  unit     !< physical unit of variable
576
577   INTEGER(iwp),      INTENT(IN)    :: i         !< ToDo: remove dummy argument, instead pass string from data_output
578   INTEGER(iwp),      INTENT(IN)    :: ilen      !< ToDo: remove dummy argument, instead pass string from data_output
579   INTEGER(iwp),      INTENT(IN)    :: k         !< ToDo: remove dummy argument, instead pass string from data_output
580
581   IF ( unit == 'illegal'  .AND.  biometeorology )  THEN
582      CALL bio_check_data_output( variable, unit, i, ilen, k )
583   ENDIF
584
585   IF ( unit == 'illegal'  .AND.  bulk_cloud_model  )  THEN
586      CALL bcm_check_data_output( variable, unit )
587   ENDIF
588
589   IF ( unit == 'illegal'  .AND.  air_chemistry                                &
590        .AND.  (variable(1:3) == 'kc_' .OR. variable(1:3) == 'em_') )  THEN  ! ToDo: remove aditional conditions
591      CALL chem_check_data_output( variable, unit, i, ilen, k )
592   ENDIF
593
594   IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
595      CALL gust_check_data_output( variable, unit )
596   ENDIF
597
598   IF ( unit == 'illegal' )  THEN  ! ToDo: add module switch if possible
599      CALL lsm_check_data_output( variable, unit, i, ilen, k )
600   ENDIF
601
602   IF ( unit == 'illegal'  .AND.  ocean_mode )  THEN
603      CALL ocean_check_data_output( variable, unit )
604   ENDIF
605
606   IF ( unit == 'illegal'  .AND.  plant_canopy                                 &
607        .AND.  variable(1:4) == 'pcm_' )  THEN  ! ToDo: remove aditional conditions
608      CALL pcm_check_data_output( variable, unit )
609   ENDIF
610
611   IF ( unit == 'illegal'  .AND.  radiation )  THEN
612      CALL radiation_check_data_output( variable, unit, i, ilen, k )
613   ENDIF
614
615   IF ( unit == 'illegal' .AND. salsa ) THEN
616       CALL salsa_check_data_output( variable, unit )
617   ENDIF
618
619   IF ( unit == 'illegal'  .AND.  urban_surface                      &
620        .AND.  variable(1:4) == 'usm_' )  THEN  ! ToDo: remove aditional conditions
621       CALL usm_check_data_output( variable, unit )
622   ENDIF
623
624   IF ( unit == 'illegal'  .AND.  user_module_enabled )  THEN
625      unit = ''
626      CALL user_check_data_output( variable, unit )
627   ENDIF
628
629
630END SUBROUTINE module_interface_check_data_output
631
632
633!------------------------------------------------------------------------------!
634!
635! Description:
636! ------------
637!> Interface for init_masks. ToDo: get rid of these redundant calls!
638!------------------------------------------------------------------------------!
639SUBROUTINE module_interface_init_masks( variable, unit )
640
641
642   CHARACTER (LEN=*), INTENT(IN)    ::  variable !< variable name
643   CHARACTER (LEN=*), INTENT(INOUT) ::  unit     !< physical unit of variable
644
645   IF ( unit == 'illegal'  .AND.  air_chemistry                                &
646        .AND.  (variable(1:3) == 'kc_' .OR. variable(1:3) == 'em_') )  THEN  ! ToDo: remove aditional conditions
647      CALL chem_check_data_output( variable, unit, 0, 0, 0 )
648   ENDIF
649
650   IF ( unit == 'illegal'  .AND.  radiation )  THEN
651      CALL radiation_check_data_output( variable, unit, 0, 0, 0 )
652   ENDIF
653
654   IF ( unit == 'illegal'  .AND.  salsa )  THEN
655      CALL salsa_check_data_output( variable, unit )
656   ENDIF
657
658   IF ( unit == 'illegal'  .AND.  user_module_enabled )  THEN
659      unit = ''
660      CALL user_check_data_output( variable, unit )
661   ENDIF
662
663
664END SUBROUTINE module_interface_init_masks
665
666
667!------------------------------------------------------------------------------!
668!
669! Description:
670! ------------
671!> Define appropriate grid for module-specific netcdf output variables.
672!------------------------------------------------------------------------------!
673SUBROUTINE module_interface_define_netcdf_grid( var, found,                    &
674                                                grid_x, grid_y, grid_z )
675
676
677   CHARACTER (LEN=*), INTENT(IN)  ::  var    !< variable name
678   LOGICAL,           INTENT(OUT) ::  found  !< indicates if variable was found
679   CHARACTER (LEN=*), INTENT(OUT) ::  grid_x !< netcdf dimension in x-direction
680   CHARACTER (LEN=*), INTENT(OUT) ::  grid_y !< netcdf dimension in y-direction
681   CHARACTER (LEN=*), INTENT(OUT) ::  grid_z !< netcdf dimension in z-direction
682!
683!--As long as no action is done in this subroutine, initialize strings with   
684!--intent(out) attribute, in order to avoid compiler warnings.
685   found  = .FALSE.
686   grid_x = 'none'
687   grid_y = 'none'
688   grid_z = 'none'
689
690END SUBROUTINE module_interface_define_netcdf_grid
691
692
693!------------------------------------------------------------------------------!
694! Description:
695! ------------
696!> Allocate module-specific arrays and pointers
697!------------------------------------------------------------------------------!
698SUBROUTINE module_interface_init_arrays
699
700
701   IF ( bulk_cloud_model    )  CALL bcm_init_arrays
702   IF ( air_chemistry       )  CALL chem_init_arrays
703   IF ( gust_module_enabled )  CALL gust_init_arrays
704   IF ( land_surface        )  CALL lsm_init_arrays
705   IF ( ocean_mode          )  CALL ocean_init_arrays
706   IF ( salsa               )  CALL salsa_init_arrays
707   IF ( urban_surface       )  CALL usm_init_arrays
708   IF ( wind_turbine        )  CALL wtm_init_arrays
709
710
711END SUBROUTINE module_interface_init_arrays
712
713
714!------------------------------------------------------------------------------!
715! Description:
716! ------------
717!> Perform module-specific initialization
718!------------------------------------------------------------------------------!
719SUBROUTINE module_interface_init
720
721
722   IF ( biometeorology      )  CALL bio_init
723   IF ( bulk_cloud_model    )  CALL bcm_init
724   IF ( air_chemistry       )  CALL chem_init
725   IF ( virtual_flight      )  CALL flight_init
726   IF ( gust_module_enabled )  CALL gust_init
727   IF ( indoor_model        )  CALL im_init
728   IF ( large_scale_forcing )  CALL lsf_init
729   IF ( land_surface        )  CALL lsm_init
730   IF ( nudging             )  CALL nudge_init
731   IF ( ocean_mode          )  CALL ocean_init
732   IF ( plant_canopy        )  CALL pcm_init
733   IF ( salsa               )  CALL salsa_init
734   IF ( urban_surface       )  CALL usm_init
735   IF ( virtual_measurement )  CALL vm_init
736   IF ( wind_turbine        )  CALL wtm_init
737   IF ( radiation           )  CALL radiation_init
738   IF ( user_module_enabled )  CALL user_init
739
740
741END SUBROUTINE module_interface_init
742
743
744!------------------------------------------------------------------------------!
745! Description:
746! ------------
747!> Gather module-specific header output
748!------------------------------------------------------------------------------!
749SUBROUTINE module_interface_header( io )
750
751
752   INTEGER(iwp), INTENT(IN) ::  io  !< unit of the output file
753
754
755   IF ( biometeorology      )  CALL bio_header ( io )
756   IF ( bulk_cloud_model    )  CALL bcm_header( io )
757   IF ( air_chemistry       )  CALL chem_header ( io )
758   IF ( virtual_flight      )  CALL flight_header( io )
759   IF ( gust_module_enabled )  CALL gust_header( io )
760   IF ( land_surface        )  CALL lsm_header( io )
761   IF ( large_scale_forcing )  CALL lsf_nudging_header( io )
762   IF ( nesting_offline     )  CALL nesting_offl_header( io )
763   IF ( ocean_mode          )  CALL ocean_header( io )
764   IF ( plant_canopy        )  CALL pcm_header( io )
765   IF ( radiation           )  CALL radiation_header( io )
766   IF ( salsa               )  CALL salsa_header( io )
767   IF ( calculate_spectra   )  CALL spectra_header( io )
768   IF ( syn_turb_gen        )  CALL stg_header( io )
769   IF ( user_module_enabled )  CALL user_header( io )
770
771
772END SUBROUTINE module_interface_header
773
774
775!------------------------------------------------------------------------------!
776! Description:
777! ------------
778!> Perform module-specific actions while in time-integration (cache-optimized)
779!------------------------------------------------------------------------------!
780SUBROUTINE module_interface_actions( location )
781
782
783   CHARACTER (LEN=*), INTENT(IN) ::  location !< call location string
784
785
786   IF ( gust_module_enabled )  CALL gust_actions( location )
787   IF ( user_module_enabled )  CALL user_actions( location )
788
789
790END SUBROUTINE module_interface_actions
791
792
793!------------------------------------------------------------------------------!
794! Description:
795! ------------
796!> Perform module-specific actions while in time-integration (vector-optimized)
797!------------------------------------------------------------------------------!
798SUBROUTINE module_interface_actions_ij( i, j, location )
799
800
801   INTEGER(iwp),      INTENT(IN) ::  i         !< grid index in x-direction
802   INTEGER(iwp),      INTENT(IN) ::  j         !< grid index in y-direction
803   CHARACTER (LEN=*), INTENT(IN) ::  location  !< call location string
804
805
806   IF ( gust_module_enabled )  CALL gust_actions( i, j, location )
807   IF ( user_module_enabled )  CALL user_actions( i, j, location )
808
809
810END SUBROUTINE module_interface_actions_ij
811
812
813!------------------------------------------------------------------------------!
814! Description:
815! ------------
816!> Swap the timelevel pointers for module-specific arrays
817!------------------------------------------------------------------------------!
818SUBROUTINE module_interface_swap_timelevel ( swap_mode )
819
820
821   INTEGER(iwp), INTENT(IN) :: swap_mode !< determines procedure of pointer swap
822
823   IF ( bulk_cloud_model    )  CALL bcm_swap_timelevel( swap_mode )
824   IF ( air_chemistry       )  CALL chem_swap_timelevel( swap_mode )
825   IF ( gust_module_enabled )  CALL gust_swap_timelevel( swap_mode )
826   IF ( land_surface        )  CALL lsm_swap_timelevel( swap_mode )
827   IF ( ocean_mode          )  CALL ocean_swap_timelevel( swap_mode )
828   IF ( salsa               )  CALL salsa_swap_timelevel( swap_mode )
829   IF ( urban_surface       )  CALL usm_swap_timelevel( swap_mode )
830
831
832END SUBROUTINE module_interface_swap_timelevel
833
834
835!------------------------------------------------------------------------------!
836!
837! Description:
838! ------------
839!> Perform module-specific averaging of 3D data
840!------------------------------------------------------------------------------!
841SUBROUTINE module_interface_3d_data_averaging( mode, variable )
842
843
844   CHARACTER (LEN=*), INTENT(IN) ::  mode     !< averaging interface mode
845   CHARACTER (LEN=*), INTENT(IN) ::  variable !< variable name
846
847   IF ( biometeorology      )  CALL bio_3d_data_averaging( mode, variable )
848   IF ( bulk_cloud_model    )  CALL bcm_3d_data_averaging( mode, variable )
849   IF ( air_chemistry       )  CALL chem_3d_data_averaging( mode, variable )
850   IF ( gust_module_enabled )  CALL gust_3d_data_averaging( mode, variable )
851   IF ( land_surface        )  CALL lsm_3d_data_averaging( mode, variable )
852   IF ( ocean_mode          )  CALL ocean_3d_data_averaging( mode, variable )
853   IF ( radiation           )  CALL radiation_3d_data_averaging( mode, variable )
854   IF ( salsa               )  CALL salsa_3d_data_averaging( mode, variable )
855   IF ( urban_surface       )  CALL usm_3d_data_averaging( mode, variable )
856   IF ( user_module_enabled )  CALL user_3d_data_averaging( mode, variable )
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  .AND.  user_module_enabled )  THEN
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  .AND.  user_module_enabled )  THEN
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   IF ( user_module_enabled )  CALL user_statistics( mode, sr, tn )
1027
1028
1029END SUBROUTINE module_interface_statistics
1030
1031
1032!------------------------------------------------------------------------------!
1033! Description:
1034! ------------
1035!> Read module-specific restart data globaly shared by all MPI ranks
1036!------------------------------------------------------------------------------!
1037SUBROUTINE module_interface_rrd_global( variable, found )
1038
1039
1040   CHARACTER (LEN=*), INTENT(IN)  ::  variable !< name of global variable
1041   LOGICAL,           INTENT(OUT) ::  found    !< flag if variable was found
1042
1043   IF ( .NOT. found )  CALL bio_rrd_global( found ) ! ToDo: change interface to pass variable
1044   IF ( .NOT. found )  CALL bcm_rrd_global( found ) ! ToDo: change interface to pass variable
1045   IF ( .NOT. found )  CALL flight_rrd_global( found ) ! ToDo: change interface to pass variable
1046   IF ( .NOT. found )  CALL gust_rrd_global( found ) ! ToDo: change interface to pass variable
1047   IF ( .NOT. found )  CALL ocean_rrd_global( found ) ! ToDo: change interface to pass variable
1048   IF ( .NOT. found )  CALL stg_rrd_global ( found ) ! ToDo: change interface to pass variable
1049   IF ( .NOT. found )  CALL wtm_rrd_global( found ) ! ToDo: change interface to pass variable
1050   IF ( .NOT. found )  CALL user_rrd_global( found ) ! ToDo: change interface to pass variable
1051
1052
1053END SUBROUTINE module_interface_rrd_global
1054
1055
1056!------------------------------------------------------------------------------!
1057! Description:
1058! ------------
1059!> Write module-specific restart data globaly shared by all MPI ranks
1060!------------------------------------------------------------------------------!
1061SUBROUTINE module_interface_wrd_global
1062
1063
1064   IF ( biometeorology )       CALL bio_wrd_global
1065   IF ( bulk_cloud_model )     CALL bcm_wrd_global
1066   IF ( virtual_flight )       CALL flight_wrd_global
1067   IF ( gust_module_enabled )  CALL gust_wrd_global
1068   IF ( ocean_mode )           CALL ocean_wrd_global
1069   IF ( syn_turb_gen )         CALL stg_wrd_global
1070   IF ( wind_turbine )         CALL wtm_wrd_global
1071   IF ( user_module_enabled )  CALL user_wrd_global
1072
1073
1074END SUBROUTINE module_interface_wrd_global
1075
1076
1077!------------------------------------------------------------------------------!
1078! Description:
1079! ------------
1080!> Read module-specific restart data specific to local MPI ranks
1081!------------------------------------------------------------------------------!
1082SUBROUTINE module_interface_rrd_local( variable, file_index, map_index,        &
1083                                       nxlf, nxlc, nxl_on_file,                &
1084                                       nxrf, nxrc, nxr_on_file,                &
1085                                       nynf, nync, nyn_on_file,                &
1086                                       nysf, nysc, nys_on_file,                &
1087                                       tmp_2d, tmp_3d, found )
1088
1089
1090   CHARACTER (LEN=*), INTENT(IN)  ::  variable     !< name of global variable
1091   INTEGER(iwp),      INTENT(IN)  ::  file_index   !<
1092   INTEGER(iwp),      INTENT(IN)  ::  map_index    !<
1093   INTEGER(iwp),      INTENT(IN)  ::  nxlc         !<
1094   INTEGER(iwp),      INTENT(IN)  ::  nxlf         !<
1095   INTEGER(iwp),      INTENT(IN)  ::  nxl_on_file  !<
1096   INTEGER(iwp),      INTENT(IN)  ::  nxrc         !<
1097   INTEGER(iwp),      INTENT(IN)  ::  nxrf         !<
1098   INTEGER(iwp),      INTENT(IN)  ::  nxr_on_file  !<
1099   INTEGER(iwp),      INTENT(IN)  ::  nync         !<
1100   INTEGER(iwp),      INTENT(IN)  ::  nynf         !<
1101   INTEGER(iwp),      INTENT(IN)  ::  nyn_on_file  !<
1102   INTEGER(iwp),      INTENT(IN)  ::  nysc         !<
1103   INTEGER(iwp),      INTENT(IN)  ::  nysf         !<
1104   INTEGER(iwp),      INTENT(IN)  ::  nys_on_file  !<
1105   LOGICAL,           INTENT(OUT) ::  found        !< flag if variable was found
1106
1107   REAL(wp), DIMENSION(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp), INTENT(OUT) :: tmp_2d   !<
1108   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   !<
1109
1110
1111   IF ( .NOT. found ) CALL bio_rrd_local(                                      &
1112                              found                                            &
1113                           )
1114
1115   IF ( .NOT. found ) CALL bcm_rrd_local(                                      &
1116                              file_index, map_index,                           &
1117                              nxlf, nxlc, nxl_on_file,                         &
1118                              nxrf, nxrc, nxr_on_file,                         &
1119                              nynf, nync, nyn_on_file,                         &
1120                              nysf, nysc, nys_on_file,                         &
1121                              tmp_2d, tmp_3d, found                            &
1122                           ) ! ToDo: change interface to pass variable
1123
1124   IF ( .NOT. found ) CALL chem_rrd_local(                                     &
1125                              file_index, map_index,                           &
1126                              nxlf, nxlc, nxl_on_file,                         &
1127                              nxrf, nxrc, nxr_on_file,                         &
1128                              nynf, nync, nyn_on_file,                         &
1129                              nysf, nysc, nys_on_file,                         &
1130                              tmp_3d, found                                    &
1131                           ) ! ToDo: change interface to pass variable
1132
1133   IF ( .NOT. found ) CALL gust_rrd_local(                                     &
1134                              file_index, map_index,                           &
1135                              nxlf, nxlc, nxl_on_file,                         &
1136                              nxrf, nxrc, nxr_on_file,                         &
1137                              nynf, nync, nyn_on_file,                         &
1138                              nysf, nysc, nys_on_file,                         &
1139                              tmp_2d, tmp_3d, found                            &
1140                           ) ! ToDo: change interface to pass variable
1141
1142   IF ( .NOT. found ) CALL lsm_rrd_local(                                      &
1143                              file_index, map_index,                           &
1144                              nxlf, nxlc, nxl_on_file,                         &
1145                              nxrf, nxrc, nxr_on_file,                         &
1146                              nynf, nync, nyn_on_file,                         &
1147                              nysf, nysc, nys_on_file,                         &
1148                              tmp_2d, found                                    &
1149                           ) ! ToDo: change interface to pass variable
1150
1151   IF ( .NOT. found ) CALL ocean_rrd_local(                                    &
1152                              file_index, map_index,                           &
1153                              nxlf, nxlc, nxl_on_file,                         &
1154                              nxrf, nxrc, nxr_on_file,                         &
1155                              nynf, nync, nyn_on_file,                         &
1156                              nysf, nysc, nys_on_file,                         &
1157                              tmp_2d, tmp_3d, found                            &
1158                           ) ! ToDo: change interface to pass variable
1159
1160   IF ( .NOT. found ) CALL radiation_rrd_local(                                &
1161                              file_index, map_index,                           &
1162                              nxlf, nxlc, nxl_on_file,                         &
1163                              nxrf, nxrc, nxr_on_file,                         &
1164                              nynf, nync, nyn_on_file,                         &
1165                              nysf, nysc, nys_on_file,                         &
1166                              tmp_2d, tmp_3d, found                            &
1167                           ) ! ToDo: change interface to pass variable
1168
1169   IF ( .NOT. found ) CALL salsa_rrd_local(                                    &
1170                              file_index, map_index,                           &
1171                              nxlf, nxlc, nxl_on_file,                         &
1172                              nxrf, nxrc, nxr_on_file,                         &
1173                              nynf, nync, nyn_on_file,                         &
1174                              nysf, nysc, nys_on_file,                         &
1175                              tmp_3d, found                                    &
1176                           ) ! ToDo: change interface to pass variable
1177
1178   IF ( .NOT. found ) CALL usm_rrd_local(                                      &
1179                              file_index, map_index,                           &
1180                              nxlf, nxlc, nxl_on_file,                         &
1181                              nxrf, nxrc, nxr_on_file,                         &
1182                              nynf, nync, nyn_on_file,                         &
1183                              nysf, nysc, nys_on_file,                         &
1184                              found                                            &
1185                           ) ! ToDo: change interface to pass variable
1186
1187   IF ( .NOT. found ) CALL user_rrd_local(                                     &
1188                              file_index, map_index,                           &
1189                              nxlf, nxlc, nxl_on_file,                         &
1190                              nxrf, nxrc, nxr_on_file,                         &
1191                              nynf, nync, nyn_on_file,                         &
1192                              nysf, nysc, nys_on_file,                         &
1193                              tmp_3d, found                                    &
1194                           ) ! ToDo: change interface to pass variable
1195
1196
1197END SUBROUTINE module_interface_rrd_local
1198
1199
1200!------------------------------------------------------------------------------!
1201! Description:
1202! ------------
1203!> Write module-specific restart data specific to local MPI ranks
1204!------------------------------------------------------------------------------!
1205SUBROUTINE module_interface_wrd_local
1206
1207
1208   IF ( biometeorology )       CALL bio_wrd_local
1209   IF ( bulk_cloud_model )     CALL bcm_wrd_local
1210   IF ( air_chemistry )        CALL chem_wrd_local
1211   IF ( gust_module_enabled )  CALL gust_wrd_local
1212   IF ( land_surface )         CALL lsm_wrd_local
1213   IF ( ocean_mode )           CALL ocean_wrd_local
1214   IF ( radiation )            CALL radiation_wrd_local
1215   IF ( salsa )                CALL salsa_wrd_local
1216   IF ( urban_surface )        CALL usm_wrd_local
1217   IF ( user_module_enabled )  CALL user_wrd_local
1218
1219
1220END SUBROUTINE module_interface_wrd_local
1221
1222
1223!------------------------------------------------------------------------------!
1224! Description:
1225! ------------
1226!> Perform module-specific last actions before the program terminates
1227!------------------------------------------------------------------------------!
1228SUBROUTINE module_interface_last_actions
1229
1230   IF ( virtual_measurement )  CALL vm_last_actions
1231   IF ( user_module_enabled )  CALL user_last_actions
1232
1233
1234END SUBROUTINE module_interface_last_actions
1235
1236
1237END MODULE module_interface
Note: See TracBrowser for help on using the repository browser.