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

modularization of the ocean code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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:
Note: See TracChangeset for help on using the changeset viewer.