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

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

Bugfix, do not set boundary conditions for pt in neutral runs; enable checks + additional checks for virtual measurements

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