Changeset 3209


Ignore:
Timestamp:
Aug 27, 2018 4:58:37 PM (3 years ago)
Author:
suehring
Message:

Additional namelist parameter to switch on/off the nesting of chemical species; Enable the input of soil data from dynamic input files independent on atmosphere in order to initialize soil properties in nested child domains from dynamic input; Revise error message number for static/dynamic input; Revise and add checks for static/dynamic input; Bugfix, add netcdf4_parallel directive for collective read operation

Location:
palm/trunk/SOURCE
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/chemistry_model_mod.f90

    r3183 r3209  
    2222! Current revisions:
    2323! -----------------
    24 !
     24! +nest_chemistry
    2525!
    2626! Former revisions:
     
    148148   SAVE
    149149
     150   LOGICAL ::  nest_chemistry = .TRUE. !< flag for nesting mode of chemical species, independent on parent or not
     151!
    150152!- Define chemical variables
    151 
    152153   TYPE   species_def
    153154      CHARACTER(LEN=8)                                   :: name
     
    194195                                         ! 'fastj'  (Wild et al., 2000, J. Atmos. Chem., 37, 245-282) STILL NOT IMPLEMENTED
    195196
    196    PUBLIC nspec
     197   PUBLIC nest_chemistry, nspec
    197198   PUBLIC nvar       
    198199   PUBLIC spc_names
     
    834835                                        max_street_id,                    &
    835836                                        my_steps,                         &
     837                                        nest_chemistry,                   &
    836838                                        rcntrl,                           &
    837839                                        side_street_id,                   &
  • palm/trunk/SOURCE/land_surface_model_mod.f90

    r3196 r3209  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Enable optional initialization of soil properties directly from dynamic
     23! input file.
    2324!
    2425! Former revisions:
     
    465466    USE netcdf_data_input_mod,                                                 &
    466467        ONLY :  building_type_f, init_3d, input_pids_static,                   &
    467                 netcdf_data_input_interpolate,                                 &
     468                netcdf_data_input_interpolate, netcdf_data_input_init_lsm,     &
    468469                pavement_pars_f, pavement_subsurface_pars_f, pavement_type_f,  &
    469470                root_area_density_lsm_f, soil_pars_f, soil_type_f,             &
     
    24542455       IMPLICIT NONE
    24552456
    2456        LOGICAL      ::  init_soil_dynamically_in_child !< flag controlling initialization of soil in child domains
     2457       LOGICAL      ::  init_soil_from_parent  !< flag controlling initialization of soil in child domains
    24572458
    24582459       INTEGER(iwp) ::  i                       !< running index
     
    40204021       IF (  TRIM( initializing_actions ) /= 'read_restart_data' )  THEN
    40214022!
    4022 !--       In case of nested runs, check if soil is initialized via dynamic
    4023 !--       input file in root domain and distribute this information
    4024 !--       to all embedded child domains. This case, soil moisture and
    4025 !--       temperature will be initialized via root domain. 
    4026           init_soil_dynamically_in_child = .FALSE.
     4023!--       Read soil properties from dynamic input file
     4024          CALL netcdf_data_input_init_lsm
     4025!
     4026!--       In case no dynamic input is available for a child domain but root
     4027!--       domain is initialized with dynamic input file, the different soil
     4028!--       properties can lead to significant discrepancies in the atmospheric
     4029!--       surface forcing. For this reason, the child domain
     4030!--       is initialized with mean soil profiles from the root domain.         
     4031          init_soil_from_parent = .FALSE.
    40274032          IF ( nested_run )  THEN
    40284033#if defined( __parallel )
    40294034             CALL MPI_ALLREDUCE( init_3d%from_file_tsoil  .OR.                 &
    40304035                                 init_3d%from_file_msoil,                      &
    4031                                  init_soil_dynamically_in_child,               &
     4036                                 init_soil_from_parent,                        &
    40324037                                 1, MPI_LOGICAL, MPI_LOR, MPI_COMM_WORLD, ierr )
    40334038#endif
    40344039          ENDIF
    4035 
    40364040!
    40374041!--       First, initialize soil temperature and moisture.
     
    40654069!
    40664070!--       Initialization of soil moisture and temperature from file.
    4067 !--       In case of nested runs, only root parent reads dynamic input file.
    4068 !--       This case, transfer respective soil information provide
    4069 !--       by dynamic input file from root parent domain onto all other domains.
    4070           IF ( init_soil_dynamically_in_child )  THEN
     4071!--       In case of no dynamic input file is available for the child domain,
     4072!--       transfer soil mean profiles from the root-parent domain onto all
     4073!--       child domains.
     4074          IF ( init_soil_from_parent )  THEN
    40714075!
    40724076!--          Child domains will be only initialized with horizontally
     
    40794083
    40804084                DO  k = 0, init_3d%nzs-1
    4081                    pr_soil_init(k) = SUM( init_3d%msoil(k,nys:nyn,nxl:nxr)  )
     4085                   pr_soil_init(k) = SUM( init_3d%msoil_3d(k,nys:nyn,nxl:nxr)  )
    40824086                ENDDO
    40834087!
    40844088!--             Allocate 1D array for soil-moisture profile (will not be
    40854089!--             allocated in lod==2 case).
    4086                 ALLOCATE( init_3d%msoil_init(0:init_3d%nzs-1) )
    4087                 init_3d%msoil_init = 0.0_wp
     4090                ALLOCATE( init_3d%msoil_1d(0:init_3d%nzs-1) )
     4091                init_3d%msoil_1d = 0.0_wp
    40884092#if defined( __parallel )
    4089                 CALL MPI_ALLREDUCE( pr_soil_init(0), init_3d%msoil_init(0),    &
     4093                CALL MPI_ALLREDUCE( pr_soil_init(0), init_3d%msoil_1d(0),      &
    40904094                                    SIZE(pr_soil_init),                        &
    40914095                                    MPI_REAL, MPI_SUM, comm2d, ierr )
    40924096#endif
    4093                 init_3d%msoil_init = init_3d%msoil_init /                      &
     4097                init_3d%msoil_1d = init_3d%msoil_1d /                          &
    40944098                                        REAL( ( nx + 1 ) * ( ny + 1), KIND=wp )
    40954099                DEALLOCATE( pr_soil_init )
     
    40994103
    41004104                DO  k = 0, init_3d%nzs-1
    4101                    pr_soil_init(k) = SUM( init_3d%tsoil(k,nys:nyn,nxl:nxr)  )
     4105                   pr_soil_init(k) = SUM( init_3d%tsoil_3d(k,nys:nyn,nxl:nxr)  )
    41024106                ENDDO
    41034107!
    41044108!--             Allocate 1D array for soil-temperature profile (will not be
    41054109!--             allocated in lod==2 case).
    4106                 ALLOCATE( init_3d%tsoil_init(0:init_3d%nzs-1) )
    4107                 init_3d%tsoil_init = 0.0_wp
     4110                ALLOCATE( init_3d%tsoil_1d(0:init_3d%nzs-1) )
     4111                init_3d%tsoil_1d = 0.0_wp
    41084112#if defined( __parallel )
    4109                 CALL MPI_ALLREDUCE( pr_soil_init(0), init_3d%tsoil_init(0),    &
     4113                CALL MPI_ALLREDUCE( pr_soil_init(0), init_3d%tsoil_1d(0),      &
    41104114                                    SIZE(pr_soil_init),                        &
    41114115                                    MPI_REAL, MPI_SUM, comm2d, ierr )
    41124116#endif
    4113                 init_3d%tsoil_init = init_3d%tsoil_init /                      &
     4117                init_3d%tsoil_1d = init_3d%tsoil_1d /                          &
    41144118                                        REAL( ( nx + 1 ) * ( ny + 1), KIND=wp )
    41154119                DEALLOCATE( pr_soil_init )
     
    41324136!
    41334137!--          ALLOCATE arrays on child domains and set control attributes.
    4134              IF ( .NOT. init_3d%from_file_msoil )  THEN
    4135                 ALLOCATE( init_3d%msoil_init(0:init_3d%nzs-1) )
    4136                 init_3d%lod_msoil = 1
     4138!--          Note, 1d soil profiles are allocated even though soil information
     4139!--          is already read from dynamic file in one child domain.
     4140!--          This case, however, data is not used for further initialization
     4141!--          since the LoD=2.
     4142             IF ( .NOT. ALLOCATED( init_3d%msoil_1d ) )  THEN
     4143                ALLOCATE( init_3d%msoil_1d(0:init_3d%nzs-1) )
     4144                IF( .NOT. init_3d%from_file_msoil )  init_3d%lod_msoil = 1
    41374145                init_3d%from_file_msoil = .TRUE.
    41384146             ENDIF
    4139              IF ( .NOT. init_3d%from_file_tsoil )  THEN
    4140                 ALLOCATE( init_3d%tsoil_init(0:init_3d%nzs-1) )
    4141                 init_3d%lod_tsoil = 1
     4147             IF ( .NOT. ALLOCATED( init_3d%tsoil_1d ) )  THEN
     4148                ALLOCATE( init_3d%tsoil_1d(0:init_3d%nzs-1) )
     4149                IF( .NOT. init_3d%from_file_tsoil )  init_3d%lod_tsoil = 1
    41424150                init_3d%from_file_tsoil = .TRUE.
    41434151             ENDIF
     
    41474155!
    41484156!--          Distribute soil profiles from root to all childs
    4149              CALL MPI_BCAST( init_3d%msoil_init, SIZE(init_3d%msoil_init),     &
     4157             CALL MPI_BCAST( init_3d%msoil_1d, SIZE(init_3d%msoil_1d),         &
    41504158                             MPI_REAL, 0, MPI_COMM_WORLD, ierr )
    4151              CALL MPI_BCAST( init_3d%tsoil_init, SIZE(init_3d%tsoil_init),     &
     4159             CALL MPI_BCAST( init_3d%tsoil_1d, SIZE(init_3d%tsoil_1d),         &
    41524160                             MPI_REAL, 0, MPI_COMM_WORLD, ierr )
    41534161#endif
     
    41554163          ENDIF
    41564164!
    4157 !--       Proceed with Level 2 initialization. Information from dynamic input
    4158 !--       is now available on all processes.
     4165!--       Proceed with Level 2 initialization.
    41594166          IF ( init_3d%from_file_msoil )  THEN
    41604167
     
    41644171                   CALL netcdf_data_input_interpolate(                         &
    41654172                                       m_soil_h%var_2d(nzb_soil:nzt_soil,m),   &
    4166                                        init_3d%msoil_init(:),                  &
     4173                                       init_3d%msoil_1d(:),                    &
    41674174                                       zs(nzb_soil:nzt_soil), init_3d%z_soil,  &
    41684175                                       nzb_soil, nzt_soil,                     &
     
    41744181                      CALL netcdf_data_input_interpolate(                      &
    41754182                                       m_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),&
    4176                                        init_3d%msoil_init(:),                  &
     4183                                       init_3d%msoil_1d(:),                    &
    41774184                                       zs(nzb_soil:nzt_soil), init_3d%z_soil,  &
    41784185                                       nzb_soil, nzt_soil,                     &
     
    41864193                   j = surf_lsm_h%j(m)
    41874194
    4188                    IF ( init_3d%msoil(0,j,i) /= init_3d%fill_msoil )           &
     4195                   IF ( init_3d%msoil_3d(0,j,i) /= init_3d%fill_msoil )        &
    41894196                      CALL netcdf_data_input_interpolate(                      &
    41904197                                       m_soil_h%var_2d(nzb_soil:nzt_soil,m),   &
    4191                                        init_3d%msoil(:,j,i),                   &
     4198                                       init_3d%msoil_3d(:,j,i),                &
    41924199                                       zs(nzb_soil:nzt_soil), init_3d%z_soil,  &
    41934200                                       nzb_soil, nzt_soil,                     &
     
    42014208                                             surf_lsm_v(l)%building_covered(m) )
    42024209
    4203                       IF ( init_3d%msoil(0,j,i) /= init_3d%fill_msoil )        &
     4210                      IF ( init_3d%msoil_3d(0,j,i) /= init_3d%fill_msoil )     &
    42044211                         CALL netcdf_data_input_interpolate(                   &
    42054212                                       m_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),&
    4206                                        init_3d%msoil(:,j,i),                   &
     4213                                       init_3d%msoil_3d(:,j,i),                &
    42074214                                       zs(nzb_soil:nzt_soil), init_3d%z_soil,  &
    42084215                                       nzb_soil, nzt_soil,                     &
     
    42214228                   CALL netcdf_data_input_interpolate(                         &
    42224229                                       t_soil_h%var_2d(nzb_soil:nzt_soil,m),   &
    4223                                        init_3d%tsoil_init(:),                  &
     4230                                       init_3d%tsoil_1d(:),                    &
    42244231                                       zs(nzb_soil:nzt_soil), init_3d%z_soil,  &
    42254232                                       nzb_soil, nzt_soil,                     &
     
    42324239                      CALL netcdf_data_input_interpolate(                      &
    42334240                                       t_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),&
    4234                                        init_3d%tsoil_init(:),                  &
     4241                                       init_3d%tsoil_1d(:),                    &
    42354242                                       zs(nzb_soil:nzt_soil), init_3d%z_soil,  &
    42364243                                       nzb_soil, nzt_soil,                     &
     
    42464253                   j = surf_lsm_h%j(m)
    42474254
    4248                    IF ( init_3d%msoil(0,j,i) /= init_3d%fill_msoil )           &
     4255                   IF ( init_3d%tsoil_3d(0,j,i) /= init_3d%fill_tsoil )        &
    42494256                      CALL netcdf_data_input_interpolate(                      &
    42504257                                       t_soil_h%var_2d(nzb_soil:nzt_soil,m),   &
    4251                                        init_3d%tsoil(:,j,i),                   &
     4258                                       init_3d%tsoil_3d(:,j,i),                &
    42524259                                       zs(nzb_soil:nzt_soil), init_3d%z_soil,  &
    42534260                                       nzb_soil, nzt_soil,                     &
     
    42624269                                                surf_lsm_v(l)%building_covered(m) )
    42634270
    4264                       IF ( init_3d%msoil(0,j,i) /= init_3d%fill_msoil )        &
     4271                      IF ( init_3d%tsoil_3d(0,j,i) /= init_3d%fill_tsoil )     &
    42654272                         CALL netcdf_data_input_interpolate(                   &
    42664273                                       t_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),&
    4267                                        init_3d%tsoil(:,j,i),                   &
     4274                                       init_3d%tsoil_3d(:,j,i),                &
    42684275                                       zs(nzb_soil:nzt_soil), init_3d%z_soil,  &
    42694276                                       nzb_soil, nzt_soil,                     &
     
    43114318             surf_lsm_h%shf(m)  = - surf_lsm_h%us(m) * surf_lsm_h%ts(m)        &
    43124319                                  * rho_surface
    4313          ENDDO
    4314 !
    4315 !--      Vertical surfaces
    4316          DO  l = 0, 3
     4320          ENDDO
     4321!
     4322!--       Vertical surfaces
     4323          DO  l = 0, 3
    43174324             DO  m = 1, surf_lsm_v(l)%ns
    43184325                i   = surf_lsm_v(l)%i(m)           
  • palm/trunk/SOURCE/netcdf_data_input_mod.f90

    r3186 r3209  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! - Separate input of soil properties from input of atmospheric data. This
     23!   enables input of soil properties also in child domains without any
     24!   dependence on atmospheric input
     25! - Check for missing initial 1D/3D data in dynamic input file
     26! - Revise checks for matching grid spacing in model and input file
     27! - Bugfix, add netcdf4_parallel directive for collective read operation
     28! - Revise error message numbers
    2329!
    2430! Former revisions:
     
    303309       REAL(wp) ::  rotation_angle   !< rotation angle of input data
    304310
    305        REAL(wp), DIMENSION(:), ALLOCATABLE ::  msoil_init   !< initial vertical profile of soil moisture
     311       REAL(wp), DIMENSION(:), ALLOCATABLE ::  msoil_1d     !< initial vertical profile of soil moisture
    306312       REAL(wp), DIMENSION(:), ALLOCATABLE ::  pt_init      !< initial vertical profile of pt
    307313       REAL(wp), DIMENSION(:), ALLOCATABLE ::  q_init       !< initial vertical profile of q
    308        REAL(wp), DIMENSION(:), ALLOCATABLE ::  tsoil_init   !< initial vertical profile of soil temperature
     314       REAL(wp), DIMENSION(:), ALLOCATABLE ::  tsoil_1d     !< initial vertical profile of soil temperature
    309315       REAL(wp), DIMENSION(:), ALLOCATABLE ::  u_init       !< initial vertical profile of u
    310316       REAL(wp), DIMENSION(:), ALLOCATABLE ::  ug_init      !< initial vertical profile of ug
     
    317323
    318324
    319        REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  msoil        !< initial 3d soil moisture provide by Inifor and interpolated onto soil grid
    320        REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  tsoil        !< initial 3d soil temperature provide by Inifor and interpolated onto soil grid
     325       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  msoil_3d !< initial 3d soil moisture provide by Inifor and interpolated onto soil grid
     326       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  tsoil_3d !< initial 3d soil temperature provide by Inifor and interpolated onto soil grid
    321327
    322328    END TYPE init_type
     
    573579       MODULE PROCEDURE netcdf_data_input_init_3d
    574580    END INTERFACE netcdf_data_input_init_3d
     581   
     582    INTERFACE netcdf_data_input_init_lsm
     583       MODULE PROCEDURE netcdf_data_input_init_lsm
     584    END INTERFACE netcdf_data_input_init_lsm
    575585
    576586    INTERFACE netcdf_data_input_lsf
     
    595605       MODULE PROCEDURE get_variable_3d_real
    596606       MODULE PROCEDURE get_variable_3d_real_dynamic
    597 !        MODULE PROCEDURE get_variable_3d_real_v
    598607       MODULE PROCEDURE get_variable_4d_real
    599608    END INTERFACE get_variable
     
    626635    PUBLIC netcdf_data_input_check_dynamic, netcdf_data_input_check_static,    &
    627636           netcdf_data_input_inquire_file,                                     &
    628            netcdf_data_input_init, netcdf_data_input_init_3d,                  &
     637           netcdf_data_input_init, netcdf_data_input_init_lsm,                 &
     638           netcdf_data_input_init_3d,                                          &
    629639           netcdf_data_input_interpolate, netcdf_data_input_lsf,               &
    630640           netcdf_data_input_surface_data, netcdf_data_input_topo
     
    18641874                                 '(level of detail) is not set ' //            &
    18651875                                 'properly for buildings_2d.'
    1866                 CALL message( 'netcdf_data_input_mod', 'NDI000',               &
     1876                CALL message( 'netcdf_data_input_mod', 'PA0540',               &
    18671877                               1, 2, 0, 6, 0 )
    18681878             ENDIF
     
    18971907                                 '(level of detail) is not set ' //            &
    18981908                                 'properly for buildings_3d.'
    1899                 CALL message( 'netcdf_data_input_mod', 'NDI001',               &
     1909                CALL message( 'netcdf_data_input_mod', 'PA0541',               &
    19001910                               1, 2, 0, 6, 0 )
    19011911             ENDIF
     
    19992009             message_string = 'If building heigths are prescribed in ' //      &
    20002010                              'static input file, also an ID is required.'
    2001              CALL message( 'netcdf_data_input_mod', 'NDI002', 1, 2, 0, 6, 0 )
     2011             CALL message( 'netcdf_data_input_mod', 'PA0542', 1, 2, 0, 6, 0 )
    20022012          ENDIF
    20032013       ENDIF
     
    21202130       CALL inquire_variable_names( id_dynamic, var_names )
    21212131!
    2122 !--    Read vertical dimension of scalar und w grid. Will be used for
    2123 !--    inter- and extrapolation in case of stretched numeric grid.
    2124 !--    This will be removed when Inifor is able to handle stretched grids.
     2132!--    Read vertical dimension of scalar und w grid.
    21252133       CALL get_dimension_length( id_dynamic, init_3d%nzu, 'z'     )
    21262134       CALL get_dimension_length( id_dynamic, init_3d%nzw, 'zw'    )
    2127        IF ( check_existence( var_names, 'zsoil' ) )                            &
    2128           CALL get_dimension_length( id_dynamic, init_3d%nzs, 'zsoil' )
    21292135!
    21302136!--    Read also the horizontal dimensions. These are used just used fo
     
    21462152                           'does not match the number of numeric grid '//      &
    21472153                           'points.'
    2148           CALL message( 'netcdf_data_input_mod', 'NDI003', 1, 2, 0, 6, 0 )
     2154          CALL message( 'netcdf_data_input_mod', 'PA0543', 1, 2, 0, 6, 0 )
    21492155       ENDIF
    21502156
     
    21532159                           'does not match the number of numeric grid '//      &
    21542160                           'points.'
    2155           CALL message( 'netcdf_data_input_mod', 'NDI003', 1, 2, 0, 6, 0 )
     2161          CALL message( 'netcdf_data_input_mod', 'PA0543', 1, 2, 0, 6, 0 )
    21562162       ENDIF
    21572163!
     
    21652171          ALLOCATE( init_3d%zw_atmos(1:init_3d%nzw) )
    21662172          CALL get_variable( id_dynamic, 'zw', init_3d%zw_atmos )
    2167        ENDIF
    2168        IF ( check_existence( var_names, 'zsoil' ) )  THEN
    2169           ALLOCATE( init_3d%z_soil(1:init_3d%nzs) )
    2170           CALL get_variable( id_dynamic, 'zsoil', init_3d%z_soil )
    21712173       ENDIF
    21722174!
     
    21842186          message_string = 'Vertical grid in dynamic driver does not '// &
    21852187                           'match the numeric grid.'
    2186           CALL message( 'netcdf_data_input_mod', 'NDI003', 1, 2, 0, 6, 0 )
     2188          CALL message( 'netcdf_data_input_mod', 'PA0543', 1, 2, 0, 6, 0 )
    21872189       ENDIF
    21882190!
     
    22642266          ENDIF
    22652267          init_3d%from_file_u = .TRUE.
     2268       ELSE
     2269          message_string = 'Missing initial data for u-component'
     2270          CALL message( 'netcdf_data_input_mod', 'PA0544', 1, 2, 0, 6, 0 )
    22662271       ENDIF
    22672272!
     
    23072312          ENDIF
    23082313          init_3d%from_file_v = .TRUE.
     2314       ELSE
     2315          message_string = 'Missing initial data for v-component'
     2316          CALL message( 'netcdf_data_input_mod', 'PA0544', 1, 2, 0, 6, 0 )
    23092317       ENDIF
    23102318!
     
    23452353          ENDIF
    23462354          init_3d%from_file_w = .TRUE.
     2355       ELSE
     2356          message_string = 'Missing initial data for w-component'
     2357          CALL message( 'netcdf_data_input_mod', 'PA0544', 1, 2, 0, 6, 0 )
    23472358       ENDIF
    23482359!
     
    23852396             ENDIF
    23862397             init_3d%from_file_pt = .TRUE.
     2398          ELSE
     2399             message_string = 'Missing initial data for ' //                   &
     2400                              'potential temperature'
     2401             CALL message( 'netcdf_data_input_mod', 'PA0544', 1, 2, 0, 6, 0 )
    23872402          ENDIF
    23882403       ENDIF
     
    24252440             ENDIF
    24262441             init_3d%from_file_q = .TRUE.
    2427           ENDIF
    2428        ENDIF
    2429 !
    2430 !--    Read soil moisture
    2431        IF ( land_surface )  THEN
    2432 
    2433           IF ( check_existence( var_names, 'init_soil_m' ) )  THEN
    2434 !
    2435 !--          Read attributes for the fill value and level-of-detail
    2436              CALL get_attribute( id_dynamic, char_fill,                        &
    2437                                  init_3d%fill_msoil,                           &
    2438                                  .FALSE., 'init_soil_m' )
    2439              CALL get_attribute( id_dynamic, char_lod,                         &
    2440                                  init_3d%lod_msoil,                            &
    2441                                  .FALSE., 'init_soil_m' )
    2442 !
    2443 !--          level-of-detail 1 - read initialization profile
    2444              IF ( init_3d%lod_msoil == 1 )  THEN
    2445                 ALLOCATE( init_3d%msoil_init(0:init_3d%nzs-1) )
    2446 
    2447                 CALL get_variable( id_dynamic, 'init_soil_m',                  &
    2448                                    init_3d%msoil_init(0:init_3d%nzs-1) )
    2449 !
    2450 !--          level-of-detail 2 - read 3D initialization data
    2451              ELSEIF ( init_3d%lod_msoil == 2 )  THEN
    2452                 ALLOCATE ( init_3d%msoil(0:init_3d%nzs-1,nys:nyn,nxl:nxr) )
    2453 
    2454                CALL get_variable( id_dynamic, 'init_soil_m',                   &   
    2455                                 init_3d%msoil(0:init_3d%nzs-1,nys:nyn,nxl:nxr),&
    2456                                 nxl, nxr, nys, nyn, 0, init_3d%nzs-1 )
    2457 
    2458              ENDIF
    2459              init_3d%from_file_msoil = .TRUE.
    2460           ENDIF
    2461 !
    2462 !--       Read soil temperature
    2463           IF ( check_existence( var_names, 'init_soil_t' ) )  THEN
    2464 !
    2465 !--          Read attributes for the fill value and level-of-detail
    2466              CALL get_attribute( id_dynamic, char_fill,                        &
    2467                                  init_3d%fill_tsoil,                           &
    2468                                  .FALSE., 'init_soil_t' )
    2469              CALL get_attribute( id_dynamic, char_lod,                         &
    2470                                  init_3d%lod_tsoil,                            &
    2471                                  .FALSE., 'init_soil_t' )
    2472 !
    2473 !--          level-of-detail 1 - read initialization profile
    2474              IF ( init_3d%lod_tsoil == 1 )  THEN
    2475                 ALLOCATE( init_3d%tsoil_init(0:init_3d%nzs-1) )
    2476 
    2477                 CALL get_variable( id_dynamic, 'init_soil_t',                  &
    2478                                    init_3d%tsoil_init(0:init_3d%nzs-1) )
    2479 
    2480 !
    2481 !--          level-of-detail 2 - read 3D initialization data
    2482              ELSEIF ( init_3d%lod_tsoil == 2 )  THEN
    2483                 ALLOCATE ( init_3d%tsoil(0:init_3d%nzs-1,nys:nyn,nxl:nxr) )
    2484                
    2485                 CALL get_variable( id_dynamic, 'init_soil_t',                  &   
    2486                                 init_3d%tsoil(0:init_3d%nzs-1,nys:nyn,nxl:nxr),&
    2487                                 nxl, nxr, nys, nyn, 0, init_3d%nzs-1 )
    2488              ENDIF
    2489              init_3d%from_file_tsoil = .TRUE.
     2442          ELSE
     2443             message_string = 'Missing initial data for ' //                   &
     2444                              'mixing ratio'
     2445             CALL message( 'netcdf_data_input_mod', 'PA0544', 1, 2, 0, 6, 0 )
    24902446          ENDIF
    24912447       ENDIF
     
    25122468             message_string = 'NetCDF input for init_atmosphere_u must ' //    &
    25132469                              'not contain any _FillValues'
    2514              CALL message( 'netcdf_data_input_mod', 'NDI004', 2, 2, 0, 6, 0 )
     2470             CALL message( 'netcdf_data_input_mod', 'PA0545', 2, 2, 0, 6, 0 )
    25152471          ENDIF
    25162472       ENDIF
     
    25282484             message_string = 'NetCDF input for init_atmosphere_v must ' //    &
    25292485                              'not contain any _FillValues'
    2530              CALL message( 'netcdf_data_input_mod', 'NDI005', 2, 2, 0, 6, 0 )
     2486             CALL message( 'netcdf_data_input_mod', 'PA0545', 2, 2, 0, 6, 0 )
    25312487          ENDIF
    25322488       ENDIF
     
    25442500             message_string = 'NetCDF input for init_atmosphere_w must ' //    &
    25452501                              'not contain any _FillValues'
    2546              CALL message( 'netcdf_data_input_mod', 'NDI006', 2, 2, 0, 6, 0 )
     2502             CALL message( 'netcdf_data_input_mod', 'PA0545', 2, 2, 0, 6, 0 )
    25472503          ENDIF
    25482504       ENDIF
     
    25602516             message_string = 'NetCDF input for init_atmosphere_pt must ' //   &
    25612517                              'not contain any _FillValues'
    2562              CALL message( 'netcdf_data_input_mod', 'NDI007', 2, 2, 0, 6, 0 )
     2518             CALL message( 'netcdf_data_input_mod', 'PA0545', 2, 2, 0, 6, 0 )
    25632519          ENDIF
    25642520       ENDIF
     
    25762532             message_string = 'NetCDF input for init_atmosphere_q must ' //    &
    25772533                              'not contain any _FillValues'
    2578              CALL message( 'netcdf_data_input_mod', 'NDI008', 2, 2, 0, 6, 0 )
     2534             CALL message( 'netcdf_data_input_mod', 'PA0545', 2, 2, 0, 6, 0 )
    25792535          ENDIF
    25802536       ENDIF
     
    25852541
    25862542    END SUBROUTINE netcdf_data_input_init_3d
     2543   
     2544!------------------------------------------------------------------------------!
     2545! Description:
     2546! ------------
     2547!> Reads initialization data of u, v, w, pt, q, geostrophic wind components,
     2548!> as well as soil moisture and soil temperature, derived from larger-scale
     2549!> model (COSMO) by Inifor.
     2550!------------------------------------------------------------------------------!
     2551    SUBROUTINE netcdf_data_input_init_lsm
     2552
     2553       USE arrays_3d,                                                          &
     2554           ONLY:  q, pt, u, v, w, zu, zw
     2555
     2556       USE control_parameters,                                                 &
     2557           ONLY:  bc_lr_cyc, bc_ns_cyc, humidity, land_surface, message_string,&
     2558                  nesting_offline, neutral, surface_pressure
     2559
     2560       USE indices,                                                            &
     2561           ONLY:  nx, nxl, nxlu, nxr, ny, nyn, nys, nysv, nzb, nz, nzt
     2562
     2563       IMPLICIT NONE
     2564
     2565       CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE ::  var_names
     2566     
     2567       INTEGER(iwp) ::  id_dynamic !< NetCDF id of dynamic input file
     2568       INTEGER(iwp) ::  num_vars   !< number of variables in netcdf input file
     2569
     2570!
     2571!--    Skip routine if no input file with dynamic input data is available.
     2572       IF ( .NOT. input_pids_dynamic )  RETURN
     2573!
     2574!--    CPU measurement
     2575       CALL cpu_log( log_point_s(85), 'NetCDF input init', 'start' )
     2576
     2577#if defined ( __netcdf )
     2578!
     2579!--    Open file in read-only mode
     2580       CALL open_read_file( TRIM( input_file_dynamic ) //                      &
     2581                            TRIM( coupling_char ), id_dynamic )
     2582
     2583!
     2584!--    At first, inquire all variable names.
     2585       CALL inquire_num_variables( id_dynamic, num_vars )
     2586!
     2587!--    Allocate memory to store variable names.
     2588       ALLOCATE( var_names(1:num_vars) )
     2589       CALL inquire_variable_names( id_dynamic, var_names )
     2590!
     2591!--    Read vertical dimension for soil depth.
     2592       IF ( check_existence( var_names, 'zsoil' ) )                            &
     2593          CALL get_dimension_length( id_dynamic, init_3d%nzs, 'zsoil' )
     2594!
     2595!--    Read also the horizontal dimensions required for soil initialization.
     2596!--    Please note, in case of non-nested runs or in case of root domain,
     2597!--    these data is already available, but will be read again for the sake
     2598!--    of clearness.
     2599       CALL get_dimension_length( id_dynamic, init_3d%nx,  'x'  )
     2600       CALL get_dimension_length( id_dynamic, init_3d%ny,  'y'  )
     2601!
     2602!--    Check for correct horizontal and vertical dimension. Please note,
     2603!--    in case of non-nested runs or in case of root domain, these checks
     2604!--    are already performed
     2605       IF ( init_3d%nx-1 /= nx  .OR.  init_3d%ny-1 /= ny )  THEN
     2606          message_string = 'Number of inifor horizontal grid points  '//       &
     2607                           'does not match the number of numeric grid points.'
     2608          CALL message( 'netcdf_data_input_mod', 'PA0543', 1, 2, 0, 6, 0 )
     2609       ENDIF
     2610!
     2611!--    Read vertical dimensions. Later, these are required for eventual
     2612!--    inter- and extrapolations of the initialization data.
     2613       IF ( check_existence( var_names, 'zsoil' ) )  THEN
     2614          ALLOCATE( init_3d%z_soil(1:init_3d%nzs) )
     2615          CALL get_variable( id_dynamic, 'zsoil', init_3d%z_soil )
     2616       ENDIF
     2617!
     2618!--    Read initial data for soil moisture
     2619       IF ( check_existence( var_names, 'init_soil_m' ) )  THEN
     2620!
     2621!--       Read attributes for the fill value and level-of-detail
     2622          CALL get_attribute( id_dynamic, char_fill,                           &
     2623                              init_3d%fill_msoil,                              &
     2624                              .FALSE., 'init_soil_m' )
     2625          CALL get_attribute( id_dynamic, char_lod,                            &
     2626                              init_3d%lod_msoil,                               &
     2627                              .FALSE., 'init_soil_m' )
     2628!
     2629!--       level-of-detail 1 - read initialization profile
     2630          IF ( init_3d%lod_msoil == 1 )  THEN
     2631             ALLOCATE( init_3d%msoil_1d(0:init_3d%nzs-1) )
     2632
     2633             CALL get_variable( id_dynamic, 'init_soil_m',                     &
     2634                                init_3d%msoil_1d(0:init_3d%nzs-1) )
     2635!
     2636!--       level-of-detail 2 - read 3D initialization data
     2637          ELSEIF ( init_3d%lod_msoil == 2 )  THEN
     2638             ALLOCATE ( init_3d%msoil_3d(0:init_3d%nzs-1,nys:nyn,nxl:nxr) )
     2639
     2640            CALL get_variable( id_dynamic, 'init_soil_m',                      &   
     2641                             init_3d%msoil_3d(0:init_3d%nzs-1,nys:nyn,nxl:nxr),&
     2642                             nxl, nxr, nys, nyn, 0, init_3d%nzs-1 )
     2643
     2644          ENDIF
     2645          init_3d%from_file_msoil = .TRUE.
     2646       ENDIF
     2647!
     2648!--    Read soil temperature
     2649       IF ( check_existence( var_names, 'init_soil_t' ) )  THEN
     2650!
     2651!--       Read attributes for the fill value and level-of-detail
     2652          CALL get_attribute( id_dynamic, char_fill,                           &
     2653                              init_3d%fill_tsoil,                              &
     2654                              .FALSE., 'init_soil_t' )
     2655          CALL get_attribute( id_dynamic, char_lod,                            &
     2656                              init_3d%lod_tsoil,                               &
     2657                              .FALSE., 'init_soil_t' )
     2658!
     2659!--       level-of-detail 1 - read initialization profile
     2660          IF ( init_3d%lod_tsoil == 1 )  THEN
     2661             ALLOCATE( init_3d%tsoil_1d(0:init_3d%nzs-1) )
     2662
     2663             CALL get_variable( id_dynamic, 'init_soil_t',                     &
     2664                                init_3d%tsoil_1d(0:init_3d%nzs-1) )
     2665
     2666!
     2667!--       level-of-detail 2 - read 3D initialization data
     2668          ELSEIF ( init_3d%lod_tsoil == 2 )  THEN
     2669             ALLOCATE ( init_3d%tsoil_3d(0:init_3d%nzs-1,nys:nyn,nxl:nxr) )
     2670             
     2671             CALL get_variable( id_dynamic, 'init_soil_t',                     &   
     2672                             init_3d%tsoil_3d(0:init_3d%nzs-1,nys:nyn,nxl:nxr),&
     2673                             nxl, nxr, nys, nyn, 0, init_3d%nzs-1 )
     2674          ENDIF
     2675          init_3d%from_file_tsoil = .TRUE.
     2676       ENDIF
     2677!
     2678!--    Close input file
     2679       CALL close_input_file( id_dynamic )
     2680#endif
     2681!
     2682!--    End of CPU measurement
     2683       CALL cpu_log( log_point_s(85), 'NetCDF input init', 'stop' )
     2684
     2685    END SUBROUTINE netcdf_data_input_init_lsm   
    25872686
    25882687!------------------------------------------------------------------------------!
     
    28892988                            'input file ' //                                   &
    28902989                            TRIM( input_file_dynamic ) // TRIM( coupling_char )
    2891           CALL message( 'netcdf_data_input_mod', 'NDI009', 1, 2, 0, 6, 0 )
     2990          CALL message( 'netcdf_data_input_mod', 'PA0546', 1, 2, 0, 6, 0 )
    28922991       ENDIF
    28932992!
     
    28992998                           'input file ' // TRIM( input_file_dynamic ) //      &
    29002999                           TRIM( coupling_char )
    2901           CALL message( 'netcdf_data_input_mod', 'NDI010', 1, 2, 0, 6, 0 )
     3000          CALL message( 'netcdf_data_input_mod', 'PA0547', 1, 2, 0, 6, 0 )
    29023001       ENDIF
    29033002
     
    29403039                           'x- and/or y-direction ' //                         &
    29413040                           'do not match the respective model dimension'
    2942           CALL message( 'netcdf_data_input_mod', 'NDI011', 1, 2, 0, 6, 0 )
     3041          CALL message( 'netcdf_data_input_mod', 'PA0548', 1, 2, 0, 6, 0 )
    29433042       ENDIF
    29443043!
    29453044!--    Check if grid spacing of provided input data matches the respective
    2946 !--    grid spacing in the model.
    2947        IF ( dim_static%x(1) - dim_static%x(0) /= dx  .OR.                      &
    2948             dim_static%y(1) - dim_static%y(0) /= dy )  THEN
     3045!--    grid spacing in the model. 
     3046       IF ( ABS( dim_static%x(1) - dim_static%x(0) - dx ) > 10E-6_wp  .OR.     &
     3047            ABS( dim_static%y(1) - dim_static%y(0) - dy ) > 10E-6_wp )  THEN
    29493048          message_string = 'Static input file: horizontal grid spacing ' //    &
    29503049                           'in x- and/or y-direction ' //                      &
    29513050                           'do not match the respective model grid spacing.'
    2952           CALL message( 'netcdf_data_input_mod', 'NDI012', 1, 2, 0, 6, 0 )
     3051          CALL message( 'netcdf_data_input_mod', 'PA0549', 1, 2, 0, 6, 0 )
    29533052       ENDIF
    29543053!
     
    29603059          message_string = 'NetCDF variable zt is not ' //                     &
    29613060                           'allowed to have missing data'
    2962           CALL message( 'netcdf_data_input_mod', 'NDI013', 2, 2, myid, 6, 0 )
     3061          CALL message( 'netcdf_data_input_mod', 'PA0550', 2, 2, myid, 6, 0 )
    29633062       ENDIF
    29643063!
     
    29673066          message_string = 'NetCDF variable zt is not ' //                     &
    29683067                           'allowed to have negative values'
    2969           CALL message( 'netcdf_data_input_mod', 'NDI013', 2, 2, myid, 6, 0 )
     3068          CALL message( 'netcdf_data_input_mod', 'PA0551', 2, 2, myid, 6, 0 )
    29703069       ENDIF
    29713070!
     
    29773076                message_string = 'Reading 3D building data - too much ' //     &
    29783077                                 'data points along the vertical coordinate.'
    2979                 CALL message( 'netcdf_data_input_mod', 'NDI014', 2, 2, 0, 6, 0 )
     3078                CALL message( 'netcdf_data_input_mod', 'PA0552', 2, 2, 0, 6, 0 )
    29803079             ENDIF
    29813080
     
    29843083                message_string = 'Reading 3D building data - vertical ' //     &
    29853084                                 'coordinate do not match numeric grid.'
    2986                 CALL message( 'netcdf_data_input_mod', 'NDI015', 2, 2, 0, 6, 0 )
     3085                CALL message( 'netcdf_data_input_mod', 'PA0553', 2, 2, 0, 6, 0 )
    29873086             ENDIF
    29883087          ENDIF
     
    30073106                           'required. If urban-surface model is applied, ' //  &
    30083107                           'also building_type ist required'
    3009           CALL message( 'netcdf_data_input_mod', 'NDI016', 1, 2, 0, 6, 0 )
     3108          CALL message( 'netcdf_data_input_mod', 'PA0554', 1, 2, 0, 6, 0 )
    30103109       ENDIF
    30113110!
     
    30163115          IF ( ANY( vegetation_type_f%var == 0 ) )  THEN
    30173116             IF ( .NOT. vegetation_pars_f%from_file )  THEN
    3018                 message_string = 'If vegegation_type = 0 at any location, ' // &
     3117                message_string = 'If vegetation_type = 0 at any location, ' // &
    30193118                                 'vegetation_pars is required'
    3020                 CALL message( 'netcdf_data_input_mod', 'NDI017', 2, 2, -1, 6, 0 )
     3119                CALL message( 'netcdf_data_input_mod', 'PA0555', 2, 2, -1, 6, 0 )
    30213120             ENDIF
    30223121             IF ( .NOT. root_area_density_lsm_f%from_file )  THEN
    3023                 message_string = 'If vegegation_type = 0 at any location, ' // &
     3122                message_string = 'If vegetation_type = 0 at any location, ' // &
    30243123                                 'root_area_dens_s is required'
    3025                 CALL message( 'netcdf_data_input_mod', 'NDI018', 2, 2, myid, 6, 0 )
     3124                CALL message( 'netcdf_data_input_mod', 'PA0556', 2, 2, myid, 6, 0 )
    30263125             ENDIF
    30273126          ENDIF
     
    30433142             message_string = 'If soil_type = 0 at any location, ' //          &
    30443143                              'soil_pars is required'
    3045              CALL message( 'netcdf_data_input_mod', 'NDI019', 2, 2, myid, 6, 0 )
     3144             CALL message( 'netcdf_data_input_mod', 'PA0557', 2, 2, myid, 6, 0 )
    30463145          ENDIF
    30473146       ENDIF
     
    30533152                message_string = 'If building_type = 0 at any location, ' //   &
    30543153                                 'building_pars is required'
    3055                 CALL message( 'netcdf_data_input_mod', 'NDI020', 2, 2, myid, 6, 0 )
     3154                CALL message( 'netcdf_data_input_mod', 'PA0558', 2, 2, myid, 6, 0 )
    30563155             ENDIF
    30573156          ENDIF
     
    30643163                message_string = 'If albedo_type = 0 at any location, ' //     &
    30653164                                 'albedo_pars is required'
    3066                 CALL message( 'netcdf_data_input_mod', 'NDI021', 2, 2, myid, 6, 0 )
     3165                CALL message( 'netcdf_data_input_mod', 'PA0559', 2, 2, myid, 6, 0 )
    30673166             ENDIF
    30683167          ENDIF
     
    30753174                message_string = 'If pavement_type = 0 at any location, ' //   &
    30763175                                 'pavement_pars is required'
    3077                 CALL message( 'netcdf_data_input_mod', 'NDI022', 2, 2, myid, 6, 0 )
     3176                CALL message( 'netcdf_data_input_mod', 'PA0560', 2, 2, myid, 6, 0 )
    30783177             ENDIF
    30793178          ENDIF
     
    30873186                message_string = 'If pavement_type = 0 at any location, ' //   &
    30883187                                 'pavement_subsurface_pars is required'
    3089                 CALL message( 'netcdf_data_input_mod', 'NDI023', 2, 2, myid, 6, 0 )
     3188                CALL message( 'netcdf_data_input_mod', 'PA0561', 2, 2, myid, 6, 0 )
    30903189             ENDIF
    30913190          ENDIF
     
    30983197                message_string = 'If water_type = 0 at any location, ' //      &
    30993198                                 'water_pars is required'
    3100                 CALL message( 'netcdf_data_input_mod', 'NDI024', 2, 2,myid, 6, 0 )
     3199                CALL message( 'netcdf_data_input_mod', 'PA0562', 2, 2,myid, 6, 0 )
    31013200             ENDIF
    31023201          ENDIF
     
    31183217                                 'building_type, or water_type must be set '// &
    31193218                                 'to a non-missing value. Grid point: ', j, i
    3120                 CALL message( 'netcdf_data_input_mod', 'NDI025', 2, 2, myid, 6, 0 )
     3219                CALL message( 'netcdf_data_input_mod', 'PA0563', 2, 2, myid, 6, 0 )
    31213220             ENDIF
    31223221!
     
    31383237                                 'location (y,x) where vegetation_type or ' // &
    31393238                                 'pavement_type is a non-missing value.'
    3140                    CALL message( 'netcdf_data_input_mod', 'NDI026',            &
     3239                   CALL message( 'netcdf_data_input_mod', 'PA0564',            &
    31413240                                  2, 2, myid, 6, 0 )
    31423241                ENDIF
     
    31593258                                 'given at a location, surface_fraction ' //   &
    31603259                                 'must be provided.'
    3161                    CALL message( 'netcdf_data_input_mod', 'NDI027',            &
     3260                   CALL message( 'netcdf_data_input_mod', 'PA0565',            &
    31623261                                  2, 2, myid, 6, 0 )
    31633262                ELSEIF ( ANY ( surface_fraction_f%frac(:,j,i) ==               &
     
    31663265                                 'given at a location, surface_fraction ' //   &
    31673266                                 'must be provided.'
    3168                    CALL message( 'netcdf_data_input_mod', 'NDI027',            &
     3267                   CALL message( 'netcdf_data_input_mod', 'PA0565',            &
    31693268                                  2, 2, myid, 6, 0 )
    31703269                ENDIF
     
    31793278                IF ( SUM ( surface_fraction_f%frac(0:2,j,i) ) > 1.0_wp )  THEN
    31803279                   message_string = 'surface_fraction must not exceed 1'
    3181                    CALL message( 'netcdf_data_input_mod', 'NDI028',            &
     3280                   CALL message( 'netcdf_data_input_mod', 'PA0566',            &
    31823281                                  2, 2, myid, 6, 0 )
    31833282                ENDIF
     
    32053304                             'water surface is given at (i,j) = ( ', i, j,     &
    32063305                             ' ), but surface fraction is 0 for the given type.'
    3207                    CALL message( 'netcdf_data_input_mod', 'NDI029',            &
     3306                   CALL message( 'netcdf_data_input_mod', 'PA0567',            &
    32083307                                  2, 2, myid, 6, 0 )
    32093308                ENDIF
     
    32323331                             ' ), but surface fraction is not 0 for the ' //   &
    32333332                             'given type.'
    3234                    CALL message( 'netcdf_data_input_mod', 'NDI030',            &
     3333                   CALL message( 'netcdf_data_input_mod', 'PA0568',            &
    32353334                                  2, 2, myid, 6, 0 )
    32363335                ENDIF
     
    32473346                                       'parameters of vegetation_pars at '//   &
    32483347                                       'this location must be set.'
    3249                       CALL message( 'netcdf_data_input_mod', 'NDI031',         &
     3348                      CALL message( 'netcdf_data_input_mod', 'PA0569',         &
    32503349                                     2, 2, myid, 6, 0 )
    32513350                   ENDIF
     
    32623361                                       'levels of root_area_dens_s ' //        &
    32633362                                       'must be set at this location.'
    3264                       CALL message( 'netcdf_data_input_mod', 'NDI032',         &
     3363                      CALL message( 'netcdf_data_input_mod', 'PA0570',         &
    32653364                                     2, 2, myid, 6, 0 )
    32663365                   ENDIF
     
    32863385                   message_string = 'If soil_type(y,x) = 0, all levels of '  //&
    32873386                                    'soil_pars at this location must be set.'
    3288                    CALL message( 'netcdf_data_input_mod', 'NDI033',            &
     3387                   CALL message( 'netcdf_data_input_mod', 'PA0571',            &
    32893388                                  2, 2, myid, 6, 0 )
    32903389                ENDIF
     
    33013400                                       'parameters of building_pars at this '//&
    33023401                                       'location must be set.'
    3303                       CALL message( 'netcdf_data_input_mod', 'NDI034',         &
     3402                      CALL message( 'netcdf_data_input_mod', 'PA0572',         &
    33043403                                     2, 2, myid, 6, 0 )
    33053404                   ENDIF
     
    33183417                                         'urban-surface model is applied. ' // &
    33193418                                         'i, j = ', i, j
    3320                       CALL message( 'netcdf_data_input_mod', 'NDI035',         &
     3419                      CALL message( 'netcdf_data_input_mod', 'PA0573',         &
    33213420                                     2, 2, myid, 6, 0 )
    33223421                   ENDIF
     
    33303429                                         'urban-surface model is applied. ' // &
    33313430                                         'i, j = ', i, j
    3332                       CALL message( 'netcdf_data_input_mod', 'NDI035',         &
     3431                      CALL message( 'netcdf_data_input_mod', 'PA0573',         &
    33333432                                     2, 2, myid, 6, 0 )
    33343433                   ENDIF
     
    33453444                                         'building is set requires an ID ' //  &
    33463445                                         '( and vice versa ). i, j = ', i, j
    3347                       CALL message( 'netcdf_data_input_mod', 'NDI036',         &
     3446                      CALL message( 'netcdf_data_input_mod', 'PA0574',         &
    33483447                                     2, 2, myid, 6, 0 )
    33493448                   ENDIF
     
    33543453                                         'building is set requires an ID ' //  &
    33553454                                         '( and vice versa ). i, j = ', i, j
    3356                       CALL message( 'netcdf_data_input_mod', 'NDI036',         &
     3455                      CALL message( 'netcdf_data_input_mod', 'PA0574',         &
    33573456                                     2, 2, myid, 6, 0 )
    33583457                   ENDIF
     
    33683467                      WRITE( message_string, * ) 'Each building grid point '// &
    33693468                                                 'requires an ID.', i, j
    3370                       CALL message( 'netcdf_data_input_mod', 'NDI036',         &
     3469                      CALL message( 'netcdf_data_input_mod', 'PA0575',         &
    33713470                                     2, 2, myid, 6, 0 )
    33723471                   ENDIF
     
    33763475                      WRITE( message_string, * ) 'Each building grid point '// &
    33773476                                                 'requires an ID.', i, j
    3378                       CALL message( 'netcdf_data_input_mod', 'NDI036',         &
     3477                      CALL message( 'netcdf_data_input_mod', 'PA0575',         &
    33793478                                     2, 2, myid, 6, 0 )
    33803479                   ENDIF
     
    33913490                                       'parameters of albedo_pars at this ' // &
    33923491                                       'location must be set.'
    3393                       CALL message( 'netcdf_data_input_mod', 'NDI037',         &
     3492                      CALL message( 'netcdf_data_input_mod', 'PA0576',         &
    33943493                                     2, 2, myid, 6, 0 )
    33953494                   ENDIF
     
    34073506                                       'parameters of pavement_pars at this '//&
    34083507                                       'location must be set.'
    3409                       CALL message( 'netcdf_data_input_mod', 'NDI038',         &
     3508                      CALL message( 'netcdf_data_input_mod', 'PA0577',         &
    34103509                                     2, 2, myid, 6, 0 )
    34113510                   ENDIF
     
    34243523                                       'pavement_subsurface_pars at this '//   &
    34253524                                       'location must be set.'
    3426                       CALL message( 'netcdf_data_input_mod', 'NDI039',         &
     3525                      CALL message( 'netcdf_data_input_mod', 'PA0578',         &
    34273526                                     2, 2, myid, 6, 0 )
    34283527                   ENDIF
     
    34403539                                       'parameters of water_pars at this ' //  &
    34413540                                       'location must be set.'
    3442                       CALL message( 'netcdf_data_input_mod', 'NDI040',         &
     3541                      CALL message( 'netcdf_data_input_mod', 'PA0579',         &
    34433542                                     2, 2, myid, 6, 0 )
    34443543                   ENDIF
     
    41404239!--    required.
    41414240       IF ( collective_read )  THEN
     4241#if defined( __netcdf4_parallel )
    41424242          nc_stat = NF90_VAR_PAR_ACCESS (id, id_var, NF90_COLLECTIVE)
     4243#endif
    41434244       ENDIF
    41444245!
     
    42004301!--    required.
    42014302       IF ( collective_read )  THEN
     4303#if defined( __netcdf4_parallel )       
    42024304          nc_stat = NF90_VAR_PAR_ACCESS (id, id_var, NF90_COLLECTIVE)
     4305#endif
    42034306       ENDIF
    42044307!
     
    42604363!--    required.
    42614364       IF ( collective_read )  THEN
     4365#if defined( __netcdf4_parallel )       
    42624366          nc_stat = NF90_VAR_PAR_ACCESS (id, id_var, NF90_COLLECTIVE)
     4367#endif         
    42634368       ENDIF
    42644369!
     
    43264431!--    required.
    43274432       IF ( collective_read )  THEN
     4433#if defined( __netcdf4_parallel )
    43284434          nc_stat = NF90_VAR_PAR_ACCESS (id, id_var, NF90_COLLECTIVE)
     4435#endif         
    43294436       ENDIF
    43304437!
     
    43944501!--    required.
    43954502       IF ( collective_read )  THEN
     4503#if defined( __netcdf4_parallel )       
    43964504          nc_stat = NF90_VAR_PAR_ACCESS (id, id_var, NF90_COLLECTIVE)
     4505#endif
    43974506       ENDIF
    43984507!
     
    44664575! !--    required.
    44674576!        IF ( collective_read )  THEN
     4577! #if defined( __netcdf4_parallel )
    44684578!           nc_stat = NF90_VAR_PAR_ACCESS (id, id_var, NF90_COLLECTIVE)
     4579! #endif
    44694580!        ENDIF
    44704581!
     
    45424653!--    required.
    45434654       IF ( collective_read )  THEN
     4655#if defined( __netcdf4_parallel )       
    45444656          nc_stat = NF90_VAR_PAR_ACCESS (id, id_var, NF90_COLLECTIVE)
     4657#endif
    45454658       ENDIF
    45464659!
     
    46324745!--    read operations are only enabled for top-boundary data.
    46334746       IF ( collective_read  .AND.  par_access )  THEN
     4747#if defined( __netcdf4_parallel )       
    46344748          nc_stat = NF90_VAR_PAR_ACCESS (id, id_var, NF90_COLLECTIVE)
     4749#endif
    46354750       ENDIF   
    46364751!
  • palm/trunk/SOURCE/pmc_interface_mod.f90

    r3183 r3209  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Apply an additional switch controlling the nesting of chemical species
    2323!
    2424! Former revisions:
     
    327327
    328328    USE chemistry_model_mod,                                                   &
    329         ONLY:  chem_species, spec_conc_2
     329        ONLY:  chem_species, nest_chemistry, spec_conc_2
    330330
    331331    USE cpulog,                                                                &
     
    12911291       ENDIF
    12921292       
    1293        IF ( air_chemistry )  THEN
     1293       IF ( air_chemistry  .AND.  nest_chemistry )  THEN
    12941294          DO  n = 1, nspec
    12951295             CALL pmc_set_dataarray_name( 'coarse',                            &
     
    35153515    IF ( TRIM(name) == "s"          )  p_3d => s
    35163516    IF ( TRIM(name) == "diss"       )  p_3d => diss   
    3517     IF ( TRIM(name) == "nr_part"    )   i_2d => nr_part
     3517    IF ( TRIM(name) == "nr_part"    )  i_2d => nr_part
    35183518    IF ( TRIM(name) == "part_adr"   )  i_2d => part_adr
    35193519    IF ( INDEX( TRIM(name), "chem_" ) /= 0 )  p_3d => chem_species(n)%conc
     
    38733873       ENDIF
    38743874
    3875        IF ( air_chemistry )  THEN
     3875       IF ( air_chemistry  .AND.  nest_chemistry)  THEN
    38763876          DO  n = 1, nspec
    38773877             CALL pmci_interp_tril_all ( chem_species(n)%conc,                 &
     
    46324632             ENDIF
    46334633
    4634              IF ( air_chemistry )  THEN
     4634             IF ( air_chemistry  .AND.  nest_chemistry )  THEN
    46354635                DO  n = 1, nspec
    46364636                   CALL pmci_interp_tril_lr( chem_species(n)%conc,             &
     
    47464746             ENDIF
    47474747
    4748              IF ( air_chemistry )  THEN
     4748             IF ( air_chemistry  .AND.  nest_chemistry )  THEN
    47494749                DO  n = 1, nspec
    47504750                   CALL pmci_interp_tril_lr( chem_species(n)%conc,             &
     
    48574857             ENDIF
    48584858
    4859              IF ( air_chemistry )  THEN
     4859             IF ( air_chemistry  .AND.  nest_chemistry )  THEN
    48604860                DO  n = 1, nspec
    48614861                   CALL pmci_interp_tril_sn( chem_species(n)%conc,             &
     
    49684968             ENDIF
    49694969
    4970              IF ( air_chemistry )  THEN
     4970             IF ( air_chemistry  .AND.  nest_chemistry )  THEN
    49714971                DO  n = 1, nspec
    49724972                   CALL pmci_interp_tril_sn( chem_species(n)%conc,             &
     
    50415041       ENDIF
    50425042
    5043        IF ( air_chemistry )  THEN
     5043       IF ( air_chemistry  .AND.  nest_chemistry )  THEN
    50445044          DO  n = 1, nspec
    50455045             CALL pmci_interp_tril_t( chem_species(n)%conc,                    &
     
    51245124      ENDIF
    51255125
    5126       IF ( air_chemistry )  THEN
     5126      IF ( air_chemistry  .AND.  nest_chemistry )  THEN
    51275127         DO  n = 1, nspec
    51285128            CALL pmci_anterp_tophat( chem_species(n)%conc,                     &
     
    59875987!
    59885988!-- Set Neumann boundary conditions for chemical species
    5989     IF ( air_chemistry )  THEN
     5989    IF ( air_chemistry  .AND.  nest_chemistry )  THEN
    59905990       IF ( ibc_cs_b == 1 )  THEN
    59915991          DO  n = 1, nspec
Note: See TracChangeset for help on using the changeset viewer.