Changeset 3294 for palm/trunk/SOURCE


Ignore:
Timestamp:
Oct 1, 2018 2:37:10 AM (4 years ago)
Author:
raasch
Message:

modularization of the ocean code

Location:
palm/trunk/SOURCE
Files:
2 added
2 deleted
28 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/Makefile

    r3274 r3294  
    2525# -----------------
    2626# $Id$
     27# changes related to modularization of the ocean mode,
     28# bugfix: dependency to advec_ws was missed in chemistry_model_mod
     29#
     30# 3274 2018-09-24 15:42:55Z knoop
    2731# Added palm dependency of multi_agent_system_mod, because of mas_last_actions
    2832# call at the end of palm run
     
    494498        disturb_field.f90 \
    495499        disturb_heatflux.f90 \
    496         eqn_state_seawater.f90 \
    497500        exchange_horiz_2d.f90 \
    498501        exchange_horiz.f90 \
     
    509512        init_grid.f90 \
    510513        init_masks.f90 \
    511         init_ocean.f90 \
    512514        init_pegrid.f90 \
    513515        init_pt_anomaly.f90 \
    514516        init_rankine.f90 \
    515517        init_slope.f90 \
     518        init_vertical_profiles.f90 \
    516519        interaction_droplets_ptq.f90 \
    517520        land_surface_model_mod.f90 \
     
    548551        netcdf_data_input_mod.f90 \
    549552        netcdf_interface_mod.f90 \
     553        ocean_mod.f90 \
    550554        outflow_turbulence.f90 \
    551555        package_parin.f90 \
     
    707711        mod_kinds.o \
    708712        modules.o \
     713        ocean_mod.o \
    709714        radiation_model_mod.o \
    710715        turbulence_closure_mod.o \
     
    753758        chemistry_model_mod.o \
    754759        gust_mod.o \
     760        init_vertical_profiles.o \
    755761        land_surface_model_mod.o \
    756762        large_scale_forcing_nudging_mod.o \
     
    760766        netcdf_data_input_mod.o \
    761767        netcdf_interface_mod.o \
     768        ocean_mod.o \
    762769        plant_canopy_model_mod.o \
    763770        pmc_interface_mod.o \
     
    772779        wind_turbine_model_mod.o
    773780chemistry_model_mod.o: \
     781        advec_ws.o \
    774782        chem_gasphase_mod.o \
    775783        chem_modules.o \
     
    867875        modules.o \
    868876        netcdf_interface_mod.o \
     877        ocean_mod.o \
    869878        radiation_model_mod.o \
    870879        surface_mod.o \
     
    882891        modules.o \
    883892        netcdf_interface_mod.o \
     893        ocean_mod.o \
    884894        turbulence_closure_mod.o \
    885895        urban_surface_mod.o
     
    914924        modules.o \
    915925        random_generator_parallel_mod.o \
    916         surface_mod.o
    917 eqn_state_seawater.o: \
    918         mod_kinds.o \
    919         modules.o \
    920926        surface_mod.o
    921927exchange_horiz.o: \
     
    963969        modules.o \
    964970        netcdf_interface_mod.o \
     971        ocean_mod.o \
    965972        plant_canopy_model_mod.o \
    966973        pmc_handle_communicator_mod.o \
     
    9931000        netcdf_data_input_mod.o \
    9941001        netcdf_interface_mod.o \
     1002        ocean_mod.o \
    9951003        plant_canopy_model_mod.o \
    9961004        pmc_interface_mod.o \
     
    10301038        modules.o \
    10311039        netcdf_interface_mod.o
    1032 init_ocean.o: \
    1033         basic_constants_and_equations_mod.o \
    1034         eqn_state_seawater.o \
    1035         mod_kinds.o \
    1036         modules.o
    10371040init_pegrid.o: \
    10381041        mod_kinds.o \
     
    10521055        mod_kinds.o \
    10531056        modules.o
     1057init_vertical_profiles.o: \
     1058        modules.o \
     1059        mod_kinds.o
    10541060interaction_droplets_ptq.o: \
    10551061        basic_constants_and_equations_mod.o \
     
    12381244        mod_kinds.o \
    12391245        modules.o \
     1246        ocean_mod.o \
    12401247        radiation_model_mod.o \
    12411248        spectra_mod.o \
     
    12431250        urban_surface_mod.o \
    12441251        uv_exposure_model_mod.o
     1252ocean_mod.o: \
     1253 advec_s_pw.o \
     1254        advec_s_up.o \
     1255        advec_ws.o \
     1256        basic_constants_and_equations_mod.o \
     1257        diffusion_s.o \
     1258        init_vertical_profiles.o \
     1259        mod_kinds.o \
     1260        modules.o \
     1261        pmc_interface_mod.o \
     1262        user_actions.o
    12451263outflow_turbulence.o: \
    12461264        cpulog_mod.o \
     
    12781296        multi_agent_system_mod.o \
    12791297        netcdf_interface_mod.o \
     1298        ocean_mod.o \
    12801299        plant_canopy_model_mod.o \
    12811300        pmc_interface_mod.o \
     
    13871406        diffusion_v.o \
    13881407        diffusion_w.o \
    1389         eqn_state_seawater.o \
    13901408        large_scale_forcing_nudging_mod.o \
    13911409        mod_kinds.o \
     
    13931411        modules.o \
    13941412        modules.o \
     1413        ocean_mod.o \
    13951414        plant_canopy_model_mod.o \
    13961415        radiation_model_mod.o \
     
    15081527        mod_kinds.o \
    15091528        modules.o \
     1529 ocean_mod.o \
    15101530        pmc_interface_mod.o \
    15111531        turbulence_closure_mod.o \
     
    15381558        modules.o \
    15391559        multi_agent_system_mod.o \
     1560 ocean_mod.o \
    15401561        pmc_interface_mod.o \
    15411562        prognostic_equations.o \
     
    15951616        mod_particle_attributes.o \
    15961617        modules.o \
     1618 ocean_mod.o \
    15971619        plant_canopy_model_mod.o \
    15981620        pmc_interface_mod.o \
     
    17851807        modules.o \
    17861808        netcdf_interface_mod.o \
     1809        ocean_mod.o \
    17871810        radiation_model_mod.o \
    17881811        random_function_mod.o \
  • palm/trunk/SOURCE/advec_ws.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! ocean renamed ocean_mode
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    293296
    294297       USE control_parameters,                                                 &
    295            ONLY:  humidity, loop_optimization, passive_scalar, ocean,          &
     298           ONLY:  humidity, loop_optimization, passive_scalar, ocean_mode,     &
    296299                  rans_tke_e, ws_scheme_mom, ws_scheme_sca
    297300
     
    369372          ENDIF
    370373
    371           IF ( ocean )  THEN
     374          IF ( ocean_mode )  THEN
    372375             ALLOCATE( sums_wssas_ws_l(nzb:nzt+1,0:threads_per_task-1) )
    373376             sums_wssas_ws_l = 0.0_wp
     
    454457             ENDIF
    455458
    456              IF ( ocean )  THEN
     459             IF ( ocean_mode )  THEN
    457460                ALLOCATE( flux_s_sa(nzb+1:nzt,0:threads_per_task-1),           &
    458461                          diss_s_sa(nzb+1:nzt,0:threads_per_task-1) )
     
    10841087   
    10851088       USE control_parameters,                                                 &
    1086            ONLY:  humidity, passive_scalar, ocean, ws_scheme_mom, ws_scheme_sca
     1089           ONLY:  humidity, passive_scalar, ocean_mode, ws_scheme_mom,         &
     1090                  ws_scheme_sca
    10871091
    10881092       USE kinds
     
    11231127             sums_wsnrs_ws_l = 0.0_wp
    11241128          ENDIF
    1125           IF ( ocean )  sums_wssas_ws_l = 0.0_wp
     1129          IF ( ocean_mode )  sums_wssas_ws_l = 0.0_wp
    11261130
    11271131       ENDIF
  • palm/trunk/SOURCE/average_3d_data.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    149152    USE control_parameters,                                                    &
    150153        ONLY:  air_chemistry, average_count_3d, doav, doav_n, land_surface,    &
    151                urban_surface, varnamelength
     154               ocean_mode, urban_surface, varnamelength
    152155
    153156    USE cpulog,                                                                &
     
    165168        ONLY:  lsm_3d_data_averaging
    166169
     170    USE ocean_mod,                                                             &
     171        ONLY:  ocean_3d_data_averaging
     172
    167173    USE radiation_model_mod,                                                   &
    168174        ONLY:  radiation, radiation_3d_data_averaging
     
    179185    IMPLICIT NONE
    180186
    181     INTEGER(iwp) ::  i  !< running index
    182     INTEGER(iwp) ::  ii !< running index
    183     INTEGER(iwp) ::  j  !< running index
    184     INTEGER(iwp) ::  k  !< running index
     187    INTEGER(iwp) ::  i   !< loop index
     188    INTEGER(iwp) ::  ii  !< loop index
     189    INTEGER(iwp) ::  j   !< loop index
     190    INTEGER(iwp) ::  k   !< loop index
    185191
    186192    CHARACTER (LEN=varnamelength) ::  trimvar  !< TRIM of output-variable string
     
    392398             ENDIF
    393399
    394           CASE ( 'rho_ocean' )
    395              IF ( ALLOCATED( rho_ocean_av ) ) THEN
    396                 DO  i = nxlg, nxrg
    397                    DO  j = nysg, nyng
    398                       DO  k = nzb, nzt+1
    399                          rho_ocean_av(k,j,i) = rho_ocean_av(k,j,i) / REAL( average_count_3d, KIND=wp )
    400                       ENDDO
    401                    ENDDO
    402                 ENDDO
    403              ENDIF
    404 
    405400          CASE ( 's' )
    406401             IF ( ALLOCATED( s_av ) ) THEN
     
    414409             ENDIF
    415410
    416           CASE ( 'sa' )
    417              IF ( ALLOCATED( sa_av ) ) THEN
    418                 DO  i = nxlg, nxrg
    419                    DO  j = nysg, nyng
    420                       DO  k = nzb, nzt+1
    421                          sa_av(k,j,i) = sa_av(k,j,i) / REAL( average_count_3d, KIND=wp )
    422                       ENDDO
    423                    ENDDO
    424                 ENDDO
    425              ENDIF
    426 
    427411         CASE ( 'shf*' )
    428412             IF ( ALLOCATED( shf_av ) ) THEN
     
    549533             ENDIF
    550534
     535          CASE ( 'usm_output' )
    551536!             
    552 !--       Block of urban surface model outputs   
    553           CASE ( 'usm_output' )
     537!--          Block of urban surface model outputs
    554538             CALL usm_average_3d_data( 'average', doav(ii) )
    555539
    556540          CASE DEFAULT
    557541!
    558 !--          Turbulence closure module
    559              CALL tcm_3d_data_averaging( 'average', doav(ii) )
    560 !
    561 !--          microphysics module quantities
     542!--          Averaging of data from other modules
     543             IF ( air_chemistry )  THEN
     544                CALL chem_3d_data_averaging( 'average', doav(ii) )
     545             ENDIF
     546
    562547             IF ( bulk_cloud_model )  THEN
    563548                CALL bcm_3d_data_averaging( 'average', doav(ii) )
    564549             ENDIF
    565 !
    566 !--          Land surface quantity
     550
     551             IF ( gust_module_enabled )  THEN
     552                CALL gust_3d_data_averaging( 'average', doav(ii) )
     553             ENDIF
     554
    567555             IF ( land_surface )  THEN
    568556                CALL lsm_3d_data_averaging( 'average', doav(ii) )
    569557             ENDIF
    570 !
    571 !--          Radiation quantity
     558
     559             IF ( ocean_mode )  THEN
     560                CALL ocean_3d_data_averaging( 'average', doav(ii) )
     561             ENDIF
     562
    572563             IF ( radiation )  THEN
    573564                CALL radiation_3d_data_averaging( 'average', doav(ii) )
    574565             ENDIF
    575 !
    576 !--          Gust module quantities
    577              IF ( gust_module_enabled )  THEN
    578                 CALL gust_3d_data_averaging( 'average', doav(ii) )
    579              ENDIF
    580 !
    581 !--          Chemistry quantity
    582              IF ( air_chemistry )  THEN
    583                 CALL chem_3d_data_averaging( 'average', doav(ii) )
    584              ENDIF
    585 !
    586 !--          User-defined quantity
     566
     567             CALL tcm_3d_data_averaging( 'average', doav(ii) )
     568!
     569!--          User-defined quantities
    587570             CALL user_3d_data_averaging( 'average', doav(ii) )
    588571
  • palm/trunk/SOURCE/boundary_conds.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    203206        ONLY:  kappa
    204207
     208    USE bulk_cloud_model_mod,                                                  &
     209        ONLY: bulk_cloud_model, microphysics_morrison, microphysics_seifert
     210
    205211    USE chemistry_model_mod,                                                   &
    206212        ONLY:  chem_boundary_conds
     
    212218               child_domain, constant_diffusion, coupling_mode, &
    213219               dt_3d, humidity, ibc_pt_b, ibc_pt_t, ibc_q_b, ibc_q_t, ibc_s_b, &
    214                ibc_s_t,ibc_sa_t, ibc_uv_b, ibc_uv_t,                           &
    215                intermediate_timestep_count,                                    &
    216                nesting_offline, nudging,                                       &
    217                ocean, passive_scalar, rans_mode, rans_tke_e, tsc, use_cmax
     220               ibc_s_t, ibc_uv_b, ibc_uv_t,                           &
     221               intermediate_timestep_count, nesting_offline, nudging,          &
     222               ocean_mode, passive_scalar, rans_mode, rans_tke_e, tsc, use_cmax
    218223
    219224    USE grid_variables,                                                        &
     
    221226
    222227    USE indices,                                                               &
    223         ONLY:  nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg,             &
    224                nzb, nzt
     228        ONLY:  nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg, nzb, nzt
    225229
    226230    USE kinds
    227231
    228     USE bulk_cloud_model_mod,                                                  &
    229         ONLY: bulk_cloud_model, microphysics_morrison, microphysics_seifert
     232    USE ocean_mod,                                                             &
     233        ONLY:  ibc_sa_t
    230234
    231235    USE pegrid
     
    529533!
    530534!-- Boundary conditions for salinity
    531     IF ( ocean )  THEN
     535    IF ( ocean_mode )  THEN
    532536!
    533537!--    Bottom boundary: Neumann condition because salinity flux is always
  • palm/trunk/SOURCE/buoyancy.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! module use statements moved to global declaration section
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    5356! 1850 2016-04-08 13:29:27Z maronga
    5457! Module renamed
    55 !
    5658!
    5759! 1682 2015-10-07 23:56:08Z knoop
     
    121123        ONLY:  g
    122124
     125    USE arrays_3d,                                                             &
     126        ONLY:  pt, pt_slope_ref, ref_state, tend
     127
     128    USE control_parameters,                                                    &
     129        ONLY:  atmos_ocean_sign, cos_alpha_surface, message_string, pt_surface,&
     130               sin_alpha_surface, sloping_surface
     131
     132    USE kinds
     133
    123134    PRIVATE
    124135    PUBLIC buoyancy
     
    139150    SUBROUTINE buoyancy( var, wind_component )
    140151
    141        USE arrays_3d,                                                          &
    142            ONLY:  pt, pt_slope_ref, ref_state, tend
    143 
    144        USE control_parameters,                                                 &
    145            ONLY:  atmos_ocean_sign, cos_alpha_surface, message_string,         &
    146                   pt_surface, sin_alpha_surface, sloping_surface
    147 
    148152       USE indices,                                                            &
    149153           ONLY:  nxl, nxlg, nxlu, nxr, nxrg, nyn, nyng, nys, nysg, nzb,       &
    150154                  nzt, wall_flags_0
    151 
    152        USE kinds
    153 
    154        USE pegrid
    155155
    156156
     
    245245    SUBROUTINE buoyancy_ij( i, j, var, wind_component )
    246246
    247        USE arrays_3d,                                                          &
    248            ONLY:  pt, pt_slope_ref, ref_state, tend
    249 
    250        USE control_parameters,                                                 &
    251            ONLY:  atmos_ocean_sign, cos_alpha_surface, message_string,         &
    252                   pt_surface, sin_alpha_surface, sloping_surface
    253247
    254248       USE indices,                                                            &
    255249           ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzt, wall_flags_0
    256 
    257        USE kinds
    258 
    259        USE pegrid
    260 
    261250
    262251       IMPLICIT NONE
  • palm/trunk/SOURCE/check_parameters.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id: check_parameters.f90 2520 2017-10-05 13:50:26Z gronemeier &
     27! changes concerning modularization of ocean option,
     28! init_vertical_profiles moved to separate file to avoid circular dependency
     29!
     30! 2520 2017-10-05 13:50:26Z gronemeier
    2731! Modularization of all bulk cloud physics code components
    2832!
     
    669673    USE arrays_3d
    670674
     675    USE basic_constants_and_equations_mod
     676
    671677    USE bulk_cloud_model_mod,                                                  &
    672678        ONLY:  bulk_cloud_model, bcm_check_parameters, bcm_check_data_output,  &
     
    676682        ONLY:  chem_boundary_conds, chem_check_data_output,                    &
    677683               chem_check_data_output_pr, chem_species
     684
    678685    USE chem_modules
    679     USE basic_constants_and_equations_mod
     686
    680687    USE control_parameters
     688
    681689    USE dvrp_variables
     690
    682691    USE grid_variables
     692
    683693    USE gust_mod,                                                              &
    684694        ONLY: gust_check_data_output, gust_check_data_output_pr,               &
    685695              gust_check_parameters, gust_module_enabled
     696
     697    USE kinds
     698
    686699    USE indices
     700
    687701    USE land_surface_model_mod,                                                &
    688702        ONLY: lsm_check_data_output, lsm_check_data_output_pr,                 &
     
    691705    USE lsf_nudging_mod,                                                       &
    692706        ONLY:  lsf_nudging_check_parameters, lsf_nudging_check_data_output_pr
    693 
    694     USE kinds
    695707
    696708    USE model_1d_mod,                                                          &
     
    706718               waterflux_output_unit, momentumflux_output_unit
    707719
     720    USE ocean_mod,                                                             &
     721        ONLY:  ocean_check_data_output, ocean_check_data_output_pr,            &
     722               ocean_check_parameters
     723
    708724    USE particle_attributes
     725
    709726    USE pegrid
     727
    710728    USE plant_canopy_model_mod,                                                &
    711729        ONLY:  pcm_check_data_output, pcm_check_parameters
     
    715733
    716734    USE profil_parameter
     735
    717736    USE radiation_model_mod,                                                   &
    718737        ONLY:  radiation, radiation_check_data_output,                         &
    719738               radiation_check_data_output_pr, radiation_check_parameters
     739
    720740    USE spectra_mod,                                                           &
    721741        ONLY:  calculate_spectra, spectra_check_parameters
     742
    722743    USE statistics
     744
    723745    USE subsidence_mod
     746
    724747    USE statistics
     748
    725749    USE synthetic_turbulence_generator_mod,                                    &
    726750        ONLY:  stg_check_parameters
     751
    727752    USE transpose_indices
     753
    728754    USE turbulence_closure_mod,                                                &
    729755        ONLY:  tcm_check_data_output, tcm_check_parameters
     756
    730757    USE urban_surface_mod,                                                     &
    731758        ONLY:  usm_check_data_output, usm_check_parameters
     759
    732760    USE uv_exposure_model_mod,                                                 &
    733761        ONLY:  uvem_check_data_output
     762
    734763    USE wind_turbine_model_mod,                                                &
    735764        ONLY:  wtm_check_parameters
     765
    736766    USE vertical_nesting_mod,                                                  &
    737767        ONLY:  vnested, vnest_check_parameters
     
    10831113
    10841114!
    1085 !-- Check turbulence closure setup
    1086     CALL tcm_check_parameters
    1087 
    1088 !
    10891115!-- Check approximation
    10901116    IF ( TRIM( approximation ) /= 'boussinesq'   .AND.                         &
     
    11271153       CALL message( 'check_parameters', 'PA0450', 1, 2, 0, 6, 0 )
    11281154    ENDIF
     1155!
    11291156!-- Set flux input mode according to approximation if applicable
    11301157    IF ( TRIM( flux_input_mode ) == 'approximation-specific' )  THEN
     
    11451172       CALL message( 'check_parameters', 'PA0451', 1, 2, 0, 6, 0 )
    11461173    ENDIF
     1174!
    11471175!-- Set flux output mode according to approximation if applicable
    11481176    IF ( TRIM( flux_output_mode ) == 'approximation-specific' )  THEN
     
    11631191
    11641192!
    1165 !-- set the flux output units according to flux_output_mode
     1193!-- Set the flux output units according to flux_output_mode
    11661194    IF ( TRIM( flux_output_mode ) == 'kinematic' ) THEN
    11671195        heatflux_output_unit              = 'K m/s'
     
    11741202    ENDIF
    11751203
     1204!
    11761205!-- set time series output units for fluxes
    11771206    dots_unit(14:16) = heatflux_output_unit
    11781207    dots_unit(21)    = waterflux_output_unit
    11791208    dots_unit(19:20) = momentumflux_output_unit
    1180 
    1181 !
    1182 !-- Check ocean setting
    1183     IF ( TRIM( coupling_mode ) == 'uncoupled'  .AND.                           &
    1184          TRIM( coupling_char ) == '_O' .AND.                                   &
    1185          .NOT. ocean )  THEN
    1186 
    1187 !
    1188 !--    Check whether an (uncoupled) atmospheric run has been declared as an
    1189 !--    ocean run (this setting is done via palmrun-option -y)
    1190        message_string = 'ocean = .F. does not allow coupling_char = "' //      &
    1191                         TRIM( coupling_char ) // '" set by palmrun-option "-y"'
    1192        CALL message( 'check_parameters', 'PA0317', 1, 2, 0, 6, 0 )
    1193 
    1194     ENDIF
    11951209
    11961210!
     
    14301444
    14311445!
    1432 !-- Check for synthetic turbulence generator settings
     1446!-- Check the module settings
     1447    IF ( ocean_mode )  CALL ocean_check_parameters
     1448    CALL tcm_check_parameters
    14331449    CALL stg_check_parameters
    1434 !
    1435 !-- When plant canopy model is used, peform addtional checks
    1436     IF ( plant_canopy )  CALL pcm_check_parameters
    1437 
    1438 !
    1439 !-- Additional checks for spectra
    1440     IF ( calculate_spectra )  CALL spectra_check_parameters
    1441 !
    1442 !-- When land surface model is used, perform additional checks
    1443     IF ( land_surface )  CALL lsm_check_parameters
    1444 !
    1445 !-- When microphysics module is used, perform additional checks
    1446     IF ( bulk_cloud_model )  CALL bcm_check_parameters
    1447 
    1448 !
    1449 !-- When urban surface model is used, perform additional checks
    1450     IF ( urban_surface )  CALL usm_check_parameters
    1451 
    1452 !
    1453 !-- If wind turbine model is used, perform additional checks
    1454     IF ( wind_turbine )  CALL wtm_check_parameters
    1455 !
    1456 !-- When radiation model is used, peform addtional checks
    1457     IF ( radiation )  CALL radiation_check_parameters
    1458 !
    1459 !-- When gust module is used, perform additional checks
     1450    IF ( plant_canopy )         CALL pcm_check_parameters
     1451    IF ( calculate_spectra )    CALL spectra_check_parameters
     1452    IF ( land_surface )         CALL lsm_check_parameters
     1453    IF ( bulk_cloud_model )     CALL bcm_check_parameters
     1454    IF ( urban_surface )        CALL usm_check_parameters
     1455    IF ( wind_turbine )         CALL wtm_check_parameters
     1456    IF ( radiation )            CALL radiation_check_parameters
    14601457    IF ( gust_module_enabled )  CALL gust_check_parameters
    1461 !
    1462 !-- When large-scale forcing or nudging is used, peform addtional checks
    14631458    IF ( large_scale_forcing  .OR.  nudging )  CALL lsf_nudging_check_parameters
    14641459
    14651460!
    1466 !-- In case of no model continuation run, check initialising parameters and
    1467 !-- deduce further quantities
     1461!-- In case of no restart run, check initialising parameters and calculate
     1462!-- further quantities
    14681463    IF ( TRIM( initializing_actions ) /= 'read_restart_data' )  THEN
    14691464
     
    14721467       pt_init = pt_surface
    14731468       IF ( humidity       )  q_init  = q_surface
    1474        IF ( ocean          )  sa_init = sa_surface
    14751469       IF ( passive_scalar )  s_init  = s_surface
    14761470       IF ( air_chemistry )  THEN
     
    14861480       gradient = 0.0_wp
    14871481
    1488        IF (  .NOT.  ocean )  THEN
     1482       IF ( .NOT. ocean_mode )  THEN
    14891483
    14901484          ug_vertical_gradient_level_ind(1) = 0
     
    15501544       gradient = 0.0_wp
    15511545
    1552        IF (  .NOT.  ocean )  THEN
     1546       IF ( .NOT. ocean_mode )  THEN
    15531547
    15541548          vg_vertical_gradient_level_ind(1) = 0
     
    16911685!--    Compute initial chemistry profile using the given chemical species gradients
    16921686       IF ( air_chemistry )  THEN                                                         
    1693          DO lsp = 1, nvar
    1694           CALL init_vertical_profiles( cs_vertical_gradient_level_ind(lsp,:),  &
    1695                                        cs_vertical_gradient_level(lsp,:),      &
    1696                                        cs_vertical_gradient(lsp,:),            &
    1697                                        chem_species(lsp)%conc_pr_init,         &
    1698                                        cs_surface(lsp), bc_cs_t_val(lsp) )
    1699          ENDDO
    1700        ENDIF
    1701 !
    1702 !
    1703 !--    If required, compute initial salinity profile using the given salinity
    1704 !--    gradients
    1705        IF ( ocean )  THEN
    1706           CALL init_vertical_profiles( sa_vertical_gradient_level_ind,          &
    1707                                        sa_vertical_gradient_level,              &
    1708                                        sa_vertical_gradient, sa_init,           &
    1709                                        sa_surface, dum )
    1710        ENDIF
    1711 
     1687          DO  lsp = 1, nvar
     1688            CALL init_vertical_profiles( cs_vertical_gradient_level_ind(lsp,:),&
     1689                                         cs_vertical_gradient_level(lsp,:),    &
     1690                                         cs_vertical_gradient(lsp,:),          &
     1691                                         chem_species(lsp)%conc_pr_init,       &
     1692                                         cs_surface(lsp), bc_cs_t_val(lsp) )
     1693          ENDDO
     1694       ENDIF
    17121695
    17131696    ENDIF
     
    17771760                        TRIM( reference_state ) // '"'
    17781761       CALL message( 'check_parameters', 'PA0056', 1, 2, 0, 6, 0 )
    1779     ENDIF
    1780 
    1781 !
    1782 !-- Sign of buoyancy/stability terms
    1783     IF ( ocean )  atmos_ocean_sign = -1.0_wp
    1784 
    1785 !
    1786 !-- Ocean version must use flux boundary conditions at the top
    1787     IF ( ocean .AND. .NOT. use_top_fluxes )  THEN
    1788        message_string = 'use_top_fluxes must be .TRUE. in ocean mode'
    1789        CALL message( 'check_parameters', 'PA0042', 1, 2, 0, 6, 0 )
    17901762    ENDIF
    17911763
     
    20672039
    20682040!
    2069 !-- Boundary conditions for salinity
    2070     IF ( ocean )  THEN
    2071        IF ( bc_sa_t == 'dirichlet' )  THEN
    2072           ibc_sa_t = 0
    2073        ELSEIF ( bc_sa_t == 'neumann' )  THEN
    2074           ibc_sa_t = 1
    2075        ELSE
    2076           message_string = 'unknown boundary condition: bc_sa_t = "' //        &
    2077                            TRIM( bc_sa_t ) // '"'
    2078           CALL message( 'check_parameters', 'PA0068', 1, 2, 0, 6, 0 )
    2079        ENDIF
    2080 
    2081        IF ( top_salinityflux == 9999999.9_wp )  constant_top_salinityflux = .FALSE.
    2082        IF ( ibc_sa_t == 1  .AND.  top_salinityflux == 9999999.9_wp )  THEN
    2083           message_string = 'boundary condition: bc_sa_t = "' //                &
    2084                            TRIM( bc_sa_t ) // '" requires to set ' //          &
    2085                            'top_salinityflux'
    2086           CALL message( 'check_parameters', 'PA0069', 1, 2, 0, 6, 0 )
    2087        ENDIF
    2088 
    2089 !
    2090 !--    A fixed salinity at the top implies Dirichlet boundary condition for
    2091 !--    salinity. In this case specification of a constant salinity flux is
    2092 !--    forbidden.
    2093        IF ( ibc_sa_t == 0  .AND.  constant_top_salinityflux  .AND.             &
    2094             top_salinityflux /= 0.0_wp )  THEN
    2095           message_string = 'boundary condition: bc_sa_t = "' //                &
    2096                            TRIM( bc_sa_t ) // '" is not allowed with ' //      &
    2097                            'top_salinityflux /= 0.0'
    2098           CALL message( 'check_parameters', 'PA0070', 1, 2, 0, 6, 0 )
    2099        ENDIF
    2100 
    2101     ENDIF
    2102 
    2103 !
    21042041!-- Set boundary conditions for total water content
    21052042    IF ( humidity )  THEN
     
    21582095               .AND.  top_scalarflux /= 0.0_wp )  THEN
    21592096          message_string = 'boundary condition: bc_s_t = "' //                 &
    2160                            TRIM( bc_sa_t ) // '" is not allowed with ' //      &
     2097                           TRIM( bc_s_t ) // '" is not allowed with ' //       &
    21612098                           'top_scalarflux /= 0.0'
    21622099          CALL message( 'check_parameters', 'PA0441', 1, 2, 0, 6, 0 )
     
    22302167
    22312168    IF ( rayleigh_damping_height == -1.0_wp )  THEN
    2232        IF (  .NOT.  ocean )  THEN
     2169       IF (  .NOT.  ocean_mode )  THEN
    22332170          rayleigh_damping_height = 0.66666666666_wp * zu(nzt)
    22342171       ELSE
     
    22362173       ENDIF
    22372174    ELSE
    2238        IF (  .NOT.  ocean )  THEN
     2175       IF (  .NOT.  ocean_mode )  THEN
    22392176          IF ( rayleigh_damping_height < 0.0_wp  .OR.                          &
    22402177               rayleigh_damping_height > zu(nzt) )  THEN
     
    25192456             hom(:,2,22,:) = SPREAD( zw, 2, statistic_regions+1 )
    25202457
    2521           CASE ( 'sa', '#sa' )
    2522              IF ( .NOT. ocean )  THEN
    2523                 message_string = 'data_output_pr = ' //                        &
    2524                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    2525                                  'lemented for ocean = .FALSE.'
    2526                 CALL message( 'check_parameters', 'PA0091', 1, 2, 0, 6, 0 )
    2527              ELSE
    2528                 dopr_index(i) = 23
    2529                 dopr_unit(i)  = 'psu'
    2530                 hom(:,2,23,:) = SPREAD( zu, 2, statistic_regions+1 )
    2531                 IF ( data_output_pr(i)(1:1) == '#' )  THEN
    2532                    dopr_initial_index(i) = 26
    2533                    hom(:,2,26,:)         = SPREAD( zu, 2, statistic_regions+1 )
    2534                    hom(nzb,2,26,:)       = 0.0_wp    ! because zu(nzb) is negative
    2535                    data_output_pr(i)     = data_output_pr(i)(2:)
    2536                 ENDIF
    2537              ENDIF
    2538 
    25392458          CASE ( 'u*2' )
    25402459             dopr_index(i) = 30
     
    28462765             hom(:,2,57,:) = SPREAD( zu, 2, statistic_regions+1 )
    28472766
    2848 
    28492767          CASE ( 'u"pt"' )
    28502768             dopr_index(i) = 58
     
    28762794             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    28772795             hom(:,2,63,:) = SPREAD( zu, 2, statistic_regions+1 )
    2878 
    2879           CASE ( 'rho_ocean' )
    2880              IF (  .NOT.  ocean ) THEN
    2881                 message_string = 'data_output_pr = ' //                        &
    2882                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    2883                                  'lemented for ocean = .FALSE.'
    2884                 CALL message( 'check_parameters', 'PA0091', 1, 2, 0, 6, 0 )
    2885              ELSE
    2886                 dopr_index(i) = 64
    2887                 dopr_unit(i)  = 'kg/m3'
    2888                 hom(:,2,64,:) = SPREAD( zu, 2, statistic_regions+1 )
    2889                 IF ( data_output_pr(i)(1:1) == '#' )  THEN
    2890                    dopr_initial_index(i) = 77
    2891                    hom(:,2,77,:)         = SPREAD( zu, 2, statistic_regions+1 )
    2892                    hom(nzb,2,77,:)       = 0.0_wp    ! because zu(nzb) is negative
    2893                    data_output_pr(i)     = data_output_pr(i)(2:)
    2894                 ENDIF
    2895              ENDIF
    2896 
    2897           CASE ( 'w"sa"' )
    2898              IF (  .NOT.  ocean ) THEN
    2899                 message_string = 'data_output_pr = ' //                        &
    2900                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    2901                                  'lemented for ocean = .FALSE.'
    2902                 CALL message( 'check_parameters', 'PA0091', 1, 2, 0, 6, 0 )
    2903              ELSE
    2904                 dopr_index(i) = 65
    2905                 dopr_unit(i)  = 'psu m/s'
    2906                 hom(:,2,65,:) = SPREAD( zw, 2, statistic_regions+1 )
    2907              ENDIF
    2908 
    2909           CASE ( 'w*sa*' )
    2910              IF (  .NOT. ocean  ) THEN
    2911                 message_string = 'data_output_pr = ' //                        &
    2912                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    2913                                  'lemented for ocean = .FALSE.'
    2914                 CALL message( 'check_parameters', 'PA0091', 1, 2, 0, 6, 0 )
    2915              ELSE
    2916                 dopr_index(i) = 66
    2917                 dopr_unit(i)  = 'psu m/s'
    2918                 hom(:,2,66,:) = SPREAD( zw, 2, statistic_regions+1 )
    2919              ENDIF
    2920 
    2921           CASE ( 'wsa' )
    2922              IF (  .NOT.  ocean ) THEN
    2923                 message_string = 'data_output_pr = ' //                        &
    2924                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    2925                                  'lemented for ocean = .FALSE.'
    2926                 CALL message( 'check_parameters', 'PA0091', 1, 2, 0, 6, 0 )
    2927              ELSE
    2928                 dopr_index(i) = 67
    2929                 dopr_unit(i)  = 'psu m/s'
    2930                 hom(:,2,67,:) = SPREAD( zw, 2, statistic_regions+1 )
    2931              ENDIF
    29322796
    29332797          CASE ( 'w*p*' )
     
    29532817             ENDIF
    29542818
    2955           CASE ( 'prho' )
    2956              IF (  .NOT.  ocean ) THEN
    2957                 message_string = 'data_output_pr = ' //                        &
    2958                                  TRIM( data_output_pr(i) ) // ' is not imp' // &
    2959                                  'lemented for ocean = .FALSE.'
    2960                 CALL message( 'check_parameters', 'PA0091', 1, 2, 0, 6, 0 )
    2961              ELSE
    2962                 dopr_index(i) = 71
    2963                 dopr_unit(i)  = 'kg/m3'
    2964                 hom(:,2,71,:) = SPREAD( zu, 2, statistic_regions+1 )
    2965              ENDIF
    2966 
    29672819          CASE ( 'hyp' )
    29682820             dopr_index(i) = 72
     
    30142866             ENDIF
    30152867
    3016 
    3017 
    30182868          CASE DEFAULT
     2869
     2870!
     2871!--          Check for other modules
     2872             IF ( unit == 'illegal'  .AND.  bulk_cloud_model  )  THEN
     2873                CALL bcm_check_data_output_pr( data_output_pr(i), i, unit,     &
     2874                                               dopr_unit(i) )
     2875             ENDIF
     2876
     2877             IF ( unit == 'illegal' )  THEN
     2878                CALL chem_check_data_output_pr( data_output_pr(i), i, unit,    &
     2879                                                dopr_unit(i) )
     2880             ENDIF
     2881
     2882             IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
     2883                CALL gust_check_data_output_pr( data_output_pr(i), i, unit,    &
     2884                                                dopr_unit(i) )
     2885             ENDIF
     2886
     2887             IF ( unit == 'illegal' )  THEN
     2888                CALL lsf_nudging_check_data_output_pr( data_output_pr(i), i,   &
     2889                                                       unit, dopr_unit(i) )
     2890             ENDIF
    30192891
    30202892             CALL lsm_check_data_output_pr( data_output_pr(i), i, unit,        &
    30212893                                            dopr_unit(i) )
    3022 !
    3023 !--          Block of microphysics module profile outputs
    3024              IF ( unit == 'illegal'  .AND.  bulk_cloud_model  )  THEN
    3025                    CALL bcm_check_data_output_pr(data_output_pr(i), i, unit,   &
     2894
     2895             IF ( unit == 'illegal' )  THEN
     2896                CALL ocean_check_data_output_pr( data_output_pr(i), i, unit,   &
    30262897                                                 dopr_unit(i) )
    3027              ENDIF
    3028 
    3029              IF ( unit == 'illegal' )  THEN
    3030                 CALL lsf_nudging_check_data_output_pr( data_output_pr(i), i,   &
    3031                                                     unit, dopr_unit(i) )
    30322898             ENDIF
    30332899
     
    30362902                                                     unit, dopr_unit(i) )
    30372903             ENDIF
    3038 !
    3039 !--          Block of gust module profile outputs
    3040              IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
    3041                    CALL gust_check_data_output_pr( data_output_pr(i), i, unit, &
    3042                                                    dopr_unit(i) )
    3043              ENDIF
    3044 
    3045              IF ( unit == 'illegal' )  THEN                                       
    3046                 CALL chem_check_data_output_pr( data_output_pr(i), i,          &
    3047                                                 unit, dopr_unit(i) )
    3048              ENDIF
    3049 
     2904
     2905!
     2906!--          Finally, check for user defined quantities
    30502907             IF ( unit == 'illegal' )  THEN
    30512908                unit = ''
     
    30532910             ENDIF
    30542911
     2912!
     2913!--          No valid quantity found
    30552914             IF ( unit == 'illegal' )  THEN
    30562915                IF ( data_output_pr_user(1) /= ' ' )  THEN
     
    31843043             unit = 'kg/kg'
    31853044
    3186           CASE ( 'rho_ocean' )
    3187              IF (  .NOT.  ocean )  THEN
    3188                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3189                                  'res ocean = .TRUE.'
    3190                 CALL message( 'check_parameters', 'PA0109', 1, 2, 0, 6, 0 )
    3191              ENDIF
    3192              unit = 'kg/m3'
    3193 
    31943045          CASE ( 's' )
    31953046             IF (  .NOT.  passive_scalar )  THEN
     
    31993050             ENDIF
    32003051             unit = 'kg/m3'
    3201 
    3202           CASE ( 'sa' )
    3203              IF (  .NOT.  ocean )  THEN
    3204                 message_string = 'output of "' // TRIM( var ) // '" requi' //  &
    3205                                  'res ocean = .TRUE.'
    3206                 CALL message( 'check_parameters', 'PA0109', 1, 2, 0, 6, 0 )
    3207              ENDIF
    3208              unit = 'psu'
    32093052
    32103053          CASE ( 'p', 'pt', 'u', 'v', 'w' )
     
    32793122          CASE DEFAULT
    32803123
    3281              CALL tcm_check_data_output ( var, unit )
    3282 
    3283 !
    3284 !--          Block of microphysics module outputs
     3124             CALL tcm_check_data_output( var, unit )
     3125
     3126!
     3127!--          Check for other modules
    32853128             IF ( unit == 'illegal'  .AND.  bulk_cloud_model  )  THEN
    3286                 CALL bcm_check_data_output ( var, unit )
    3287              ENDIF
    3288 
    3289              IF ( unit == 'illegal' )  THEN
    3290                 CALL lsm_check_data_output ( var, unit, i, ilen, k )
    3291              ENDIF
    3292 
    3293              IF ( unit == 'illegal' )  THEN
    3294                 CALL radiation_check_data_output( var, unit, i, ilen, k )
    3295              ENDIF
    3296 
    3297 !
    3298 !--          Block of gust module outputs
    3299              IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
    3300                 CALL gust_check_data_output ( var, unit )
    3301              ENDIF
    3302 
    3303 !
    3304 !--          Block of chemistry model outputs
     3129                CALL bcm_check_data_output( var, unit )
     3130             ENDIF
     3131
    33053132             IF ( unit == 'illegal'  .AND.  air_chemistry                      &
    33063133                                     .AND.  var(1:3) == 'kc_' )  THEN
     
    33083135             ENDIF
    33093136
    3310 !
    3311 !--          Block of urban surface model outputs
    3312              IF ( unit == 'illegal' .AND. urban_surface .AND. var(1:4) == 'usm_' ) THEN
     3137             IF ( unit == 'illegal' )  THEN
     3138                CALL lsm_check_data_output ( var, unit, i, ilen, k )
     3139             ENDIF
     3140
     3141             IF ( unit == 'illegal'  .AND.  gust_module_enabled  )  THEN
     3142                CALL gust_check_data_output ( var, unit )
     3143             ENDIF
     3144
     3145             IF ( unit == 'illegal'  .AND.  ocean_mode )  THEN
     3146                CALL ocean_check_data_output( var, unit )
     3147             ENDIF
     3148
     3149             IF ( unit == 'illegal'  .AND.  plant_canopy                       &
     3150                                     .AND.  var(1:4) == 'pcm_' )  THEN
     3151                CALL pcm_check_data_output( var, unit )
     3152             ENDIF
     3153
     3154             IF ( unit == 'illegal' )  THEN
     3155                CALL radiation_check_data_output( var, unit, i, ilen, k )
     3156             ENDIF
     3157
     3158             IF ( unit == 'illegal'  .AND.  urban_surface                      &
     3159                                     .AND.  var(1:4) == 'usm_' )  THEN
    33133160                 CALL usm_check_data_output( var, unit )
    33143161             ENDIF
    33153162
    3316 !
    3317 !--          Block of plant canopy model outputs
    3318              IF ( unit == 'illegal' .AND. plant_canopy .AND. var(1:4) == 'pcm_' ) THEN
    3319                  CALL pcm_check_data_output( var, unit )
    3320              ENDIF
    3321 
    3322 !
    3323 !--          Block of uv exposure model outputs
    3324              IF ( unit == 'illegal' .AND. uv_exposure .AND. var(1:5) == 'uvem_' )  THEN
     3163             IF ( unit == 'illegal'  .AND.  uv_exposure                        &
     3164                                     .AND.  var(1:5) == 'uvem_' )  THEN
    33253165                CALL uvem_check_data_output( var, unit, i, ilen, k )
    33263166             ENDIF
    33273167
     3168!
     3169!--          Finally, check for user-defined quantities
    33283170             IF ( unit == 'illegal' )  THEN
    33293171                unit = ''
     
    36283470!-- Determine upper and lower hight level indices for random perturbations
    36293471    IF ( disturbance_level_b == -9999999.9_wp )  THEN
    3630        IF ( ocean )  THEN
     3472       IF ( ocean_mode )  THEN
    36313473          disturbance_level_b     = zu((nzt*2)/3)
    36323474          disturbance_level_ind_b = ( nzt * 2 ) / 3
     
    36533495
    36543496    IF ( disturbance_level_t == -9999999.9_wp )  THEN
    3655        IF ( ocean )  THEN
     3497       IF ( ocean_mode )  THEN
    36563498          disturbance_level_t     = zu(nzt-3)
    36573499          disturbance_level_ind_t = nzt - 3
     
    40743916
    40753917
    4076 
    4077 !------------------------------------------------------------------------------!
    4078 ! Description:
    4079 ! ------------
    4080 !> Inititalizes the vertical profiles of scalar quantities.
    4081 !------------------------------------------------------------------------------!
    4082 
    4083     SUBROUTINE init_vertical_profiles( vertical_gradient_level_ind,            &
    4084                                        vertical_gradient_level,                &
    4085                                        vertical_gradient,                      &
    4086                                        pr_init, surface_value, bc_t_val )
    4087 
    4088 
    4089        IMPLICIT NONE
    4090 
    4091        INTEGER(iwp) ::  i     !< counter
    4092        INTEGER(iwp), DIMENSION(1:10) ::  vertical_gradient_level_ind !< vertical grid indices for gradient levels
    4093 
    4094        REAL(wp)     ::  bc_t_val      !< model top gradient
    4095        REAL(wp)     ::  gradient      !< vertica gradient of the respective quantity
    4096        REAL(wp)     ::  surface_value !< surface value of the respecitve quantity
    4097 
    4098 
    4099        REAL(wp), DIMENSION(0:nz+1) ::  pr_init                 !< initialisation profile
    4100        REAL(wp), DIMENSION(1:10)   ::  vertical_gradient       !< given vertical gradient
    4101        REAL(wp), DIMENSION(1:10)   ::  vertical_gradient_level !< given vertical gradient level
    4102 
    4103        i = 1
    4104        gradient = 0.0_wp
    4105 
    4106        IF (  .NOT.  ocean )  THEN
    4107 
    4108           vertical_gradient_level_ind(1) = 0
    4109           DO  k = 1, nzt+1
    4110              IF ( i < 11 )  THEN
    4111                 IF ( vertical_gradient_level(i) < zu(k)  .AND.            &
    4112                      vertical_gradient_level(i) >= 0.0_wp )  THEN
    4113                    gradient = vertical_gradient(i) / 100.0_wp
    4114                    vertical_gradient_level_ind(i) = k - 1
    4115                    i = i + 1
    4116                 ENDIF
    4117              ENDIF
    4118              IF ( gradient /= 0.0_wp )  THEN
    4119                 IF ( k /= 1 )  THEN
    4120                    pr_init(k) = pr_init(k-1) + dzu(k) * gradient
    4121                 ELSE
    4122                    pr_init(k) = pr_init(k-1) + dzu(k) * gradient
    4123                 ENDIF
    4124              ELSE
    4125                 pr_init(k) = pr_init(k-1)
    4126              ENDIF
    4127    !
    4128    !--       Avoid negative values
    4129              IF ( pr_init(k) < 0.0_wp )  THEN
    4130                 pr_init(k) = 0.0_wp
    4131              ENDIF
    4132           ENDDO
    4133 
    4134        ELSE
    4135 
    4136           vertical_gradient_level_ind(1) = nzt+1
    4137           DO  k = nzt, 0, -1
    4138              IF ( i < 11 )  THEN
    4139                 IF ( vertical_gradient_level(i) > zu(k)  .AND.            &
    4140                      vertical_gradient_level(i) <= 0.0_wp )  THEN
    4141                    gradient = vertical_gradient(i) / 100.0_wp
    4142                    vertical_gradient_level_ind(i) = k + 1
    4143                    i = i + 1
    4144                 ENDIF
    4145              ENDIF
    4146              IF ( gradient /= 0.0_wp )  THEN
    4147                 IF ( k /= nzt )  THEN
    4148                    pr_init(k) = pr_init(k+1) - dzu(k+1) * gradient
    4149                 ELSE
    4150                    pr_init(k)   = surface_value - 0.5_wp * dzu(k+1) * gradient
    4151                    pr_init(k+1) = surface_value + 0.5_wp * dzu(k+1) * gradient
    4152                 ENDIF
    4153              ELSE
    4154                 pr_init(k) = pr_init(k+1)
    4155              ENDIF
    4156    !
    4157    !--       Avoid negative humidities
    4158              IF ( pr_init(k) < 0.0_wp )  THEN
    4159                 pr_init(k) = 0.0_wp
    4160              ENDIF
    4161           ENDDO
    4162 
    4163        ENDIF
    4164 
    4165 !
    4166 !--    In case of no given gradients, choose zero gradient conditions
    4167        IF ( vertical_gradient_level(1) == -999999.9_wp )  THEN
    4168           vertical_gradient_level(1) = 0.0_wp
    4169        ENDIF
    4170 !
    4171 !--    Store gradient at the top boundary for possible Neumann boundary condition
    4172        bc_t_val  = ( pr_init(nzt+1) - pr_init(nzt) ) / dzu(nzt+1)
    4173 
    4174     END SUBROUTINE init_vertical_profiles
    4175 
    4176 
    4177 
    41783918!------------------------------------------------------------------------------!
    41793919! Description:
  • palm/trunk/SOURCE/data_output_2d.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    238241    USE arrays_3d,                                                             &
    239242        ONLY:  dzw, e, heatflux_output_conversion, nc, nr, p, pt,              &
    240                precipitation_amount, prr, q, qc, ql, ql_c, ql_v, qr,           &
    241                rho_ocean, s, sa, tend, u, v, vpt, w, zu, zw,                   &
    242                waterflux_output_conversion, hyrho, d_exner
     243               precipitation_amount, prr, q, qc, ql, ql_c, ql_v, qr, s, tend,  &
     244               u, v, vpt, w, zu, zw, waterflux_output_conversion, hyrho, d_exner
    243245
    244246    USE averaging
     
    258260               ibc_uv_b, io_blocks, io_group, land_surface, message_string,    &
    259261               ntdim_2d_xy, ntdim_2d_xz, ntdim_2d_yz,                          &
    260                psolver, section, simulated_time,                               &
     262               ocean_mode, psolver, section, simulated_time,                   &
    261263               time_since_reference_point, uv_exposure
    262264
     
    284286               id_var_time_xy, id_var_time_xz, id_var_time_yz, nc_stat,        &
    285287               netcdf_data_format, netcdf_handle_error
     288
     289    USE ocean_mod,                                                             &
     290        ONLY:  ocean_data_output_2d
    286291
    287292    USE particle_attributes,                                                   &
     
    940945                level_z(nzb+1) = zu(nzb+1)
    941946
    942              CASE ( 'rho_ocean_xy', 'rho_ocean_xz', 'rho_ocean_yz' )
    943                 IF ( av == 0 )  THEN
    944                    to_be_resorted => rho_ocean
    945                 ELSE
    946                    IF ( .NOT. ALLOCATED( rho_ocean_av ) ) THEN
    947                       ALLOCATE( rho_ocean_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    948                       rho_ocean_av = REAL( fill_value, KIND = wp )
    949                    ENDIF
    950                    to_be_resorted => rho_ocean_av
    951                 ENDIF
    952 
    953947             CASE ( 's_xy', 's_xz', 's_yz' )
    954948                IF ( av == 0 )  THEN
     
    960954                   ENDIF
    961955                   to_be_resorted => s_av
    962                 ENDIF
    963 
    964              CASE ( 'sa_xy', 'sa_xz', 'sa_yz' )
    965                 IF ( av == 0 )  THEN
    966                    to_be_resorted => sa
    967                 ELSE
    968                    IF ( .NOT. ALLOCATED( sa_av ) ) THEN
    969                       ALLOCATE( sa_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    970                       sa_av = REAL( fill_value, KIND = wp )
    971                    ENDIF
    972                    to_be_resorted => sa_av
    973956                ENDIF
    974957
     
    13061289
    13071290!
    1308 !--             Turbulence closure variables
    1309                 IF ( .NOT. found )  THEN
    1310                    CALL tcm_data_output_2d( av, do2d(av,if), found, grid, mode,&
    1311                                              local_pf, nzb_do, nzt_do )
    1312                 ENDIF
    1313 
    1314 !
    1315 !--             Microphysics module quantities
     1291!--             Quantities of other modules
    13161292                IF ( .NOT. found  .AND.  bulk_cloud_model )  THEN
    13171293                   CALL bcm_data_output_2d( av, do2d(av,if), found, grid, mode,&
     
    13191295                ENDIF
    13201296
    1321 !
    1322 !--             Land surface model quantity
     1297                IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
     1298                   CALL gust_data_output_2d( av, do2d(av,if), found, grid,     &
     1299                                             local_pf, two_d, nzb_do, nzt_do )
     1300                ENDIF
     1301
    13231302                IF ( .NOT. found  .AND.  land_surface )  THEN
    13241303                   CALL lsm_data_output_2d( av, do2d(av,if), found, grid, mode,&
     
    13261305                ENDIF
    13271306
    1328 !
    1329 !--             Radiation quantity
     1307                IF ( .NOT. found  .AND.  ocean_mode )  THEN
     1308                   CALL ocean_data_output_2d( av, do2d(av,if), found, grid,    &
     1309                                              mode, local_pf, nzb_do, nzt_do )
     1310                ENDIF
     1311
    13301312                IF ( .NOT. found  .AND.  radiation )  THEN
    13311313                   CALL radiation_data_output_2d( av, do2d(av,if), found, grid,&
     
    13341316                ENDIF
    13351317
    1336 !
    1337 !--             Gust module quantities
    1338                 IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
    1339                    CALL gust_data_output_2d( av, do2d(av,if), found, grid,     &
    1340                                              local_pf, two_d, nzb_do, nzt_do )
    1341                 ENDIF
    1342 
    1343 !
    1344 !--             UV exposure model quantity
     1318                IF ( .NOT. found )  THEN
     1319                   CALL tcm_data_output_2d( av, do2d(av,if), found, grid, mode,&
     1320                                             local_pf, nzb_do, nzt_do )
     1321                ENDIF
     1322
    13451323                IF ( .NOT. found  .AND.  uv_exposure )  THEN
    13461324                   CALL uvem_data_output_2d( av, do2d(av,if), found, grid,     &
     
    13491327
    13501328!
    1351 !--             User defined quantity
     1329!--             User defined quantities
    13521330                IF ( .NOT. found )  THEN
    13531331                   CALL user_data_output_2d( av, do2d(av,if), found, grid,     &
  • palm/trunk/SOURCE/data_output_3d.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    208211
    209212    USE arrays_3d,                                                             &
    210         ONLY:  e, nc, nr, p, pt, prr, q, qc, ql, ql_c, ql_v, qr, rho_ocean, s, &
    211                sa, tend, u, v, vpt, w, d_exner
     213        ONLY:  d_exner, e, nc, nr, p, pt, prr, q, qc, ql, ql_c, ql_v, qr, s,  &
     214               tend, u, v, vpt, w
    212215
    213216    USE averaging
     
    225228        ONLY:  air_chemistry, do3d, do3d_no, do3d_time_count,                  &
    226229               io_blocks, io_group, land_surface, message_string,              &
    227                ntdim_3d, nz_do3d,  plant_canopy,                               &
     230               ntdim_3d, nz_do3d,  ocean_mode, plant_canopy,                   &
    228231               psolver, simulated_time, time_since_reference_point,            &
    229232               urban_surface, varnamelength
     
    252255               netcdf_data_format, netcdf_handle_error
    253256       
     257    USE ocean_mod,                                                             &
     258        ONLY:  ocean_data_output_3d
     259
    254260    USE particle_attributes,                                                   &
    255261        ONLY:  grid_particles, number_of_particles, particles,                 &
     
    614620             ENDIF
    615621
    616           CASE ( 'rho_ocean' )
    617              IF ( av == 0 )  THEN
    618                 to_be_resorted => rho_ocean
    619              ELSE
    620                 IF ( .NOT. ALLOCATED( rho_ocean_av ) ) THEN
    621                    ALLOCATE( u_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    622                    u_av = REAL( fill_value, KIND = wp )
    623                 ENDIF
    624                 to_be_resorted => rho_ocean_av
    625              ENDIF
    626 
    627622          CASE ( 's' )
    628623             IF ( av == 0 )  THEN
     
    634629                ENDIF
    635630                to_be_resorted => s_av
    636              ENDIF
    637 
    638           CASE ( 'sa' )
    639              IF ( av == 0 )  THEN
    640                 to_be_resorted => sa
    641              ELSE
    642                 IF ( .NOT. ALLOCATED( sa_av ) ) THEN
    643                    ALLOCATE( sa_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    644                    sa_av = REAL( fill_value, KIND = wp )
    645                 ENDIF
    646                 to_be_resorted => sa_av
    647631             ENDIF
    648632
     
    701685          CASE DEFAULT
    702686
    703              IF ( .NOT. found )  THEN
    704                 CALL tcm_data_output_3d( av, do3d(av,if), found, local_pf,     &
    705                                          nzb_do, nzt_do )
    706                 resorted = .TRUE.
    707              ENDIF
    708 
    709 !
    710 !--          Microphysic module quantities
     687!
     688!--          Quantities of other modules
    711689             IF ( .NOT. found  .AND.  bulk_cloud_model )  THEN
    712690                CALL bcm_data_output_3d( av, do3d(av,if), found, local_pf,     &
     
    715693             ENDIF
    716694
    717 !
    718 !--          Land surface quantity
     695             IF ( .NOT. found  .AND.  air_chemistry )  THEN
     696                CALL chem_data_output_3d( av, do3d(av,if), found,              &
     697                                          local_pf, fill_value, nzb_do, nzt_do )
     698                resorted = .TRUE.
     699             ENDIF
     700
     701             IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
     702                CALL gust_data_output_3d( av, do3d(av,if), found, local_pf,    &
     703                                          nzb_do, nzt_do )
     704                resorted = .TRUE.
     705             ENDIF
     706
    719707             IF ( .NOT. found  .AND.  land_surface )  THEN
    720708!
     
    742730             ENDIF
    743731
    744 !
    745 !--          Radiation quantity
     732             IF ( .NOT. found  .AND.  ocean_mode )  THEN
     733                CALL ocean_data_output_3d( av, do3d(av,if), found, local_pf,   &
     734                                           nzb_do, nzt_do )
     735                resorted = .TRUE.
     736             ENDIF
     737
     738             IF ( .NOT. found  .AND.  plant_canopy )  THEN
     739                CALL pcm_data_output_3d( av, do3d(av,if), found, local_pf,     &
     740                                         fill_value, nzb_do, nzt_do )
     741                resorted = .TRUE.
     742             ENDIF
     743
    746744             IF ( .NOT. found  .AND.  radiation )  THEN
    747745                CALL radiation_data_output_3d( av, do3d(av,if), found,         &
     
    750748             ENDIF
    751749
    752 !
    753 !--          Gust module quantities
    754              IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
    755                 CALL gust_data_output_3d( av, do3d(av,if), found, local_pf,    &
    756                                           nzb_do, nzt_do )
    757                 resorted = .TRUE.
    758              ENDIF
    759 
    760 !
    761 !--          Chemistry model output
    762              IF ( .NOT. found  .AND.  air_chemistry )  THEN
    763                 CALL chem_data_output_3d( av, do3d(av,if), found,              &
    764                                           local_pf, fill_value, nzb_do, nzt_do )
    765                 resorted = .TRUE.
    766              ENDIF
    767 
    768 !
    769 !--          Plant canopy model output
    770              IF ( .NOT. found  .AND.  plant_canopy )  THEN
    771                 CALL pcm_data_output_3d( av, do3d(av,if), found, local_pf,     &
    772                                          fill_value, nzb_do, nzt_do )
    773                 resorted = .TRUE.
    774              ENDIF
    775 
    776 !
    777 !--          User defined quantity
     750             IF ( .NOT. found )  THEN
     751                CALL tcm_data_output_3d( av, do3d(av,if), found, local_pf,     &
     752                                         nzb_do, nzt_do )
     753                resorted = .TRUE.
     754             ENDIF
     755
     756!
     757!--          User defined quantities
    778758             IF ( .NOT. found )  THEN
    779759                CALL user_data_output_3d( av, do3d(av,if), found, local_pf,    &
  • palm/trunk/SOURCE/flow_statistics.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! ocean renamed ocean_mode
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    296299                dt_3d, humidity, initializing_actions, land_surface,           &
    297300                large_scale_forcing, large_scale_subsidence, max_pr_user,      &
    298                 message_string, neutral, ocean, passive_scalar, simulated_time,&
    299                 simulated_time_at_begin, use_subsidence_tendencies,            &
    300                 use_surface_fluxes, use_top_fluxes, ws_scheme_mom,            &
    301                 ws_scheme_sca
     301                message_string, neutral, ocean_mode, passive_scalar,           &
     302                simulated_time, simulated_time_at_begin,                       &
     303                use_subsidence_tendencies, use_surface_fluxes, use_top_fluxes, &
     304                ws_scheme_mom, ws_scheme_sca
    302305       
    303306    USE cpulog,                                                                &
     
    432435!--       According to the Neumann bc for the horizontal velocity components,
    433436!--       the corresponding fluxes has to satisfiy the same bc.
    434           IF ( ocean )  THEN
     437          IF ( ocean_mode )  THEN
    435438             sums_us2_ws_l(nzt+1,:) = sums_us2_ws_l(nzt,:)
    436439             sums_vs2_ws_l(nzt+1,:) = sums_vs2_ws_l(nzt,:)
     
    459462             sums_l(:,17,i)                        = sums_wspts_ws_l(:,i)      &
    460463                                           * heatflux_output_conversion  ! w*pt*
    461              IF ( ocean          ) sums_l(:,66,i)  = sums_wssas_ws_l(:,i) ! w*sa*
     464             IF ( ocean_mode     ) sums_l(:,66,i)  = sums_wssas_ws_l(:,i) ! w*sa*
    462465             IF ( humidity       ) sums_l(:,49,i)  = sums_wsqs_ws_l(:,i)       &
    463466                                           * waterflux_output_conversion  ! w*q*
     
    490493!
    491494!--    Horizontally averaged profile of salinity
    492        IF ( ocean )  THEN
     495       IF ( ocean_mode )  THEN
    493496          !$OMP DO
    494497          DO  i = nxl, nxr
     
    563566             sums_l(:,2,0) = sums_l(:,2,0) + sums_l(:,2,i)
    564567             sums_l(:,4,0) = sums_l(:,4,0) + sums_l(:,4,i)
    565              IF ( ocean )  THEN
     568             IF ( ocean_mode )  THEN
    566569                sums_l(:,23,0) = sums_l(:,23,0) + sums_l(:,23,i)
    567570             ENDIF
     
    592595       CALL MPI_ALLREDUCE( sums_l(nzb,4,0), sums(nzb,4), nzt+2-nzb, MPI_REAL,  &
    593596                           MPI_SUM, comm2d, ierr )
    594        IF ( ocean )  THEN
     597       IF ( ocean_mode )  THEN
    595598          IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
    596599          CALL MPI_ALLREDUCE( sums_l(nzb,23,0), sums(nzb,23), nzt+2-nzb,       &
     
    623626       sums(:,2) = sums_l(:,2,0)
    624627       sums(:,4) = sums_l(:,4,0)
    625        IF ( ocean )  sums(:,23) = sums_l(:,23,0)
     628       IF ( ocean_mode )  sums(:,23) = sums_l(:,23,0)
    626629       IF ( humidity ) THEN
    627630          sums(:,44) = sums_l(:,44,0)
     
    648651!
    649652!--    Salinity
    650        IF ( ocean )  THEN
     653       IF ( ocean_mode )  THEN
    651654          sums(:,23) = sums(:,23) / ngp_2dh_s_inner(:,sr)
    652655          hom(:,1,23,sr) = sums(:,23)             ! sa
     
    930933!
    931934!--             Salinity flux w"sa"
    932                 IF ( ocean )  THEN
     935                IF ( ocean_mode )  THEN
    933936                   sums_l(k,65,tn) = sums_l(k,65,tn)                           &
    934937                                         - 0.5_wp * ( kh(k,j,i) + kh(k+1,j,i) )&
     
    10001003                         sums_l(k+ki,61,tn) = sums_l(k+ki,61,tn) + &
    10011004                                    0.0_wp * rmask(j,i,sr)        ! v"pt"
    1002                          IF ( ocean )  THEN
     1005                         IF ( ocean_mode )  THEN
    10031006                            sums_l(k+ki,65,tn) = sums_l(k+ki,65,tn) + &
    10041007                                       surf_def_h(l)%sasws(m) * rmask(j,i,sr)  ! w"sa"
     
    10531056                   sums_l(nzb,61,tn) = sums_l(nzb,61,tn) + &
    10541057                                    0.0_wp * rmask(j,i,sr)        ! v"pt"
    1055                    IF ( ocean )  THEN
     1058                   IF ( ocean_mode )  THEN
    10561059                      sums_l(nzb,65,tn) = sums_l(nzb,65,tn) + &
    10571060                                       surf_lsm_h%sasws(m) * rmask(j,i,sr)  ! w"sa"
     
    11041107                   sums_l(nzb,61,tn) = sums_l(nzb,61,tn) + &
    11051108                                    0.0_wp * rmask(j,i,sr)        ! v"pt"
    1106                    IF ( ocean )  THEN
     1109                   IF ( ocean_mode )  THEN
    11071110                      sums_l(nzb,65,tn) = sums_l(nzb,65,tn) + &
    11081111                                       surf_usm_h%sasws(m) * rmask(j,i,sr)  ! w"sa"
     
    12761279                                    0.0_wp * rmask(j,i,sr)        ! v"pt"
    12771280
    1278                 IF ( ocean )  THEN
     1281                IF ( ocean_mode )  THEN
    12791282                   sums_l(nzt,65,tn) = sums_l(nzt,65,tn) + &
    12801283                                       surf_def_h(2)%sasws(m) * rmask(j,i,sr)  ! w"sa"
     
    13361339!--             Salinity flux and density (density does not belong to here,
    13371340!--             but so far there is no other suitable place to calculate)
    1338                 IF ( ocean )  THEN
     1341                IF ( ocean_mode )  THEN
    13391342                   IF( .NOT. ws_scheme_sca .OR. sr /= 0 )  THEN
    13401343                      pts = 0.5_wp * ( sa(k,j,i)   - hom(k,1,23,sr) +          &
     
    15621565!
    15631566!--    Density at top follows Neumann condition
    1564        IF ( ocean )  THEN
     1567       IF ( ocean_mode )  THEN
    15651568          sums_l(nzt+1,64,tn) = sums_l(nzt,64,tn)
    15661569          sums_l(nzt+1,71,tn) = sums_l(nzt,71,tn)
     
    20322035          first = .TRUE.
    20332036
    2034           IF ( ocean )  THEN
     2037          IF ( ocean_mode )  THEN
    20352038             DO  k = nzt, nzb+1, -1
    20362039                IF ( first  .AND.  hom(k,1,18,sr) < -1.0E-8_wp )  THEN
     
    20802083          dptdz_threshold = 0.2_wp / 100.0_wp
    20812084
    2082           IF ( ocean )  THEN
     2085          IF ( ocean_mode )  THEN
    20832086             DO  k = nzt+1, nzb+5, -1
    20842087                IF ( dptdz(k) > dptdz_threshold  .AND.                         &
  • palm/trunk/SOURCE/header.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    425428    USE netcdf_interface,                                                      &
    426429        ONLY:  netcdf_data_format, netcdf_data_format_string, netcdf_deflate
     430
     431    USE ocean_mod,                                                             &
     432        ONLY:  ibc_sa_t, prho_reference, sa_surface, sa_vertical_gradient,     &
     433               sa_vertical_gradient_level, sa_vertical_gradient_level_ind
    427434
    428435    USE particle_attributes,                                                   &
     
    578585    ENDIF
    579586    IF ( nested_run )  run_classification = 'nested ' // run_classification(1:63)
    580     IF ( ocean )  THEN
     587    IF ( ocean_mode )  THEN
    581588       run_classification = 'ocean - ' // run_classification(1:61)
    582589    ELSE
     
    733740    IF ( use_upstream_for_tke )  WRITE ( io, 143 )
    734741    IF ( rayleigh_damping_factor /= 0.0_wp )  THEN
    735        IF ( .NOT. ocean )  THEN
     742       IF ( .NOT. ocean_mode )  THEN
    736743          WRITE ( io, 123 )  'above', rayleigh_damping_height, &
    737744               rayleigh_damping_factor
     
    815822!
    816823!-- Computational grid
    817     IF ( .NOT. ocean )  THEN
     824    IF ( .NOT. ocean_mode )  THEN
    818825       WRITE ( io, 250 )  dx, dy
    819826       
     
    11761183    ENDIF
    11771184
    1178     IF ( ocean )  THEN
     1185    IF ( ocean_mode )  THEN
    11791186       r_lower = 'sa(0)    = sa(1)'
    11801187       IF ( ibc_sa_t == 0 )  THEN
     
    12531260          WRITE ( io, 316 )
    12541261       ENDIF
    1255        IF ( ocean  .AND.  constant_top_salinityflux )                          &
     1262       IF ( ocean_mode  .AND.  constant_top_salinityflux )                          &
    12561263          WRITE ( io, 309 )  top_salinityflux
    12571264       IF ( humidity       )  WRITE ( io, 315 )
     
    14121419!-- Initial salinity profile
    14131420!-- Building output strings, starting with surface salinity
    1414     IF ( ocean )  THEN
     1421    IF ( ocean_mode )  THEN
    14151422       WRITE ( temperatures, '(F6.2)' )  sa_surface
    14161423       gradients = '------'
     
    18951902    WRITE ( io, 412 )  TRIM( reference_state )
    18961903    IF ( use_single_reference_value )  THEN
    1897        IF ( ocean )  THEN
     1904       IF ( ocean_mode )  THEN
    18981905          WRITE ( io, 413 )  prho_reference
    18991906       ELSE
  • palm/trunk/SOURCE/init_3d_model.f90

    r3289 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3289 2018-09-28 10:23:58Z suehring
    2730! Introduce module parameter for number of inflow profiles
    2831!
     
    549552    USE netcdf_data_input_mod,                                                 &
    550553        ONLY:  init_3d, netcdf_data_input_init_3d
     554
     555    USE ocean_mod,                                                             &
     556        ONLY:  ocean_init, ocean_init_arrays
    551557   
    552558    USE particle_attributes,                                                   &
     
    772778                 s_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                           &
    773779                 s_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    774 #endif
    775     ENDIF
    776 
    777     IF ( ocean )  THEN
    778 #if defined( __nopointer )
    779        ALLOCATE( prho(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                          &
    780                  rho_ocean(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                           &
    781                  sa(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                            &
    782                  sa_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                          &
    783                  tsa_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    784 #else
    785        ALLOCATE( prho_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                        &
    786                  rho_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                         &
    787                  sa_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                          &
    788                  sa_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                          &
    789                  sa_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    790        prho => prho_1
    791        rho_ocean  => rho_1  ! routines calc_mean_profile and diffusion_e require
    792                       ! density to be apointer
    793780#endif
    794781    ENDIF
     
    1010997       s => s_1;  s_p => s_2;  ts_m => s_3
    1011998    ENDIF   
    1012 
    1013     IF ( ocean )  THEN
    1014        sa => sa_1;  sa_p => sa_2;  tsa_m => sa_3
    1015     ENDIF
    1016999#endif
     1000
    10171001!
    10181002!-- Initialize arrays for turbulence closure
     
    10221006    CALL init_surface_arrays
    10231007!
    1024 !-- Allocate microphysics module arrays
    1025     IF ( bulk_cloud_model )  THEN
    1026        CALL bcm_init_arrays
    1027     ENDIF
    1028 !
    1029 !-- Allocate land surface model arrays
    1030     IF ( land_surface )  THEN
    1031        CALL lsm_init_arrays
    1032     ENDIF
    1033 
    1034 !
    1035 !-- Allocate wind turbine model arrays
    1036     IF ( wind_turbine )  THEN
    1037        CALL wtm_init_arrays
    1038     ENDIF
    1039 !
    1040 !-- Allocate gust module arrays
    1041     IF ( gust_module_enabled )  THEN
    1042        CALL gust_init_arrays
    1043     ENDIF
     1008!-- Allocate arrays for other modules
     1009    IF ( bulk_cloud_model    )  CALL bcm_init_arrays
     1010    IF ( gust_module_enabled )  CALL gust_init_arrays
     1011    IF ( land_surface        )  CALL lsm_init_arrays
     1012    IF ( ocean_mode          )  CALL ocean_init_arrays
     1013    IF ( wind_turbine        )  CALL wtm_init_arrays
     1014    IF ( uv_exposure         )  CALL uvem_init_arrays
    10441015
    10451016!
     
    10531024    IF ( uv_exposure )  THEN
    10541025       CALL uvem_init
    1055     ENDIF
    1056 !
    1057 !-- Allocate uv exposure arrays
    1058     IF ( uv_exposure )  THEN
    1059        CALL uvem_init_arrays
    10601026    ENDIF
    10611027
     
    12301196          ENDIF
    12311197
    1232           IF ( ocean )  THEN
    1233              DO  i = nxlg, nxrg
    1234                 DO  j = nysg, nyng
    1235                    sa(:,j,i) = sa_init
    1236                 ENDDO
    1237              ENDDO
    1238           ENDIF
    12391198!
    12401199!--       Set velocity components at non-atmospheric / oceanic grid points to
     
    13801339          ENDIF
    13811340
    1382           IF ( ocean )  THEN
    1383              DO  i = nxlg, nxrg
    1384                 DO  j = nysg, nyng
    1385                    sa(:,j,i) = sa_init
    1386                 ENDDO
    1387              ENDDO
    1388           ENDIF
    13891341!
    13901342!--       Compute initial temperature field and other constants used in case
     
    14491401       hom(:,1,7,:)  = SPREAD( pt(:,nys,nxl), 2, statistic_regions+1 )
    14501402
    1451 
    1452 !
    1453 !--    Store initial salinity profile
    1454        IF ( ocean )  THEN
    1455           hom(:,1,26,:)  = SPREAD( sa(:,nys,nxl), 2, statistic_regions+1 )
    1456        ENDIF
    1457 
    14581403       IF ( humidity )  THEN
    14591404!
     
    15571502       ENDIF       
    15581503
    1559        IF ( ocean )  THEN
    1560           tsa_m = 0.0_wp
    1561           sa_p  = sa
    1562        ENDIF
    1563        
    15641504       CALL location_message( 'finished', .TRUE. )
    15651505
     
    18101750       ENDIF
    18111751       IF ( passive_scalar )  s_p  = s
    1812        IF ( ocean          )  sa_p = sa
    1813 
    18141752!
    18151753!--    Allthough tendency arrays are set in prognostic_equations, they have
     
    18211759       ENDIF
    18221760       IF ( passive_scalar )  ts_m  = 0.0_wp
    1823        IF ( ocean          )  tsa_m = 0.0_wp
    18241761!
    18251762!--    Initialize synthetic turbulence generator in case of restart.
     
    22412178    IF ( dt_dvrp /= 9999999.9_wp )  CALL init_dvrp
    22422179
    2243     IF ( ocean )  THEN
    2244 !
    2245 !--    Initialize quantities needed for the ocean model
    2246        CALL init_ocean
    2247 
    2248     ENDIF
    2249 !
    2250 !--    Initialize quantities for handling cloud physics
    2251 !--    This routine must be called before lpm_init, because
    2252 !--    otherwise, array d_exner, needed in data_output_dvrp (called by
    2253 !--    lpm_init) is not defined.
    2254     IF ( .NOT. ocean )  THEN
     2180!
     2181!-- Initialize quantities needed for the ocean model
     2182    IF ( ocean_mode )  CALL ocean_init
     2183
     2184!
     2185!-- Initialize quantities for handling cloud physics.
     2186!-- This routine must be called before lpm_init, becaus otherwise,
     2187!-- array d_exner, needed in data_output_dvrp (called by lpm_init) is not defined.
     2188    IF ( .NOT. ocean_mode )  THEN
    22552189
    22562190       ALLOCATE( hyp(nzb:nzt+1) )
     
    24542388    rdf_sc = 0.0_wp
    24552389    IF ( rayleigh_damping_factor /= 0.0_wp )  THEN
    2456        IF (  .NOT.  ocean )  THEN
     2390
     2391       IF (  .NOT.  ocean_mode )  THEN
    24572392          DO  k = nzb+1, nzt
    24582393             IF ( zu(k) >= rayleigh_damping_height )  THEN
     
    24642399          ENDDO
    24652400       ELSE
     2401!
     2402!--       In ocean mode, rayleigh damping is applied in the lower part of the
     2403!--       model domain
    24662404          DO  k = nzt, nzb+1, -1
    24672405             IF ( zu(k) <= rayleigh_damping_height )  THEN
     
    24732411          ENDDO
    24742412       ENDIF
     2413
    24752414    ENDIF
    24762415    IF ( scalar_rayleigh_damping )  rdf_sc = rdf
  • palm/trunk/SOURCE/init_grid.f90

    r3241 r3294  
    2525! -----------------
    2626! $Id$
     27! ocean renamed ocean_mode
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    359362               dz_stretch_level_start, ibc_uv_b, message_string,               &
    360363               momentum_advec, number_stretch_level_end,                       &
    361                number_stretch_level_start,ocean, psolver, scalar_advec,        &
     364               number_stretch_level_start, ocean_mode, psolver, scalar_advec,  &
    362365               topography, use_surface_fluxes
    363366         
     
    509512!
    510513!-- Define the vertical grid levels
    511     IF ( .NOT. ocean )  THEN
     514    IF ( .NOT. ocean_mode )  THEN
    512515   
    513516!
     
    12931296
    12941297    USE control_parameters,                                                    &
    1295         ONLY:  bc_lr_cyc, bc_ns_cyc, message_string, ocean
     1298        ONLY:  bc_lr_cyc, bc_ns_cyc, message_string, ocean_mode
    12961299
    12971300    USE indices,                                                               &
     
    13861389!-- In order to map topography on PALM grid also in case of ocean simulations,
    13871390!-- pre-calculate an offset value.
    1388     ocean_offset = MERGE( zw(0), 0.0_wp, ocean )
     1391    ocean_offset = MERGE( zw(0), 0.0_wp, ocean_mode )
    13891392!
    13901393!-- Reference buildings on top of orography. This is not necessary
     
    16381641!-- Topography input via ASCII format.
    16391642    ELSE
    1640        ocean_offset     = MERGE( zw(0), 0.0_wp, ocean )
     1643       ocean_offset     = MERGE( zw(0), 0.0_wp, ocean_mode )
    16411644       topo_3d          = IBSET( topo_3d, 0 )
    16421645       topo_3d(nzb,:,:) = IBCLR( topo_3d(nzb,:,:), 0 )
  • palm/trunk/SOURCE/init_masks.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! ocean renamed ocean_mode
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    145148               mask_x_loop, mask_xyz_dimension, mask_y, mask_y_loop, mask_z,   &
    146149               mask_z_loop, max_masks,  message_string, mid,                   &
    147                passive_scalar, ocean, varnamelength
     150               passive_scalar, ocean_mode, varnamelength
    148151
    149152
     
    412415
    413416             CASE ( 'rho_ocean' )
    414                 IF ( .NOT. ocean )  THEN
    415                    WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
    416                         '" requires ocean = .TRUE.'
     417                IF ( .NOT. ocean_mode )  THEN
     418                   WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
     419                        '" requires ocean mode'
    417420                   CALL message( 'init_masks', 'PA0109', 1, 2, 0, 6, 0 )
    418421                ENDIF
     
    428431
    429432             CASE ( 'sa' )
    430                 IF ( .NOT. ocean )  THEN
    431                    WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
    432                         '" requires ocean = .TRUE.'
     433                IF ( .NOT. ocean_mode )  THEN
     434                   WRITE ( message_string, * ) 'output of "', TRIM( var ),     &
     435                        '" requires ocean mode'
    433436                   CALL message( 'init_masks', 'PA0109', 1, 2, 0, 6, 0 )
    434437                ENDIF
  • palm/trunk/SOURCE/large_scale_forcing_nudging_mod.f90

    r3241 r3294  
    2525! -----------------
    2626! $Id$
     27! ocean renamed ocean_mode
     28!
     29! 3241 2018-09-12 15:02:00Z raasch
    2730! unused variables removed
    2831!
     
    9295               large_scale_forcing, large_scale_subsidence, lsf_surf, lsf_vert,&
    9396               lsf_exception, message_string, nesting_offline, neutral,        &
    94                nudging, passive_scalar, pt_surface, ocean, q_surface,          &
     97               nudging, passive_scalar, pt_surface, ocean_mode, q_surface,     &
    9598               surface_heatflux, surface_pressure, surface_waterflux,          &
    9699               topography, use_subsidence_tendencies
     
    696699       ENDIF
    697700
    698        IF ( large_scale_forcing  .AND.  ocean )  THEN
     701       IF ( large_scale_forcing  .AND.  ocean_mode )  THEN
    699702          message_string = 'The usage of large scale forcing from external &'//&
    700                         'file LSF_DATA is not implemented for ocean runs'
     703                        'file LSF_DATA is not implemented for ocean mode'
    701704          CALL message( 'check_parameters', 'PA0378', 1, 2, 0, 6, 0 )
    702705       ENDIF
  • palm/trunk/SOURCE/lpm_init.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! ocean renamed ocean_mode
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    231234    USE control_parameters,                                                    &
    232235        ONLY:  cloud_droplets, constant_flux_layer, current_timestep_number,   &
    233                dt_3d, dz, initializing_actions, message_string, ocean,         &
     236               dt_3d, dz, initializing_actions, message_string, ocean_mode,    &
    234237               simulated_time
    235238
     
    328331!-- In case of oceans runs, the vertical index calculations need an offset,
    329332!-- because otherwise the k indices will become negative
    330     IF ( ocean )  THEN
     333    IF ( ocean_mode )  THEN
    331334       offset_ocean_nzt    = nzt
    332335       offset_ocean_nzt_m1 = nzt - 1
  • palm/trunk/SOURCE/modules.f90

    r3289 r3294  
    2525! -----------------
    2626! $Id$
     27! ocean renamed ocean_mode
     28!
     29! 3289 2018-09-28 10:23:58Z suehring
    2730! +num_mean_inflow_profiles
    2831!
     
    11091112    CHARACTER (LEN=20)   ::  bc_s_b = 'dirichlet'                         !< namelist parameter
    11101113    CHARACTER (LEN=20)   ::  bc_s_t = 'initial_gradient'                  !< namelist parameter
    1111     CHARACTER (LEN=20)   ::  bc_sa_t = 'neumann'                          !< namelist parameter
    11121114    CHARACTER (LEN=20)   ::  bc_uv_b = 'dirichlet'                        !< namelist parameter
    11131115    CHARACTER (LEN=20)   ::  bc_uv_t = 'dirichlet'                        !< namelist parameter
     
    11801182    INTEGER(iwp) ::  ibc_s_b                           !< integer flag for bc_s_b
    11811183    INTEGER(iwp) ::  ibc_s_t                           !< integer flag for bc_s_t
    1182     INTEGER(iwp) ::  ibc_sa_t                          !< integer flag for bc_sa_t
    11831184    INTEGER(iwp) ::  ibc_uv_b                          !< integer flag for bc_uv_b
    11841185    INTEGER(iwp) ::  ibc_uv_t                          !< integer flag for bc_uv_t
     
    12421243    INTEGER(iwp) ::  q_vertical_gradient_level_ind(10) = -9999   !< grid index values of q_vertical_gradient_level(s)
    12431244    INTEGER(iwp) ::  s_vertical_gradient_level_ind(10) = -9999   !< grid index values of s_vertical_gradient_level(s)   
    1244     INTEGER(iwp) ::  sa_vertical_gradient_level_ind(10) = -9999  !< grid index values of sa_vertical_gradient_level(s)
    12451245    INTEGER(iwp) ::  section(100,3)                              !< collective array for section_xy/xz/yz
    12461246    INTEGER(iwp) ::  section_xy(100) = -9999                     !< namelist parameter
     
    12931293    LOGICAL ::  constant_top_heatflux = .TRUE.                   !< heat flux at domain top constant?
    12941294    LOGICAL ::  constant_top_momentumflux = .FALSE.              !< momentum flux at domain topconstant?
    1295     LOGICAL ::  constant_top_salinityflux = .TRUE.               !< salinity flux at ocean domain top?
     1295    LOGICAL ::  constant_top_salinityflux = .TRUE.               !< constant salinity flux at ocean surface
    12961296    LOGICAL ::  constant_top_scalarflux = .TRUE.                 !< passive-scalar flux at domain top constant?
    12971297    LOGICAL ::  constant_scalarflux = .TRUE.                     !< passive-scalar flux at surfaces constant?
     
    13281328    LOGICAL ::  neutral = .FALSE.                                !< namelist parameter
    13291329    LOGICAL ::  nudging = .FALSE.                                !< namelist parameter
    1330     LOGICAL ::  ocean = .FALSE.                                  !< namelist parameter
     1330    LOGICAL ::  ocean_mode = .FALSE.                             !< namelist parameter
    13311331    LOGICAL ::  passive_scalar = .FALSE.                         !< namelist parameter
    13321332    LOGICAL ::  plant_canopy = .FALSE.                           !< switch for use of plant canopy model
     
    13801380                                                               !< (galilei transformation)
    13811381    REAL(wp) ::  alpha_surface = 0.0_wp                        !< namelist parameter
    1382     REAL(wp) ::  atmos_ocean_sign = 1.0_wp                     !< vertical-grid conversion factor 
     1382    REAL(wp) ::  atmos_ocean_sign = 1.0_wp                     !< vertical-grid conversion factor
    13831383                                                               !< (=1.0 in atmosphere, =-1.0 in ocean)
    13841384    REAL(wp) ::  averaging_interval = 0.0_wp                   !< namelist parameter
     
    14541454    REAL(wp) ::  particle_maximum_age = 9999999.9_wp           !< namelist parameter
    14551455    REAL(wp) ::  prandtl_number = 1.0_wp                       !< namelist parameter
    1456     REAL(wp) ::  prho_reference                                !< reference state of potential density
    14571456    REAL(wp) ::  pt_damping_factor = 0.0_wp                    !< namelist parameter
    14581457    REAL(wp) ::  pt_damping_width = 0.0_wp                     !< namelist parameter
     
    14721471    REAL(wp) ::  rho_surface                                   !< surface value of density
    14731472    REAL(wp) ::  roughness_length = 0.1_wp                     !< namelist parameter
    1474     REAL(wp) ::  sa_surface = 35.0_wp                          !< namelist parameter
    14751473    REAL(wp) ::  simulated_time = 0.0_wp                       !< elapsed simulated time
    14761474    REAL(wp) ::  simulated_time_at_begin                       !< elapsed simulated time of previous run (job chain)
     
    15501548    REAL(wp) ::  s_vertical_gradient(10) = 0.0_wp                  !< namelist parameter
    15511549    REAL(wp) ::  s_vertical_gradient_level(10) = -999999.9_wp    !< namelist parameter
    1552     REAL(wp) ::  sa_vertical_gradient(10) = 0.0_wp                 !< namelist parameter
    1553     REAL(wp) ::  sa_vertical_gradient_level(10) = -999999.9_wp   !< namelist parameter
    15541550    REAL(wp) ::  skip_time_domask(max_masks) = 9999999.9_wp        !< namelist parameter
    15551551    REAL(wp) ::  threshold(20) = 0.0_wp                            !< namelist parameter
  • palm/trunk/SOURCE/netcdf_interface_mod.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    568571               do3d_time_count, domask_time_count, end_time, land_surface,     &
    569572               mask_size_l, mask_i, mask_i_global, mask_j, mask_j_global,      &
    570                mask_k_global, message_string, mid, ntdim_2d_xy,                &
    571                ntdim_2d_xz, ntdim_2d_yz, ntdim_3d, nz_do3d, plant_canopy,      &
     573               mask_k_global, message_string, mid, ntdim_2d_xy, ntdim_2d_xz,   &
     574               ntdim_2d_yz, ntdim_3d, nz_do3d, ocean_mode, plant_canopy,       &
    572575               run_description_header, section, simulated_time,                &
    573576               simulated_time_at_begin, skip_time_data_output_av,              &
     
    589592    USE land_surface_model_mod,                                                &
    590593        ONLY: lsm_define_netcdf_grid, nzb_soil, nzt_soil, nzs, zs
     594
     595    USE ocean_mod,                                                             &
     596        ONLY:  ocean_define_netcdf_grid
    591597
    592598    USE pegrid
     
    943949                CASE ( 'e', 'lpt', 'nc', 'nr', 'p', 'pc', 'pr', 'prr', 'pt',   &
    944950                       'q', 'qc', 'ql', 'ql_c', 'ql_v', 'ql_vp', 'qr', 'qv',   &
    945                        'rho_ocean', 's', 'sa', 'vpt'  )
     951                       's', 'vpt'  )
    946952
    947953                   grid_x = 'x'
     
    971977
    972978!             
    973 !--       Block of urban surface model outputs   
     979!--             Block of urban surface model outputs
    974980                CASE ( 'usm_output' )
    975981
    976                    CALL usm_define_netcdf_grid( domask(mid,av,i), found, &
     982                   CALL usm_define_netcdf_grid( domask( mid,av,i), found,      &
    977983                                                        grid_x, grid_y, grid_z )
    978984
    979985                CASE DEFAULT
    980 
    981                    CALL tcm_define_netcdf_grid( domask(mid,av,i), found, &
    982                                                         grid_x, grid_y, grid_z )
    983 
    984 !
    985 !--                Check for land surface quantities
     986!
     987!--                Check for quantities defined in other modules
     988                   IF ( .NOT. found  .AND.  air_chemistry )  THEN
     989                      CALL chem_define_netcdf_grid( domask(mid,av,i), found,   &
     990                                                    grid_x, grid_y, grid_z )
     991                   ENDIF
     992
     993                   IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
     994                      CALL gust_define_netcdf_grid( domask(mid,av,i), found,   &
     995                                                    grid_x, grid_y, grid_z )
     996                   ENDIF
     997
    986998                   IF ( land_surface )  THEN
    987999                      CALL lsm_define_netcdf_grid( domask(mid,av,i), found,    &
    9881000                                                   grid_x, grid_y, grid_z )
    9891001                   ENDIF
    990 !
    991 !--                Check for plant canopy quantities
     1002
     1003                   IF ( .NOT. found  .AND.  ocean_mode )  THEN
     1004                      CALL ocean_define_netcdf_grid( domask(mid,av,i), found,  &
     1005                                                     grid_x, grid_y, grid_z )
     1006                   ENDIF
     1007
    9921008                   IF ( .NOT. found  .AND.  plant_canopy )  THEN
    9931009                      CALL pcm_define_netcdf_grid( domask(mid,av,i), found,    &
     
    9951011                   ENDIF
    9961012
    997 !
    998 !--                Check for radiation quantities
    9991013                   IF ( .NOT. found  .AND.  radiation )  THEN
    10001014                      CALL radiation_define_netcdf_grid( domask(mid,av,i),     &
     
    10031017                   ENDIF
    10041018
    1005 !
    1006 !--                Check for gust module quantities
    1007                    IF ( .NOT. found  .AND.  gust_module_enabled )  THEN
    1008                       CALL gust_define_netcdf_grid( domask(mid,av,i), found,   &
    1009                                                     grid_x, grid_y, grid_z )
    1010                    ENDIF
    1011 
    1012 !
    1013 !--                Check for chemistry quantities                   
    1014                    IF ( .NOT. found  .AND.  air_chemistry )  THEN
    1015                       CALL chem_define_netcdf_grid( domask(mid,av,i),          &
    1016                                                     found, grid_x, grid_y,     &
    1017                                                     grid_z )
    1018                    ENDIF
    1019 
    1020 !
    1021 !--                Check for user-defined quantities
     1019                   CALL tcm_define_netcdf_grid( domask( mid,av,i), found,      &
     1020                                                        grid_x, grid_y, grid_z )
     1021
     1022!
     1023!--                Now check for user-defined quantities
    10221024                   IF ( .NOT. found )  THEN
    10231025                      CALL user_define_netcdf_grid( domask(mid,av,i), found,   &
     
    48064808!
    48074809!--       Define y-axis
    4808           CALL netcdf_create_dim(id_set_sp, 'k_y', ny/2, id_dim_y_sp, 282 )
     4810          CALL netcdf_create_dim( id_set_sp, 'k_y', ny/2, id_dim_y_sp, 282 )
    48094811          CALL netcdf_create_var( id_set_sp, (/ id_dim_y_sp /), 'k_y',         &
    48104812                                  NF90_DOUBLE, id_var_y_sp, 'm-1', '', 283,    &
  • palm/trunk/SOURCE/parin.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    471474        ONLY:  netcdf_data_format, netcdf_deflate, netcdf_precision
    472475
     476    USE ocean_mod,                                                             &
     477        ONLY:  ocean_parin
     478
    473479    USE pegrid
    474480               
     
    527533    NAMELIST /inipar/  alpha_surface, approximation, bc_e_b,     &
    528534                       bc_lr, bc_ns, bc_p_b, bc_p_t, bc_pt_b, bc_pt_t, bc_q_b, &
    529              bc_q_t,bc_s_b, bc_s_t, bc_sa_t, bc_uv_b, bc_uv_t,                 &
    530              bottom_salinityflux, building_height, building_length_x,          &
     535             bc_q_t,bc_s_b, bc_s_t, bc_uv_b, bc_uv_t,                 &
     536             building_height, building_length_x,          &
    531537             building_length_y, building_wall_left, building_wall_south,       &
    532538             calc_soil_moisture_during_spinup,                                 &
     
    559565             most_method, nesting_offline,                  &
    560566             netcdf_precision, neutral, ngsrb,                                 &
    561              nsor, nsor_ini, nudging, nx, ny, nz, ocean, omega, omega_sor,     &
    562              outflow_source_plane, passive_scalar,                             &
     567             nsor, nsor_ini, nudging, nx, ny, nz, ocean_mode, omega,           &
     568             omega_sor, outflow_source_plane, passive_scalar,                  &
    563569             prandtl_number, psolver, pt_damping_factor,        &
    564570             pt_damping_width, pt_reference, pt_surface,                       &
     
    571577             recycling_width, recycling_yshift,                                &
    572578             reference_state, residual_limit,                                  &
    573              roughness_length, sa_surface,                                     &
    574              sa_vertical_gradient, sa_vertical_gradient_level, scalar_advec,   &
     579             roughness_length,                                                 &
     580             scalar_advec,   &
    575581             scalar_rayleigh_damping,                              &
    576582             spinup_time, spinup_pt_amplitude, spinup_pt_mean,                 &
     
    581587             s_vertical_gradient_level, time_utc_init, timestep_scheme,        &
    582588             topography, topography_grid_convention, top_heatflux,             &
    583              top_momentumflux_u, top_momentumflux_v, top_salinityflux,         &
     589             top_momentumflux_u, top_momentumflux_v,                           &
    584590             top_scalarflux, transpose_compute_overlap,                        &
    585591             tunnel_height, tunnel_length, tunnel_width_x, tunnel_width_y,     &
     
    593599             vg_vertical_gradient_level, v_bulk, v_profile,&
    594600             wall_adjustment, wall_heatflux, wall_humidityflux,                &
    595              wall_salinityflux, wall_scalarflux, y_shift, zeta_max, zeta_min,  &
     601             wall_scalarflux, y_shift, zeta_max, zeta_min,  &
    596602             z0h_factor
    597603
    598     NAMELIST /initialization_parameters/  alpha_surface,         &
     604    NAMELIST /initialization_parameters/  alpha_surface,                       &
    599605             approximation, bc_e_b,                                            &
    600606             bc_lr, bc_ns, bc_p_b, bc_p_t, bc_pt_b, bc_pt_t, bc_q_b,           &
    601              bc_q_t,bc_s_b, bc_s_t, bc_sa_t, bc_uv_b, bc_uv_t,                 &
    602              bottom_salinityflux, building_height, building_length_x,          &
     607             bc_q_t,bc_s_b, bc_s_t, bc_uv_b, bc_uv_t,                          &
     608             building_height, building_length_x,                               &
    603609             building_length_y, building_wall_left, building_wall_south,       &
    604610             calc_soil_moisture_during_spinup,                                 &
    605              call_psolver_at_all_substeps,  &
     611             call_psolver_at_all_substeps,                                     &
    606612             canyon_height,                                                    &
    607613             canyon_width_x, canyon_width_y, canyon_wall_left,                 &
    608              canyon_wall_south, cfl_factor, cloud_droplets,   &
    609              cloud_top_radiation,                 &
    610              collective_wait, complex_terrain,           &
     614             canyon_wall_south, cfl_factor, cloud_droplets,                    &
     615             cloud_top_radiation,                                              &
     616             collective_wait, complex_terrain,                                 &
    611617             conserve_volume_flow,                                             &
    612618             conserve_volume_flow_mode, constant_flux_layer,                   &
    613              coupling_start_time,             &
     619             coupling_start_time,                                              &
    614620             cycle_mg, damp_level_1d,                                          &
    615621             data_output_during_spinup,                                        &
    616622             day_of_year_init,                                                 &
    617623             dissipation_1d,                                                   &
    618              dp_external, dp_level_b, dp_smooth, dpdxy,    &
     624             dp_external, dp_level_b, dp_smooth, dpdxy,                        &
    619625             dt, dt_pr_1d, dt_run_control_1d, dt_spinup, dx, dy, dz, dz_max,   &
    620626             dz_stretch_factor, dz_stretch_level, dz_stretch_level_start,      &
     
    626632             initializing_actions, km_constant,                                &
    627633             large_scale_forcing, large_scale_subsidence, latitude,            &
    628              longitude,                                 &
     634             longitude,                                                        &
    629635             loop_optimization, lsf_exception, masking_method, mg_cycles,      &
    630636             mg_switch_to_pe0_level, mixing_length_1d, momentum_advec,         &
    631              most_method, nesting_offline,                  &
     637             most_method, nesting_offline,                                     &
    632638             netcdf_precision, neutral, ngsrb,                                 &
    633              nsor, nsor_ini, nudging, nx, ny, nz, ocean, omega, omega_sor,     &
    634              outflow_source_plane, passive_scalar,                             &
    635              prandtl_number, psolver, pt_damping_factor,        &
     639             nsor, nsor_ini, nudging, nx, ny, nz, ocean_mode, omega,           &
     640             omega_sor, outflow_source_plane, passive_scalar,                  &
     641             prandtl_number, psolver, pt_damping_factor,                       &
    636642             pt_damping_width, pt_reference, pt_surface,                       &
    637643             pt_surface_initial_change, pt_vertical_gradient,                  &
     
    643649             recycling_width, recycling_yshift,                                &
    644650             reference_state, residual_limit,                                  &
    645              roughness_length, sa_surface,                                     &
    646              sa_vertical_gradient, sa_vertical_gradient_level, scalar_advec,   &
    647              scalar_rayleigh_damping,                              &
     651             roughness_length, scalar_advec,                                   &
     652             scalar_rayleigh_damping,                                          &
    648653             spinup_time, spinup_pt_amplitude, spinup_pt_mean,                 &
    649654             statistic_regions, subs_vertical_gradient,                        &
     
    653658             s_vertical_gradient_level, time_utc_init, timestep_scheme,        &
    654659             topography, topography_grid_convention, top_heatflux,             &
    655              top_momentumflux_u, top_momentumflux_v, top_salinityflux,         &
     660             top_momentumflux_u, top_momentumflux_v,                           &
    656661             top_scalarflux, transpose_compute_overlap,                        &
    657662             tunnel_height, tunnel_length, tunnel_width_x, tunnel_width_y,     &
     
    663668             use_free_convection_scaling,                                      &
    664669             uv_heights, u_bulk, u_profile, vg_surface, vg_vertical_gradient,  &
    665              vg_vertical_gradient_level, v_bulk, v_profile,&
     670             vg_vertical_gradient_level, v_bulk, v_profile,                    &
    666671             wall_adjustment, wall_heatflux, wall_humidityflux,                &
    667              wall_salinityflux, wall_scalarflux, y_shift, zeta_max, zeta_min,  &
    668              z0h_factor
     672             wall_scalarflux, y_shift, zeta_max, zeta_min, z0h_factor
    669673             
    670674    NAMELIST /d3par/  averaging_interval, averaging_interval_pr,               &
     
    858862
    859863!
    860 !--       Check if land surface model is used and read &lsm_par if required
     864!--       Check for module namelists and read them
    861865          CALL lsm_parin
    862 
    863 !
    864 !--       Check if gust module is used and read &gust_par if required
    865866          CALL bcm_parin
    866 
    867 !
    868 !--       Check if urban surface model is used and read &urban_surface_par if required
    869867          CALL usm_parin
    870 
    871 !
    872 !--       Check if spectra shall be calculated and read spectra_par if required
    873868          CALL spectra_parin
    874 
    875 !
    876 !--       Check if radiation model is used and read &radiation_par if required
    877869          CALL radiation_parin
    878 
    879 !
    880 !--       Check if gust module is used and read &gust_par if required
    881870          CALL gust_parin
    882 
    883 !
    884 !--       Check if multi agent system is used and read &agents_par if required
    885871          CALL mas_parin
    886 
    887 !
    888 !--       Check if plant canopy model is used and read &canopy_par if required
     872          CALL ocean_parin
    889873          CALL pcm_parin
    890 
    891 !
    892 !--       Read control parameters for optionally used model software packages
    893874          CALL package_parin
    894 
    895 !
    896 !--       Check if wind turbine model is used and read &wind_turbine_par if
    897 !--       required
    898875          CALL wtm_parin
    899 !
    900 !--       Check if virtual flights should be carried out and read &flight_par
    901 !--       if required
    902876          CALL flight_parin
    903 !
    904 !--       Check if synthetic turbulence generator is used and read stg_par if
    905 !--       required
    906877          CALL stg_parin
    907 !
    908 !--       Read chemistry variables
    909878          CALL chem_parin
    910 !
    911 !--       Check if uv exposure model is used and read &uvexposure_par
    912879          CALL uvem_parin
    913880!
  • palm/trunk/SOURCE/plant_canopy_model_mod.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! ocean renamed ocean_mode
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    685688
    686689       USE control_parameters,                                                 &
    687            ONLY: humidity, message_string, ocean, urban_surface
     690           ONLY: humidity, message_string, ocean_mode, urban_surface
    688691
    689692       USE netcdf_data_input_mod,                                              &
     
    732735          gradient = 0.0_wp
    733736
    734           IF (  .NOT.  ocean )  THEN
     737          IF (  .NOT.  ocean_mode )  THEN
    735738
    736739             lad(0) = lad_surface
  • palm/trunk/SOURCE/prognostic_equations.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    277280
    278281
     282    USE advec_s_bc_mod,                                                        &
     283        ONLY:  advec_s_bc
     284
     285    USE advec_s_pw_mod,                                                        &
     286        ONLY:  advec_s_pw
     287
     288    USE advec_s_up_mod,                                                        &
     289        ONLY:  advec_s_up
     290
     291    USE advec_u_pw_mod,                                                        &
     292        ONLY:  advec_u_pw
     293
     294    USE advec_u_up_mod,                                                        &
     295        ONLY:  advec_u_up
     296
     297    USE advec_v_pw_mod,                                                        &
     298        ONLY:  advec_v_pw
     299
     300    USE advec_v_up_mod,                                                        &
     301        ONLY:  advec_v_up
     302
     303    USE advec_w_pw_mod,                                                        &
     304        ONLY:  advec_w_pw
     305
     306    USE advec_w_up_mod,                                                        &
     307        ONLY:  advec_w_up
     308
     309    USE advec_ws,                                                              &
     310        ONLY:  advec_s_ws, advec_u_ws, advec_v_ws, advec_w_ws
    279311
    280312    USE arrays_3d,                                                             &
     
    287319               flux_l_sa, nc, nc_p, nr, nr_p, pt, ptdf_x, ptdf_y, pt_init,     &
    288320               pt_p, prho, q, q_init, q_p, qc, qc_p, qr, qr_p, rdf, rdf_sc,    &
    289                ref_state, rho_ocean, s,  s_init, s_p, sa, sa_init, sa_p, tend, &
    290                te_m, tnc_m,  tnr_m, tpt_m, tq_m, tqc_m, tqr_m, ts_m, tsa_m,    &
    291                tu_m, tv_m, tw_m, u, ug, u_init, u_p, v, vg, vpt, v_init, v_p,  &
    292                w, w_p
     321               ref_state, rho_ocean, s, s_init, s_p, tend, te_m, tnc_m,        &
     322               tnr_m, tpt_m, tq_m, tqc_m, tqr_m, ts_m, tu_m, tv_m, tw_m, u,    &
     323               ug, u_init, u_p, v, vg, vpt, v_init, v_p, w, w_p
    293324
    294325    USE bulk_cloud_model_mod,                                                  &
     
    297328               microphysics_morrison, microphysics_seifert
    298329
     330    USE buoyancy_mod,                                                          &
     331        ONLY:  buoyancy
     332
     333    USE calc_radiation_mod,                                                    &
     334        ONLY:  calc_radiation
     335
    299336    USE chemistry_model_mod,                                                   &
    300337        ONLY:  chem_integrate, chem_prognostic_equations,                      &
    301338               chem_species, nspec, nvar, spc_names
    302339           
     340    USE chem_modules,                                                          &
     341        ONLY:  call_chem_at_all_substeps, chem_gasphase_on
     342
    303343    USE chem_photolysis_mod,                                                   &
    304344        ONLY:  photolysis_control
    305 
    306     USE chem_modules,                                                          &
    307         ONLY:  call_chem_at_all_substeps, chem_gasphase_on
    308345
    309346    USE control_parameters,                                                    &
     
    315352               large_scale_subsidence,                  &
    316353               neutral, nudging, &
    317                ocean, passive_scalar, plant_canopy,                            &
    318                prho_reference, prho_reference,                                 &
    319                prho_reference, pt_reference, pt_reference, pt_reference,       &
     354               ocean_mode, passive_scalar, plant_canopy, pt_reference,         &
    320355               scalar_advec, scalar_advec, simulated_time, sloping_surface,    &
    321356               timestep_scheme, tsc, use_subsidence_tendencies,                &
     
    323358               ws_scheme_sca, urban_surface, land_surface
    324359
     360    USE coriolis_mod,                                                          &
     361        ONLY:  coriolis
     362
    325363    USE cpulog,                                                                &
    326364        ONLY:  cpu_log, log_point, log_point_s
    327365
    328 
    329     USE eqn_state_seawater_mod,                                                &
    330         ONLY:  eqn_state_seawater
     366    USE diffusion_s_mod,                                                       &
     367        ONLY:  diffusion_s
     368
     369    USE diffusion_u_mod,                                                       &
     370        ONLY:  diffusion_u
     371
     372    USE diffusion_v_mod,                                                       &
     373        ONLY:  diffusion_v
     374
     375    USE diffusion_w_mod,                                                       &
     376        ONLY:  diffusion_w
    331377
    332378    USE indices,                                                               &
     
    334380               nzb, nzt, wall_flags_0
    335381
    336     USE advec_ws,                                                              &
    337         ONLY:  advec_s_ws, advec_u_ws, advec_v_ws, advec_w_ws
    338 
    339     USE advec_s_bc_mod,                                                        &
    340         ONLY:  advec_s_bc
    341 
    342     USE advec_s_pw_mod,                                                        &
    343         ONLY:  advec_s_pw
    344 
    345     USE advec_s_up_mod,                                                        &
    346         ONLY:  advec_s_up
    347 
    348     USE advec_u_pw_mod,                                                        &
    349         ONLY:  advec_u_pw
    350 
    351     USE advec_u_up_mod,                                                        &
    352         ONLY:  advec_u_up
    353 
    354     USE advec_v_pw_mod,                                                        &
    355         ONLY:  advec_v_pw
    356 
    357     USE advec_v_up_mod,                                                        &
    358         ONLY:  advec_v_up
    359 
    360     USE advec_w_pw_mod,                                                        &
    361         ONLY:  advec_w_pw
    362 
    363     USE advec_w_up_mod,                                                        &
    364         ONLY:  advec_w_up
    365 
    366     USE buoyancy_mod,                                                          &
    367         ONLY:  buoyancy
    368 
    369     USE calc_radiation_mod,                                                    &
    370         ONLY:  calc_radiation
    371 
    372     USE coriolis_mod,                                                          &
    373         ONLY:  coriolis
    374 
    375     USE diffusion_s_mod,                                                       &
    376         ONLY:  diffusion_s
    377 
    378     USE diffusion_u_mod,                                                       &
    379         ONLY:  diffusion_u
    380 
    381     USE diffusion_v_mod,                                                       &
    382         ONLY:  diffusion_v
    383 
    384     USE diffusion_w_mod,                                                       &
    385         ONLY:  diffusion_w
    386 
    387382    USE kinds
    388383
    389384    USE lsf_nudging_mod,                                                       &
    390385        ONLY:  ls_advec, nudge
     386
     387    USE ocean_mod,                                                             &
     388        ONLY:  eqn_state_seawater, ocean_prognostic_equations
    391389
    392390    USE plant_canopy_model_mod,                                                &
     
    403401        ONLY:  subsidence
    404402
     403    USE surface_mod,                                                           &
     404        ONLY :  surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v, surf_usm_h,    &
     405                surf_usm_v
     406
    405407    USE turbulence_closure_mod,                                                &
    406408        ONLY:  tcm_prognostic
     
    408410    USE user_actions_mod,                                                      &
    409411        ONLY:  user_actions
    410 
    411     USE surface_mod,                                                           &
    412         ONLY :  surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v, surf_usm_h,    &
    413                 surf_usm_v
    414412
    415413    USE wind_turbine_model_mod,                                                &
     
    699697
    700698          IF ( .NOT. neutral )  THEN
    701              IF ( ocean )  THEN
     699             IF ( ocean_mode )  THEN
    702700                CALL buoyancy( i, j, rho_ocean, 3 )
    703701             ELSE
     
    844842                ENDIF
    845843             ENDIF
    846 
    847           ENDIF
    848 
    849 !
    850 !--       If required, compute prognostic equation for salinity
    851           IF ( ocean )  THEN
    852 
    853 !
    854 !--          Tendency-terms for salinity
    855              tend(:,j,i) = 0.0_wp
    856              IF ( timestep_scheme(1:5) == 'runge' ) &
    857              THEN
    858                 IF ( ws_scheme_sca )  THEN
    859                     CALL advec_s_ws( i, j, sa, 'sa', flux_s_sa,  &
    860                                 diss_s_sa, flux_l_sa, diss_l_sa, i_omp_start, tn  )
    861                 ELSE
    862                     CALL advec_s_pw( i, j, sa )
    863                 ENDIF
    864              ELSE
    865                 CALL advec_s_up( i, j, sa )
    866              ENDIF
    867              CALL diffusion_s( i, j, sa,                                       &
    868                                surf_def_h(0)%sasws, surf_def_h(1)%sasws,       &
    869                                surf_def_h(2)%sasws,                            &
    870                                surf_lsm_h%sasws,    surf_usm_h%sasws,          &
    871                                surf_def_v(0)%sasws, surf_def_v(1)%sasws,       &
    872                                surf_def_v(2)%sasws, surf_def_v(3)%sasws,       &
    873                                surf_lsm_v(0)%sasws, surf_lsm_v(1)%sasws,       &
    874                                surf_lsm_v(2)%sasws, surf_lsm_v(3)%sasws,       &
    875                                surf_usm_v(0)%sasws, surf_usm_v(1)%sasws,       &
    876                                surf_usm_v(2)%sasws, surf_usm_v(3)%sasws )
    877 
    878              CALL user_actions( i, j, 'sa-tendency' )
    879 
    880 !
    881 !--          Prognostic equation for salinity
    882              DO  k = nzb+1, nzt
    883                 sa_p(k,j,i) = sa(k,j,i) + ( dt_3d *                            &
    884                                                   ( tsc(2) * tend(k,j,i) +     &
    885                                                     tsc(3) * tsa_m(k,j,i) )    &
    886                                                   - tsc(5) * rdf_sc(k)         &
    887                                                    * ( sa(k,j,i) - sa_init(k) )&
    888                                           ) * MERGE( 1.0_wp, 0.0_wp,           &
    889                                                 BTEST( wall_flags_0(k,j,i), 0 )&
    890                                                    )
    891                 IF ( sa_p(k,j,i) < 0.0_wp )  sa_p(k,j,i) = 0.1_wp * sa(k,j,i)
    892              ENDDO
    893 
    894 !
    895 !--          Calculate tendencies for the next Runge-Kutta step
    896              IF ( timestep_scheme(1:5) == 'runge' )  THEN
    897                 IF ( intermediate_timestep_count == 1 )  THEN
    898                    DO  k = nzb+1, nzt
    899                       tsa_m(k,j,i) = tend(k,j,i)
    900                    ENDDO
    901                 ELSEIF ( intermediate_timestep_count < &
    902                          intermediate_timestep_count_max )  THEN
    903                    DO  k = nzb+1, nzt
    904                       tsa_m(k,j,i) =   -9.5625_wp * tend(k,j,i) +              &
    905                                         5.3125_wp * tsa_m(k,j,i)
    906                    ENDDO 
    907                 ENDIF
    908              ENDIF
    909 
    910 !
    911 !--          Calculate density by the equation of state for seawater
    912              CALL eqn_state_seawater( i, j )
    913844
    914845          ENDIF
     
    13241255
    13251256!
    1326 !--       If required, compute prognostic equation for chemical quantites
     1257!--       Calculate prognostic equation for chemical quantites
    13271258          IF ( air_chemistry )  THEN
     1259             !> TODO: remove time measurement since it slows down performance because it will be called extremely often
    13281260             CALL cpu_log( log_point(83), '(chem advec+diff+prog)', 'start' )
    13291261!
    13301262!--          Loop over chemical species
    13311263             DO  lsp = 1, nvar                         
    1332                 CALL chem_prognostic_equations ( chem_species(lsp)%conc_p,     &
     1264                CALL chem_prognostic_equations( chem_species(lsp)%conc_p,      &
    13331265                                     chem_species(lsp)%conc,                   &
    13341266                                     chem_species(lsp)%tconc_m,                &
     
    13421274
    13431275             CALL cpu_log( log_point(83), '(chem advec+diff+prog)', 'stop' )             
    1344           ENDIF   ! Chemicals equations                     
    1345 
    1346        ENDDO
    1347     ENDDO
     1276          ENDIF   ! Chemical equations
     1277!
     1278!--       Calculate prognostic equations for the ocean
     1279          IF ( ocean_mode )  THEN
     1280             CALL ocean_prognostic_equations( i, j, i_omp_start, tn )
     1281          ENDIF
     1282
     1283       ENDDO  ! loop over j
     1284    ENDDO  ! loop over i
    13481285    !$OMP END PARALLEL
    13491286
     
    15761513
    15771514    IF ( .NOT. neutral )  THEN
    1578        IF ( ocean )  THEN
     1515       IF ( ocean_mode )  THEN
    15791516          CALL buoyancy( rho_ocean, 3 )
    15801517       ELSE
     
    17701707
    17711708!
    1772 !-- If required, compute prognostic equation for salinity
    1773     IF ( ocean )  THEN
    1774 
    1775        CALL cpu_log( log_point(37), 'sa-equation', 'start' )
    1776 
    1777 !
    1778 !--    sa-tendency terms with communication
    1779        sbt = tsc(2)
    1780        IF ( scalar_advec == 'bc-scheme' )  THEN
    1781 
    1782           IF ( timestep_scheme(1:5) /= 'runge' )  THEN
    1783 !
    1784 !--          Bott-Chlond scheme always uses Euler time step. Thus:
    1785              sbt = 1.0_wp
    1786           ENDIF
    1787           tend = 0.0_wp
    1788           CALL advec_s_bc( sa, 'sa' )
    1789 
    1790        ENDIF
    1791 
    1792 !
    1793 !--    sa-tendency terms with no communication
    1794        IF ( scalar_advec /= 'bc-scheme' )  THEN
    1795           tend = 0.0_wp
    1796           IF ( timestep_scheme(1:5) == 'runge' )  THEN
    1797              IF ( ws_scheme_sca )  THEN
    1798                  CALL advec_s_ws( sa, 'sa' )
    1799              ELSE
    1800                  CALL advec_s_pw( sa )
    1801              ENDIF
    1802           ELSE
    1803              CALL advec_s_up( sa )
    1804           ENDIF
    1805        ENDIF
    1806 
    1807        CALL diffusion_s( sa,                                                   &
    1808                          surf_def_h(0)%sasws, surf_def_h(1)%sasws,             &
    1809                          surf_def_h(2)%sasws,                                  &
    1810                          surf_lsm_h%sasws,    surf_usm_h%sasws,                &
    1811                          surf_def_v(0)%sasws, surf_def_v(1)%sasws,             &
    1812                          surf_def_v(2)%sasws, surf_def_v(3)%sasws,             &
    1813                          surf_lsm_v(0)%sasws, surf_lsm_v(1)%sasws,             &
    1814                          surf_lsm_v(2)%sasws, surf_lsm_v(3)%sasws,             &
    1815                          surf_usm_v(0)%sasws, surf_usm_v(1)%sasws,             &
    1816                          surf_usm_v(2)%sasws, surf_usm_v(3)%sasws )
    1817 
    1818        CALL user_actions( 'sa-tendency' )
    1819 
    1820 !
    1821 !--    Prognostic equation for salinity
    1822        DO  i = nxl, nxr
    1823           DO  j = nys, nyn
    1824              DO  k = nzb+1, nzt
    1825                 sa_p(k,j,i) = sa(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +      &
    1826                                                    tsc(3) * tsa_m(k,j,i) )     &
    1827                                                  - tsc(5) * rdf_sc(k) *        &
    1828                                                  ( sa(k,j,i) - sa_init(k) )    &
    1829                                           )                                    &
    1830                                    * MERGE( 1.0_wp, 0.0_wp,                    &
    1831                                              BTEST( wall_flags_0(k,j,i), 0 )   &
    1832                                           )
    1833                 IF ( sa_p(k,j,i) < 0.0_wp )  sa_p(k,j,i) = 0.1_wp * sa(k,j,i)
    1834              ENDDO
    1835           ENDDO
    1836        ENDDO
    1837 
    1838 !
    1839 !--    Calculate tendencies for the next Runge-Kutta step
    1840        IF ( timestep_scheme(1:5) == 'runge' )  THEN
    1841           IF ( intermediate_timestep_count == 1 )  THEN
    1842              DO  i = nxl, nxr
    1843                 DO  j = nys, nyn
    1844                    DO  k = nzb+1, nzt
    1845                       tsa_m(k,j,i) = tend(k,j,i)
    1846                    ENDDO
    1847                 ENDDO
    1848              ENDDO
    1849           ELSEIF ( intermediate_timestep_count < &
    1850                    intermediate_timestep_count_max )  THEN
    1851              DO  i = nxl, nxr
    1852                 DO  j = nys, nyn
    1853                    DO  k = nzb+1, nzt
    1854                       tsa_m(k,j,i) =   -9.5625_wp * tend(k,j,i) +              &
    1855                                         5.3125_wp * tsa_m(k,j,i)
    1856                    ENDDO
    1857                 ENDDO
    1858              ENDDO
    1859           ENDIF
    1860        ENDIF
    1861 
    1862        CALL cpu_log( log_point(37), 'sa-equation', 'stop' )
    1863 
    1864 !
    1865 !--    Calculate density by the equation of state for seawater
    1866        CALL cpu_log( log_point(38), 'eqns-seawater', 'start' )
    1867        CALL eqn_state_seawater
    1868        CALL cpu_log( log_point(38), 'eqns-seawater', 'stop' )
    1869 
    1870     ENDIF
    1871 
    1872 !
    18731709!-- If required, compute prognostic equation for total water content
    18741710    IF ( humidity )  THEN
     
    20741910
    20751911          CALL cpu_log( log_point(67), 'qc-equation', 'stop' )
     1912
    20761913          CALL cpu_log( log_point(68), 'nc-equation', 'start' )
    2077 
    20781914!
    20791915!--       Calculate prognostic equation for cloud drop concentration
     
    24612297    ENDIF
    24622298
     2299!
     2300!-- Calculate prognostic equations for turbulence closure
    24632301    CALL tcm_prognostic()
    24642302
    24652303!
    2466 !-- If required, compute prognostic equation for chemical quantites
     2304!-- Calculate prognostic equation for chemical quantites
    24672305    IF ( air_chemistry )  THEN
    24682306       CALL cpu_log( log_point(83), '(chem advec+diff+prog)', 'start' )
     
    24702308!--    Loop over chemical species
    24712309       DO  lsp = 1, nvar                         
    2472           CALL chem_prognostic_equations ( chem_species(lsp)%conc_p,           &
    2473                                            chem_species(lsp)%conc,             &
    2474                                            chem_species(lsp)%tconc_m,          &
    2475                                            chem_species(lsp)%conc_pr_init,     &
    2476                                            lsp )       
     2310          CALL chem_prognostic_equations( chem_species(lsp)%conc_p,            &
     2311                                          chem_species(lsp)%conc,              &
     2312                                          chem_species(lsp)%tconc_m,           &
     2313                                          chem_species(lsp)%conc_pr_init,      &
     2314                                          lsp )
    24772315       ENDDO
    24782316
     
    24802318    ENDIF   ! Chemicals equations
    24812319
     2320!
     2321!-- Calculate prognostic equations for the ocean
     2322    IF ( ocean_mode )  CALL ocean_prognostic_equations()
    24822323
    24832324 END SUBROUTINE prognostic_equations_vector
  • palm/trunk/SOURCE/read_restart_data_mod.f90

    r3289 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3289 2018-09-28 10:23:58Z suehring
    2730! Introduce module parameter for number of inflow profiles
    2831!
     
    7780
    7881    USE control_parameters
    79      
    8082
    8183    IMPLICIT NONE
     
    99101
    100102
    101     PUBLIC rrd_global, rrd_read_parts_of_global, rrd_local,      &
    102            rrd_skip_global
     103    PUBLIC rrd_global, rrd_read_parts_of_global, rrd_local, rrd_skip_global
    103104
    104105
    105106 CONTAINS
    106107
     108!------------------------------------------------------------------------------!
    107109! Description:
    108110! ------------
     
    115117       USE arrays_3d,                                                          &
    116118           ONLY:  inflow_damping_factor, mean_inflow_profiles, pt_init,        &
    117                   q_init, ref_state, s_init, sa_init, u_init, ug, v_init, vg
     119                  q_init, ref_state, sa_init, s_init, u_init, ug, v_init, vg
    118120
    119121       USE bulk_cloud_model_mod,                                               &
     
    140142       USE netcdf_interface,                                                   &
    141143           ONLY:  netcdf_precision, output_for_t0
     144
     145       USE ocean_mod,                                                          &
     146           ONLY:  ocean_rrd_global
    142147
    143148       USE particle_attributes,                                                &
     
    177182
    178183       CALL check_open( 13 )
    179 
    180 !
    181 !-- Make version number check first
     184!
     185!--    Make version number check first
    182186       READ ( 13 )  length
    183187       READ ( 13 )  restart_string(1:length)
     
    196200
    197201!
    198 !-- Read number of PEs and horizontal index bounds of all PEs used in previous
    199 !-- run
     202!--    Read number of PEs and horizontal index bounds of all PEs used in the
     203!--    previous run
    200204       READ ( 13 )  length
    201205       READ ( 13 )  restart_string(1:length)
     
    223227
    224228!
    225 !-- Read vertical number of gridpoints and number of different areas used
    226 !-- for computing statistics. Allocate arrays depending on these values,
    227 !-- which are needed for the following read instructions.
     229!--    Read vertical number of gridpoints and number of different areas used
     230!--    for computing statistics. Allocate arrays depending on these values,
     231!--    which are needed for the following read instructions.
    228232       READ ( 13 )  length
    229233       READ ( 13 )  restart_string(1:length)
     
    257261       ENDIF
    258262       READ ( 13 )  statistic_regions
     263
    259264       IF ( .NOT. ALLOCATED( ug ) )  THEN
    260265          ALLOCATE( ug(0:nz+1), u_init(0:nz+1), vg(0:nz+1),                    &
     
    266271
    267272!
    268 !-- Now read all control parameters:
    269 !-- Caution: When the following read instructions have been changed, the
    270 !-- -------  version number stored in the variable binary_version_global has to
    271 !--          be increased. The same changes must also be done in
    272 !--          wrd_write_global.
     273!--    Now read all control parameters:
     274!--    Caution: When the following read instructions have been changed, the
     275!--    -------  version number stored in the variable binary_version_global has
     276!--             to be increased. The same changes must also be done in
     277!--             wrd_write_global.
    273278       READ ( 13 )  length
    274279       READ ( 13 )  restart_string(1:length)
     
    318323             CASE ( 'bc_s_t' )
    319324                READ ( 13 )  bc_s_t
    320              CASE ( 'bc_sa_t' )
    321                 READ ( 13 )  bc_sa_t
    322325             CASE ( 'bc_uv_b' )
    323326                READ ( 13 )  bc_uv_b
    324327             CASE ( 'bc_uv_t' )
    325328                READ ( 13 )  bc_uv_t
    326              CASE ( 'bottom_salinityflux' )
    327                 READ ( 13 )  bottom_salinityflux
    328329             CASE ( 'building_height' )
    329330                READ ( 13 )  building_height
     
    496497                READ ( 13 )  ny
    497498                ny_on_file = ny
    498              CASE ( 'ocean' )
    499                 READ ( 13 )  ocean
     499             CASE ( 'ocean_mode' )
     500                READ ( 13 )  ocean_mode
    500501             CASE ( 'old_dt' )
    501502                READ ( 13 )  old_dt
     
    580581             CASE ( 's_vertical_gradient_level_ind' )
    581582                READ ( 13 )  s_vertical_gradient_level_ind
    582              CASE ( 'sa_init' )
    583                 READ ( 13 )  sa_init
    584              CASE ( 'sa_surface' )
    585                 READ ( 13 )  sa_surface
    586              CASE ( 'sa_vertical_gradient' )
    587                 READ ( 13 )  sa_vertical_gradient
    588              CASE ( 'sa_vertical_gradient_level' )
    589                 READ ( 13 )  sa_vertical_gradient_level
    590583             CASE ( 'scalar_advec' )
    591584                READ ( 13 )  scalar_advec
     
    662655             CASE ( 'top_momentumflux_v' )
    663656                READ ( 13 )  top_momentumflux_v
    664              CASE ( 'top_salinityflux' )
    665                 READ ( 13 )  top_salinityflux
    666657             CASE ( 'top_scalarflux' )
    667658                READ ( 13 )  top_scalarflux
     
    754745             CASE ( 'wall_humidityflux' )
    755746                READ ( 13 )  wall_humidityflux
    756              CASE ( 'wall_salinityflux' )
    757                 READ ( 13 )  wall_salinityflux
    758747             CASE ( 'wall_scalarflux' )
    759748                READ ( 13 )  wall_scalarflux
     
    769758                READ ( 13 )  z_i
    770759
    771 
    772760             CASE DEFAULT
    773 
    774                 IF ( .NOT. found ) CALL bcm_rrd_global( found )
    775 
    776                 IF ( .NOT. found ) CALL wtm_rrd_global( found )
    777 
    778                 IF ( .NOT. found ) CALL flight_rrd_global( found )
    779 
    780                 IF ( .NOT. found ) CALL stg_rrd_global ( found )
    781 
    782                 IF ( .NOT. found ) CALL gust_rrd_global( found )
    783 
    784                 IF ( .NOT. found ) CALL user_rrd_global( found )
     761!
     762!--             Read global variables from of other modules
     763                IF ( .NOT. found )  CALL bcm_rrd_global( found )
     764                IF ( .NOT. found )  CALL flight_rrd_global( found )
     765                IF ( .NOT. found )  CALL gust_rrd_global( found )
     766                IF ( .NOT. found )  CALL ocean_rrd_global( found )
     767                IF ( .NOT. found )  CALL stg_rrd_global ( found )
     768                IF ( .NOT. found )  CALL wtm_rrd_global( found )
     769!
     770!--             Read user-defined global variables
     771                IF ( .NOT. found )  CALL user_rrd_global( found )
    785772
    786773                IF ( .NOT. found )  THEN
     
    10491036
    10501037    USE arrays_3d,                                                             &
    1051         ONLY:  e, kh, km, p, pt, q, ql, &
    1052                s, sa, u, u_m_l, u_m_n, u_m_r, u_m_s, v, v_m_l, v_m_n,      &
    1053                v_m_r, v_m_s, vpt, w, w_m_l, w_m_n, w_m_r, w_m_s
     1038        ONLY:  e, kh, km, p, pt, q, ql, s, u, u_m_l, u_m_n, u_m_r, u_m_s,      &
     1039               v, v_m_l, v_m_n, v_m_r, v_m_s, vpt, w, w_m_l, w_m_n, w_m_r, w_m_s
     1040
     1041    USE bulk_cloud_model_mod,                                                  &
     1042        ONLY :  bcm_rrd_local
    10541043
    10551044    USE averaging
     
    10731062        ONLY:  lsm_rrd_local
    10741063
    1075     USE bulk_cloud_model_mod,                                                  &
    1076         ONLY :  bcm_rrd_local
     1064    USE ocean_mod,                                                             &
     1065        ONLY:  ocean_rrd_local
    10771066
    10781067    USE particle_attributes,                                                   &
     
    15991588                   DEALLOCATE( tmp_2d_id_random, tmp_2d_seq_random )
    16001589
    1601                 CASE ( 'rho_ocean_av' )
    1602                    IF ( .NOT. ALLOCATED( rho_ocean_av ) )  THEN
    1603                       ALLOCATE( rho_ocean_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1604                    ENDIF
    1605                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1606                    rho_ocean_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =   &
    1607                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1608                            
    16091590                CASE ( 's' )
    16101591                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    16181599                   IF ( k == 1 )  READ ( 13 )  tmp_3d
    16191600                   s_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =           &
    1620                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1621 
    1622                 CASE ( 'sa' )
    1623                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1624                    sa(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =             &
    1625                       tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1626 
    1627                 CASE ( 'sa_av' )
    1628                    IF ( .NOT. ALLOCATED( sa_av ) )  THEN
    1629                       ALLOCATE( sa_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1630                    ENDIF
    1631                    IF ( k == 1 )  READ ( 13 )  tmp_3d
    1632                    sa_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =          &
    16331601                      tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    16341602
     
    18841852
    18851853!
    1886 !--                Read microphysics module restart data
     1854!--                Read restart data of other modules
    18871855                   IF ( .NOT. found ) CALL bcm_rrd_local( i, k, nxlf,          &
    18881856                                           nxlc, nxl_on_file, nxrf, nxrc,      &
     
    18911859                                           nys_on_file, tmp_2d, tmp_3d, found )
    18921860
    1893 !
    1894 !--                Read surface related variables
    1895                    IF ( .NOT. found ) CALL surface_rrd_local( i, k, nxlf,      &
    1896                                            nxlc, nxl_on_file, nxrf, nxrc,      &
     1861                   IF ( .NOT. found ) CALL chem_rrd_local( i, k, nxlf,         &
     1862                                           nxlc, nxl_on_file, nxrf, nxrc,      &
    18971863                                           nxr_on_file, nynf, nync,            &
    18981864                                           nyn_on_file, nysf, nysc,            &
    1899                                            nys_on_file, found )
    1900 
    1901 !
    1902 !--                Read urban surface restart data
    1903                    IF ( .NOT. found ) CALL usm_rrd_local( i, k, nxlf,          &
     1865                                           nys_on_file, tmp_3d, found )
     1866
     1867                   IF ( .NOT. found ) CALL gust_rrd_local( i, k, nxlf,         &
    19041868                                           nxlc, nxl_on_file, nxrf, nxrc,      &
    19051869                                           nxr_on_file, nynf, nync,            &
    19061870                                           nyn_on_file, nysf, nysc,            &
    1907                                            nys_on_file, found )
    1908 
    1909 !
    1910 !--                Read land surface restart data
     1871                                           nys_on_file, tmp_2d, tmp_3d, found )
     1872
    19111873                   IF ( .NOT. found ) CALL lsm_rrd_local( i, k, nxlf,          &
    19121874                                           nxlc, nxl_on_file, nxrf, nxrc,      &
     
    19151877                                           nys_on_file, tmp_2d, found )
    19161878
    1917 !
    1918 !--                Read radiation restart data
     1879                   IF ( .NOT. found ) CALL ocean_rrd_local( i, k, nxlf,        &
     1880                                           nxlc, nxl_on_file, nxrf, nxrc,      &
     1881                                           nxr_on_file, nynf, nync,            &
     1882                                           nyn_on_file, nysf, nysc,            &
     1883                                           nys_on_file, tmp_2d, tmp_3d, found )
     1884
    19191885                   IF ( .NOT. found ) CALL radiation_rrd_local( i, k, nxlf,    &
    19201886                                           nxlc, nxl_on_file, nxrf, nxrc,      &
     
    19231889                                           nys_on_file, tmp_2d, tmp_3d, found )
    19241890
    1925 !
    1926 !--                Read chemistry restart data
    1927                    IF ( .NOT. found ) CALL chem_rrd_local( i, k, nxlf,         &
     1891                   IF ( .NOT. found ) CALL surface_rrd_local( i, k, nxlf,      &
    19281892                                           nxlc, nxl_on_file, nxrf, nxrc,      &
    19291893                                           nxr_on_file, nynf, nync,            &
    19301894                                           nyn_on_file, nysf, nysc,            &
    1931                                            nys_on_file, tmp_3d, found )
    1932 
    1933 !
    1934 !--                Read gust module restart data
    1935                    IF ( .NOT. found ) CALL gust_rrd_local( i, k, nxlf,         &
     1895                                           nys_on_file, found )
     1896
     1897                   IF ( .NOT. found ) CALL usm_rrd_local( i, k, nxlf,          &
    19361898                                           nxlc, nxl_on_file, nxrf, nxrc,      &
    19371899                                           nxr_on_file, nynf, nync,            &
    19381900                                           nyn_on_file, nysf, nysc,            &
    1939                                            nys_on_file, tmp_2d, tmp_3d, found )
     1901                                           nys_on_file, found )
    19401902
    19411903!
  • palm/trunk/SOURCE/subsidence_mod.f90

    r3045 r3294  
    2525! -----------------
    2626! $Id$
     27! ocean renamed ocean_mode
     28!
     29! 3045 2018-05-28 07:55:41Z Giersch
    2730! Error message revised
    2831!
     
    126129
    127130       USE control_parameters,                                                 &
    128            ONLY:  message_string, ocean, subs_vertical_gradient,               &
     131           ONLY:  message_string, ocean_mode, subs_vertical_gradient,          &
    129132                  subs_vertical_gradient_level, subs_vertical_gradient_level_i
    130133
     
    147150       ENDIF
    148151
    149        IF ( ocean )  THEN
     152       IF ( ocean_mode )  THEN
    150153          message_string = 'Applying large scale vertical motion is not ' //   &
    151                            'allowed for ocean runs'
     154                           'allowed for ocean mode'
    152155          CALL message( 'init_w_subsidence', 'PA0324', 2, 2, 0, 6, 0 )
    153156       ENDIF
  • palm/trunk/SOURCE/sum_up_3d_data.f90

    r3291 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3291 2018-09-28 11:33:03Z scharf
    2730! corrected previous commit for 3D topography
    2831!
     
    211214
    212215    USE arrays_3d,                                                             &
    213         ONLY:  dzw, e, heatflux_output_conversion, nc, nr, p, prr, pt,         &
    214                q, qc, ql, ql_c, ql_v, qr, rho_ocean, s, sa, u, v, vpt, w,      &
    215                waterflux_output_conversion, d_exner
     216        ONLY:  dzw, d_exner, e, heatflux_output_conversion, nc, nr, p, prr,    &
     217               pt, q, qc, ql, ql_c, ql_v, qr, s, u, v, vpt, w,                 &
     218               waterflux_output_conversion
    216219
    217220    USE averaging,                                                             &
    218         ONLY:  e_av, ghf_av, lpt_av, lwp_av,                                   &
    219                ol_av, p_av, pc_av, pr_av, pt_av, q_av, ql_av,                  &
    220                ql_c_av, ql_v_av, ql_vp_av, qsws_av, qv_av, r_a_av,             &
    221                rho_ocean_av, s_av, sa_av, shf_av, ssws_av, ts_av, tsurf_av,    &
    222                u_av, us_av, v_av, vpt_av, w_av, z0_av, z0h_av, z0q_av
     221        ONLY:  e_av, ghf_av, lpt_av, lwp_av, ol_av, p_av, pc_av, pr_av, pt_av, &
     222               q_av, ql_av, ql_c_av, ql_v_av, ql_vp_av, qsws_av, qv_av,        &
     223               r_a_av, s_av, shf_av, ssws_av, ts_av, tsurf_av, u_av, us_av,    &
     224               v_av, vpt_av, w_av, z0_av, z0h_av, z0q_av
    223225
    224226    USE basic_constants_and_equations_mod,                                     &
     
    232234
    233235    USE control_parameters,                                                    &
    234         ONLY:  air_chemistry, average_count_3d, doav, doav_n,                  &
    235                land_surface, rho_surface, urban_surface, uv_exposure,          &
     236        ONLY:  air_chemistry, average_count_3d, doav, doav_n, land_surface,    &
     237               ocean_mode, rho_surface, urban_surface, uv_exposure,            &
    236238               varnamelength
    237239
     
    249251    USE land_surface_model_mod,                                                &
    250252        ONLY:  lsm_3d_data_averaging
     253
     254    USE ocean_mod,                                                             &
     255        ONLY:  ocean_3d_data_averaging
    251256
    252257    USE particle_attributes,                                                   &
     
    412417                r_a_av = 0.0_wp
    413418
    414              CASE ( 'rho_ocean' )
    415                 IF ( .NOT. ALLOCATED( rho_ocean_av ) )  THEN
    416                    ALLOCATE( rho_ocean_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    417                 ENDIF
    418                 rho_ocean_av = 0.0_wp
    419 
    420419             CASE ( 's' )
    421420                IF ( .NOT. ALLOCATED( s_av ) )  THEN
     
    423422                ENDIF
    424423                s_av = 0.0_wp
    425 
    426              CASE ( 'sa' )
    427                 IF ( .NOT. ALLOCATED( sa_av ) )  THEN
    428                    ALLOCATE( sa_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    429                 ENDIF
    430                 sa_av = 0.0_wp
    431424
    432425             CASE ( 'shf*' )
     
    501494                ENDIF
    502495                z0q_av = 0.0_wp
     496
     497             CASE ( 'usm_output' )
    503498!             
    504 !--          Block of urban surface model outputs
    505              CASE ( 'usm_output' )
    506 
     499!--             Block of urban surface model outputs
    507500                CALL usm_average_3d_data( 'allocate', doav(ii) )
    508501             
     
    511504
    512505!
    513 !--             Turbulence closure module
    514                 CALL tcm_3d_data_averaging( 'allocate', doav(ii) )
    515 
    516 !
    517 !--             Microphysics module quantities
     506!--             Allocating and initializing data arrays for other modules
    518507                IF ( bulk_cloud_model )  THEN
    519508                   CALL bcm_3d_data_averaging( 'allocate', doav(ii) )
    520509                ENDIF
    521510
    522 !
    523 !--             Land surface quantity
     511                IF ( air_chemistry  .AND.  trimvar(1:3) == 'kc_')  THEN
     512                   CALL chem_3d_data_averaging( 'allocate', doav(ii) )
     513                ENDIF
     514
     515                IF ( gust_module_enabled )  THEN
     516                   CALL gust_3d_data_averaging( 'allocate', doav(ii) )
     517                ENDIF
     518
    524519                IF ( land_surface )  THEN
    525520                   CALL lsm_3d_data_averaging( 'allocate', doav(ii) )
    526521                ENDIF
    527522
    528 !
    529 !--             Radiation quantity
     523                IF ( ocean_mode )  THEN
     524                   CALL ocean_3d_data_averaging( 'allocate', doav(ii) )
     525                ENDIF
     526
    530527                IF ( radiation )  THEN
    531528                   CALL radiation_3d_data_averaging( 'allocate', doav(ii) )
    532529                ENDIF
    533530
    534 !
    535 !--             Gust module quantities
    536                 IF ( gust_module_enabled )  THEN
    537                    CALL gust_3d_data_averaging( 'allocate', doav(ii) )
    538                 ENDIF
    539 
    540 !
    541 !--             Chemical quantity                                           
    542                 IF ( air_chemistry  .AND.  trimvar(1:3) == 'kc_')  THEN
    543                    CALL chem_3d_data_averaging( 'allocate', doav(ii) )
    544                 ENDIF
    545 
    546 !
    547 !--             UV exposure quantity
    548531                IF ( uv_exposure  .AND.  trimvar(1:5) == 'uvem_')  THEN
    549532                   CALL uvem_3d_data_averaging( 'allocate', doav(ii) )
    550533                ENDIF
    551534
    552 !
    553 !--             User-defined quantity
     535                CALL tcm_3d_data_averaging( 'allocate', doav(ii) )
     536
     537!
     538!--             User-defined quantities
    554539                CALL user_3d_data_averaging( 'allocate', doav(ii) )
    555540
     
    877862             ENDIF
    878863
    879           CASE ( 'rho_ocean' )
    880              IF ( ALLOCATED( rho_ocean_av ) ) THEN
    881                 DO  i = nxlg, nxrg
    882                    DO  j = nysg, nyng
    883                       DO  k = nzb, nzt+1
    884                          rho_ocean_av(k,j,i) = rho_ocean_av(k,j,i) + rho_ocean(k,j,i)
    885                       ENDDO
    886                    ENDDO
    887                 ENDDO
    888              ENDIF 
    889 
    890864          CASE ( 's' )
    891865             IF ( ALLOCATED( s_av ) ) THEN
     
    894868                      DO  k = nzb, nzt+1
    895869                         s_av(k,j,i) = s_av(k,j,i) + s(k,j,i)
    896                       ENDDO
    897                    ENDDO
    898                 ENDDO
    899              ENDIF
    900 
    901           CASE ( 'sa' )
    902              IF ( ALLOCATED( sa_av ) ) THEN
    903                 DO  i = nxlg, nxrg
    904                    DO  j = nysg, nyng
    905                       DO  k = nzb, nzt+1
    906                          sa_av(k,j,i) = sa_av(k,j,i) + sa(k,j,i)
    907870                      ENDDO
    908871                   ENDDO
     
    11821145                ENDDO
    11831146             ENDIF
     1147
     1148          CASE ( 'usm_output' )
    11841149!             
    1185 !--       Block of urban surface model outputs.
    1186 !--       In case of urban surface variables it should be always checked
    1187 !--       if respective arrays are allocated, at least in case of a restart
    1188 !--       run, as averaged usm arrays are not read from file at the moment.
    1189           CASE ( 'usm_output' )
     1150!--          Block of urban surface model outputs.
     1151!--          In case of urban surface variables it should be always checked
     1152!--          if respective arrays are allocated, at least in case of a restart
     1153!--          run, as averaged usm arrays are not read from file at the moment.
    11901154             CALL usm_average_3d_data( 'allocate', doav(ii) )
    11911155             CALL usm_average_3d_data( 'sum', doav(ii) )
     
    11931157          CASE DEFAULT
    11941158!
    1195 !--          Turbulence closure module
    1196              CALL tcm_3d_data_averaging( 'sum', doav(ii) )
    1197 
    1198 !
    1199 !--          Microphysics module quantities
     1159!--          Summing up data from other modules
    12001160             IF ( bulk_cloud_model )  THEN
    12011161                CALL bcm_3d_data_averaging( 'sum', doav(ii) )
    12021162             ENDIF
    12031163
    1204 !
    1205 !--          Land surface quantity
     1164             IF ( air_chemistry  .AND.  trimvar(1:3) == 'kc_')  THEN
     1165                CALL chem_3d_data_averaging( 'sum',doav(ii) )
     1166             ENDIF
     1167
     1168             IF ( gust_module_enabled )  THEN
     1169                CALL gust_3d_data_averaging( 'sum', doav(ii) )
     1170             ENDIF
     1171
    12061172             IF ( land_surface )  THEN
    12071173                CALL lsm_3d_data_averaging( 'sum', doav(ii) )
    12081174             ENDIF
    12091175
    1210 !
    1211 !--          Radiation quantity
     1176             IF ( ocean_mode )  THEN
     1177                CALL ocean_3d_data_averaging( 'sum', doav(ii) )
     1178             ENDIF
     1179
    12121180             IF ( radiation )  THEN
    12131181                CALL radiation_3d_data_averaging( 'sum', doav(ii) )
    12141182             ENDIF
    12151183
    1216 !
    1217 !--          Gust module quantities
    1218              IF ( gust_module_enabled )  THEN
    1219                 CALL gust_3d_data_averaging( 'sum', doav(ii) )
    1220              ENDIF
    1221 
    1222 !
    1223 !--          Chemical quantity
    1224              IF ( air_chemistry  .AND.  trimvar(1:3) == 'kc_')  THEN
    1225                 CALL chem_3d_data_averaging( 'sum',doav(ii) )
    1226              ENDIF
    1227 
    1228 !
    1229 !--          UV exposure quantity
     1184             CALL tcm_3d_data_averaging( 'sum', doav(ii) )
     1185
    12301186             IF ( uv_exposure )  THEN
    12311187                CALL uvem_3d_data_averaging( 'sum', doav(ii) )
     
    12331189
    12341190!
    1235 !--          User-defined quantity
     1191!--          User-defined quantities
    12361192             CALL user_3d_data_averaging( 'sum', doav(ii) )
    12371193
  • palm/trunk/SOURCE/surface_mod.f90

    r3274 r3294  
    2626! -----------------
    2727! $Id$
     28! changes concerning modularization of ocean option
     29!
     30! 3274 2018-09-24 15:42:55Z knoop
    2831! Modularization of all bulk cloud physics code components
    2932!
     
    11141117!
    11151118!--    Salinity surface flux
    1116        IF ( ocean )  DEALLOCATE ( surfaces%sasws )
     1119       IF ( ocean_mode )  DEALLOCATE ( surfaces%sasws )
    11171120
    11181121    END SUBROUTINE deallocate_surface_attributes_h
     
    12411244!
    12421245!--    Salinity surface flux
    1243        IF ( ocean )  ALLOCATE ( surfaces%sasws(1:surfaces%ns) )
     1246       IF ( ocean_mode )  ALLOCATE ( surfaces%sasws(1:surfaces%ns) )
    12441247
    12451248    END SUBROUTINE allocate_surface_attributes_h
     
    13061309!
    13071310!--    Salinity flux
    1308        IF ( ocean )  DEALLOCATE ( surfaces%sasws )
     1311       IF ( ocean_mode )  DEALLOCATE ( surfaces%sasws )
    13091312
    13101313    END SUBROUTINE deallocate_surface_attributes_h_top
     
    13781381!
    13791382!--    Salinity flux
    1380        IF ( ocean )  ALLOCATE ( surfaces%sasws(1:surfaces%ns) )
     1383       IF ( ocean_mode )  ALLOCATE ( surfaces%sasws(1:surfaces%ns) )
    13811384
    13821385    END SUBROUTINE allocate_surface_attributes_h_top
     
    14961499!
    14971500!--    Salinity surface flux
    1498        IF ( ocean )  DEALLOCATE ( surfaces%sasws )
     1501       IF ( ocean_mode )  DEALLOCATE ( surfaces%sasws )
    14991502
    15001503    END SUBROUTINE deallocate_surface_attributes_v
     
    16211624!
    16221625!--    Salinity surface flux
    1623        IF ( ocean )  ALLOCATE ( surfaces%sasws(1:surfaces%ns) )
     1626       IF ( ocean_mode )  ALLOCATE ( surfaces%sasws(1:surfaces%ns) )
    16241627
    16251628    END SUBROUTINE allocate_surface_attributes_v
     
    22682271                ENDIF
    22692272
    2270                 IF ( ocean )  THEN
     2273                IF ( ocean_mode )  THEN
    22712274                   IF ( upward_facing )  THEN
    22722275                      surf%sasws(num_h) = bottom_salinityflux * rho_air_zw(k-1)
     
    23442347!
    23452348!--          Prescribe top salinity flux
    2346              IF ( ocean .AND. constant_top_salinityflux)                       &
     2349             IF ( ocean_mode .AND. constant_top_salinityflux)                  &
    23472350                surf%sasws(num_h) = top_salinityflux * rho_air_zw(nzt+1)
    23482351!
     
    24882491!--          So far, salinityflux at vertical surfaces is simply zero
    24892492!--          at the moment 
    2490              IF ( ocean )  surf%sasws(num_v) = wall_salinityflux(component)
     2493             IF ( ocean_mode )  surf%sasws(num_v) = wall_salinityflux(component)
    24912494!
    24922495!--          Increment wall indices
  • palm/trunk/SOURCE/swap_timelevel.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    147150        ONLY:  chem_swap_timelevel
    148151
    149     USE land_surface_model_mod,                                                &
    150         ONLY: lsm_swap_timelevel
    151 
    152152    USE cpulog,                                                                &
    153153        ONLY: cpu_log, log_point
    154154
    155155    USE control_parameters,                                                    &
    156         ONLY:  air_chemistry, humidity, land_surface,                          &
    157                neutral, ocean, passive_scalar, timestep_count, urban_surface
     156        ONLY:  air_chemistry, humidity, land_surface, neutral, ocean_mode,     &
     157               passive_scalar, timestep_count, urban_surface
    158158
    159159    USE gust_mod,                                                              &
     
    164164        ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzt
    165165#endif
     166
     167    USE land_surface_model_mod,                                                &
     168        ONLY: lsm_swap_timelevel
     169
     170    USE ocean_mod,                                                             &
     171        ONLY:  ocean_swap_timelevel
    166172
    167173    USE pmc_interface,                                                         &
     
    202208    ENDDO
    203209
    204     CALL tcm_swap_timelevel ( 0 )
    205 
    206     IF ( ocean )  THEN
    207        sa = sa_p
    208     ENDIF
    209 
    210210    IF ( humidity )  THEN
    211211       q = q_p
     
    214214    IF ( passive_scalar )  s = s_p             
    215215
    216     IF ( humidity  .AND.  bulk_cloud_model )  THEN
    217        CALL bcm_swap_timelevel ( 0 )
    218     ENDIF
    219 
    220     IF ( land_surface )  THEN
    221        CALL lsm_swap_timelevel ( 0 )
    222     ENDIF
    223 
    224     IF ( urban_surface )  THEN
    225        CALL usm_swap_timelevel ( 0 )
    226     ENDIF
    227 
    228     IF ( gust_module_enabled )  THEN
    229        CALL gust_swap_timelevel ( 0 )
    230     ENDIF
    231 
     216!
     217!-- Swapping the timelevel of other modules
     218    IF ( humidity  .AND.  bulk_cloud_model )  CALL bcm_swap_timelevel( 0 )
     219    IF ( gust_module_enabled )                CALL gust_swap_timelevel( 0 )
     220    IF ( land_surface )                       CALL lsm_swap_timelevel( 0 )
     221    IF ( ocean_mode )                         CALL ocean_swap_timelevl( 0 )
     222    CALL tcm_swap_timelevel( 0 )
     223    IF ( urban_surface )                      CALL usm_swap_timelevel( 0 )
    232224
    233225    CALL cpu_log( log_point(28), 'swap_timelevel (nop)', 'stop' )
     
    245237             pt => pt_1;  pt_p => pt_2
    246238          ENDIF
    247           IF ( ocean )  THEN
     239          IF ( ocean_mode )  THEN
    248240             sa => sa_1;  sa_p => sa_2
    249241          ENDIF
     
    254246             s => s_1;    s_p => s_2
    255247          ENDIF
    256 
    257           IF ( air_chemistry )  CALL chem_swap_timelevel(0)
    258248
    259249          swap_level = 1
     
    267257             pt => pt_2;  pt_p => pt_1
    268258          ENDIF
    269           IF ( ocean )  THEN
     259          IF ( ocean_mode )  THEN
    270260             sa => sa_2;  sa_p => sa_1
    271261          ENDIF
     
    277267          ENDIF
    278268
    279           IF ( air_chemistry )  CALL chem_swap_timelevel(1)
    280 
    281269          swap_level = 2
    282270
    283271    END SELECT
     272
     273    IF ( air_chemistry )  CALL chem_swap_timelevel( MOD( timestep_count, 2) )
    284274
    285275    CALL tcm_swap_timelevel ( MOD( timestep_count, 2) )
  • palm/trunk/SOURCE/time_integration.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    369372               ref_state, rho_ocean, s, s_p, sa_p, tend, u, u_p, v, vpt,       &
    370373               v_p, w, w_p
     374
     375    USE bulk_cloud_model_mod,                                                  &
     376        ONLY: bulk_cloud_model, calc_liquid_water_content,                     &
     377              collision_turbulence, microphysics_morrison, microphysics_seifert
    371378
    372379    USE calc_mean_profile_mod,                                                 &
     
    399406               multi_agent_system_end, multi_agent_system_start,               &
    400407               nesting_offline, neutral, nr_timesteps_this_run, nudging,       &
    401                ocean, passive_scalar, prho_reference, pt_reference,            &
     408               ocean_mode, passive_scalar, pt_reference,                       &
    402409               pt_slope_offset, random_heatflux, rans_mode,                    &
    403410               rans_tke_e, run_coupled, simulated_time, simulated_time_chr,    &
     
    443450               lsf_nesting_offline, lsf_nesting_offline_mass_conservation
    444451
    445     USE bulk_cloud_model_mod,                                                  &
    446         ONLY: bulk_cloud_model, calc_liquid_water_content,                     &
    447               collision_turbulence, microphysics_morrison, microphysics_seifert
    448 
    449452    USE netcdf_data_input_mod,                                                 &
    450453        ONLY:  nest_offl, netcdf_data_input_lsf
     
    452455    USE multi_agent_system_mod,                                                &
    453456        ONLY:  agents_active, multi_agent_system
     457
     458    USE ocean_mod,                                                             &
     459        ONLY:  prho_reference
    454460
    455461    USE particle_attributes,                                                   &
     
    662668                ref_state(:)  = hom(:,1,4,0) ! this is used in the buoyancy term
    663669             ENDIF
    664              IF ( ocean )  THEN
     670             IF ( ocean_mode )  THEN
    665671                CALL calc_mean_profile( rho_ocean, 64 )
    666672                ref_state(:)  = hom(:,1,64,0)
     
    753759             ENDIF
    754760          ENDIF
    755           IF ( ocean )  THEN
     761          IF ( ocean_mode )  THEN
    756762             CALL exchange_horiz( sa_p, nbgp )
    757763             CALL exchange_horiz( rho_ocean, nbgp )
     
    10531059             CALL cpu_log( log_point(17), 'diffusivities', 'start' )
    10541060             IF ( .NOT. humidity ) THEN
    1055                 IF ( ocean )  THEN
     1061                IF ( ocean_mode )  THEN
    10561062                   CALL tcm_diffusivities( prho, prho_reference )
    10571063                ELSE
  • palm/trunk/SOURCE/turbulence_closure_mod.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    164167               initializing_actions, intermediate_timestep_count,              &
    165168               intermediate_timestep_count_max, km_constant,                   &
    166                les_dynamic, les_mw, ocean, plant_canopy, prandtl_number,       &
    167                prho_reference, pt_reference, rans_mode, rans_tke_e, rans_tke_l,&
     169               les_dynamic, les_mw, ocean_mode, plant_canopy, prandtl_number,  &
     170               pt_reference, rans_mode, rans_tke_e, rans_tke_l,                &
    168171               simulated_time,timestep_scheme, turbulence_closure,             &
    169172               turbulent_inflow, use_upstream_for_tke, vpt_reference,          &
     
    190193
    191194    USE kinds
     195
     196    USE ocean_mod,                                                             &
     197        ONLY:  prho_reference
    192198
    193199    USE pegrid
     
    11161122                e  = e_init
    11171123             ELSE
    1118                 IF ( .NOT. ocean )  THEN
     1124                IF ( .NOT. ocean_mode )  THEN
    11191125                   kh   = 0.01_wp   ! there must exist an initial diffusion, because
    11201126                   km   = 0.01_wp   ! otherwise no TKE would be produced by the
     
    11601166             e  = e_init
    11611167          ELSE
    1162              IF ( .NOT. ocean )  THEN
     1168             IF ( .NOT. ocean_mode )  THEN
    11631169                kh   = 0.01_wp   ! there must exist an initial diffusion, because
    11641170                km   = 0.01_wp   ! otherwise no TKE would be produced by the
     
    21552161
    21562162       IF ( .NOT. humidity )  THEN
    2157           IF ( ocean )  THEN
     2163          IF ( ocean_mode )  THEN
    21582164             CALL diffusion_e( prho, prho_reference )
    21592165          ELSE
     
    24232429
    24242430       IF ( .NOT. humidity )  THEN
    2425           IF ( ocean )  THEN
     2431          IF ( ocean_mode )  THEN
    24262432             CALL diffusion_e( i, j, prho, prho_reference )
    24272433          ELSE
     
    29342940          IF ( .NOT. humidity )  THEN
    29352941
    2936              IF ( ocean )  THEN
     2942             IF ( ocean_mode )  THEN
    29372943!
    29382944!--             So far in the ocean no special treatment of density flux
     
    37383744       IF ( .NOT. humidity )  THEN
    37393745
    3740           IF ( ocean )  THEN
     3746          IF ( ocean_mode )  THEN
    37413747!
    37423748!--          So far in the ocean no special treatment of density flux in
  • palm/trunk/SOURCE/write_restart_data_mod.f90

    r3274 r3294  
    2525! -----------------
    2626! $Id$
     27! changes concerning modularization of ocean option
     28!
     29! 3274 2018-09-24 15:42:55Z knoop
    2730! Modularization of all bulk cloud physics code components
    2831!
     
    9598       USE arrays_3d,                                                          &
    9699           ONLY:  inflow_damping_factor, mean_inflow_profiles, pt_init,        &
    97                   q_init, ref_state, s_init, sa_init, u_init, ug, v_init, vg
     100                  q_init, ref_state, s_init, u_init, ug, v_init, vg
     101
     102       USE bulk_cloud_model_mod,                                               &
     103           ONLY:  bulk_cloud_model, bcm_wrd_global
    98104
    99105       USE date_and_time_mod,                                                  &
     
    112118           ONLY:  nx, ny, nz
    113119
    114        USE bulk_cloud_model_mod,                                               &
    115            ONLY:  bulk_cloud_model, bcm_wrd_global
    116 
    117120       USE model_1d_mod,                                                       &
    118121           ONLY:  damp_level_1d, dt_pr_1d, dt_run_control_1d, end_time_1d
     
    120123       USE netcdf_interface,                                                   &
    121124           ONLY:  netcdf_precision, output_for_t0
     125
     126       USE ocean_mod,                                                          &
     127           ONLY:  ocean_wrd_global
    122128
    123129       USE particle_attributes,                                                &
     
    238244       WRITE ( 14 )  bc_s_t
    239245
    240        CALL wrd_write_string( 'bc_sa_t' )
    241        WRITE ( 14 )  bc_sa_t
    242 
    243246       CALL wrd_write_string( 'bc_uv_b' )
    244247       WRITE ( 14 )  bc_uv_b
     
    246249       CALL wrd_write_string( 'bc_uv_t' )
    247250       WRITE ( 14 )  bc_uv_t
    248 
    249        CALL wrd_write_string( 'bottom_salinityflux' )
    250        WRITE ( 14 )  bottom_salinityflux
    251251
    252252       CALL wrd_write_string( 'building_height' )
     
    497497       WRITE ( 14 )  ny
    498498
    499        CALL wrd_write_string( 'ocean' )
    500        WRITE ( 14 )  ocean
     499       CALL wrd_write_string( 'ocean_mode' )
     500       WRITE ( 14 )  ocean_mode
    501501
    502502       CALL wrd_write_string( 'old_dt' )
     
    622622       CALL wrd_write_string( 's_vertical_gradient_level_ind' )
    623623       WRITE ( 14 )  s_vertical_gradient_level_ind
    624 
    625        CALL wrd_write_string( 'sa_init' )
    626        WRITE ( 14 )  sa_init
    627 
    628        CALL wrd_write_string( 'sa_surface' )
    629        WRITE ( 14 )  sa_surface
    630 
    631        CALL wrd_write_string( 'sa_vertical_gradient' )
    632        WRITE ( 14 )  sa_vertical_gradient
    633 
    634        CALL wrd_write_string( 'sa_vertical_gradient_level' )
    635        WRITE ( 14 )  sa_vertical_gradient_level
    636624
    637625       CALL wrd_write_string( 'scalar_advec' )
     
    738726       WRITE ( 14 )  top_momentumflux_v
    739727
    740        CALL wrd_write_string( 'top_salinityflux' )
    741        WRITE ( 14 )  top_salinityflux
    742 
    743728       CALL wrd_write_string( 'top_scalarflux' )
    744729       WRITE ( 14 )  top_scalarflux
     
    876861       WRITE ( 14 )  wall_humidityflux
    877862
    878        CALL wrd_write_string( 'wall_salinityflux' )
    879        WRITE ( 14 )  wall_salinityflux
    880 
    881863       CALL wrd_write_string( 'wall_scalarflux' )
    882864       WRITE ( 14 )  wall_scalarflux
     
    897879       WRITE ( 14 )  z_i
    898880
    899 
    900 !   
    901 !-- The order of the calls can be different as in read_restart_data_mod where
    902 !-- the restart data will be read
    903 
    904 !
    905 !-- If required, write restart data for gust module.
    906        IF ( bulk_cloud_model )  CALL bcm_wrd_global
    907 !
    908 !-- If required, write restart data for wind turbine model.
    909        IF ( wind_turbine )  CALL wtm_wrd_global
    910 
    911 !
    912 !-- If required, write restart data for virtual measurements.
    913        IF ( virtual_flight )  CALL flight_wrd_global
    914 
    915 !
    916 !-- If required, write restart data for turbulence generator.
    917        IF ( syn_turb_gen )  CALL stg_wrd_global
    918 
    919 !
    920 !-- If required, write restart data for gust module.
     881!
     882!--    Write restart data of the other modules
     883!--    The order of the calls can be different as in read_restart_data_mod where
     884!--    the restart data will be read
     885       IF ( bulk_cloud_model )     CALL bcm_wrd_global
     886       IF ( virtual_flight )       CALL flight_wrd_global
    921887       IF ( gust_module_enabled )  CALL gust_wrd_global
    922 
    923 !
    924 !-- Write restart data for user data.
     888       IF ( ocean_mode )           CALL ocean_wrd_global
     889       IF ( syn_turb_gen )         CALL stg_wrd_global
     890       IF ( wind_turbine )         CALL wtm_wrd_global
     891!
     892!--    Write restart data of the user-interface
    925893       CALL user_wrd_global
    926894
     
    940908
    941909       USE arrays_3d,                                                          &
    942            ONLY:  e, kh, km, p, pt, q, ql, s, sa, u, u_m_l, u_m_n, u_m_r,      &
     910           ONLY:  e, kh, km, p, pt, q, ql, s, u, u_m_l, u_m_n, u_m_r,          &
    943911                  u_m_s, v, v_m_l, v_m_n, v_m_r, v_m_s, vpt, w, w_m_l, w_m_n,  &
    944912                  w_m_r, w_m_s
     
    960928       USE land_surface_model_mod,                                             &
    961929           ONLY:  lsm_wrd_local
     930
     931       USE ocean_mod,                                                          &
     932           ONLY:  ocean_wrd_local
    962933
    963934       USE particle_attributes,                                                &
     
    11121083       ENDIF
    11131084       
    1114        IF ( ocean )  THEN
    1115 
    1116           IF ( ALLOCATED( rho_ocean_av ) )  THEN
    1117              CALL wrd_write_string( 'rho_ocean_av' )
    1118              WRITE ( 14 )  rho_ocean_av
    1119           ENDIF
    1120 
    1121           CALL wrd_write_string( 'sa' )
    1122           WRITE ( 14 )  sa
    1123 
    1124           IF ( ALLOCATED( sa_av ) )  THEN
    1125              CALL wrd_write_string( 'sa_av' )
    1126              WRITE ( 14 )  sa_av
    1127           ENDIF
    1128 
    1129        ENDIF
    1130 
    11311085       IF ( ALLOCATED( ql_c_av ) )  THEN
    11321086          CALL wrd_write_string( 'ql_c_av' )
     
    13101264
    13111265!
    1312 !-- If required, write restart data for microphysics module.
    1313        IF ( bulk_cloud_model )  THEN
    1314           CALL bcm_wrd_local
    1315        ENDIF
    1316 
    1317 !
    1318 !-- Write surface-related restart data.
     1266!--    Write restart data of other modules
     1267       IF ( bulk_cloud_model )     CALL bcm_wrd_local
     1268       IF ( air_chemistry )        CALL chem_wrd_local
     1269       IF ( gust_module_enabled )  CALL gust_wrd_local
     1270       IF ( land_surface )         CALL lsm_wrd_local
     1271       IF ( ocean_mode )           CALL ocean_wrd_local
    13191272       CALL surface_wrd_local
    1320 
    1321 !
    1322 !-- If required, write restart data for urban surface model.
    1323        IF ( urban_surface )  THEN
    1324           CALL usm_wrd_local
    1325        ENDIF
    1326 
    1327 !
    1328 !-- If required, write restart data for land surface model.
    1329        IF ( land_surface )  THEN
    1330           CALL lsm_wrd_local
    1331        ENDIF
    1332 
    1333 !
    1334 !-- If required, write restart data for radiation model.
    1335        IF ( radiation )  THEN
    1336           CALL radiation_wrd_local
    1337        ENDIF
    1338 
    1339 !
    1340 !-- If required, write restart data for chemistry model.
    1341        IF ( air_chemistry )  THEN
    1342           CALL chem_wrd_local
    1343        ENDIF
    1344 
    1345 !
    1346 !-- If required, write restart data for gust module.
    1347        IF ( gust_module_enabled )  THEN
    1348           CALL gust_wrd_local
    1349        ENDIF
    1350 
    1351 !
    1352 !-- Write user-related restart data.
     1273       IF ( radiation )            CALL radiation_wrd_local
     1274       IF ( urban_surface )        CALL usm_wrd_local
     1275
     1276!
     1277!--    Write user-defined restart data
    13531278       CALL user_wrd_local
    13541279
    1355 !--    Write end label.
     1280!
     1281!--    Write end label
    13561282       CALL wrd_write_string( '*** end ***' )
    13571283
Note: See TracChangeset for help on using the changeset viewer.