Ignore:
Timestamp:
Jul 25, 2019 4:11:45 PM (2 years ago)
Author:
suehring
Message:

Initialization of soil temperature and moisture via dynamic input file only for vegetation and pavement surfaces

File:
1 edited

Legend:

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

    r4110 r4118  
    2525! -----------------
    2626! $Id$
     27! Initialization of soil temperature and moisture via dynamic input file only
     28! for vegetation and pavement surfaces.
     29!
     30! 4110 2019-07-22 17:05:21Z suehring
    2731! Relax checks for non-consistent initialization in case static or dynamic
    2832! input is provided. For example, soil_temperature or deep_soil_temperature
     
    45684572             IF ( init_3d%lod_msoil == 1 )  THEN
    45694573                DO  m = 1, surf_lsm_h%ns
    4570 
    4571                    CALL netcdf_data_input_interpolate(                         &
     4574                   IF ( surf_lsm_h%vegetation_surface(m)  .OR.                 &
     4575                        surf_lsm_h%pavement_surface(m) )  THEN
     4576
     4577                      CALL netcdf_data_input_interpolate(                      &
    45724578                                       m_soil_h%var_2d(nzb_soil:nzt_soil,m),   &
    45734579                                       init_3d%msoil_1d(:),                    &
     
    45754581                                       nzb_soil, nzt_soil,                     &
    45764582                                       nzb_soil, init_3d%nzs-1 )
     4583                   ENDIF
    45774584                ENDDO
    45784585                DO  l = 0, 3
    45794586                   DO  m = 1, surf_lsm_v(l)%ns
    4580 
    4581                       CALL netcdf_data_input_interpolate(                      &
     4587                      IF ( surf_lsm_v(l)%vegetation_surface(m)  .OR.           &
     4588                           surf_lsm_v(l)%pavement_surface(m) )  THEN
     4589                         CALL netcdf_data_input_interpolate(                   &
    45824590                                       m_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),&
    45834591                                       init_3d%msoil_1d(:),                    &
     
    45854593                                       nzb_soil, nzt_soil,                     &
    45864594                                       nzb_soil, init_3d%nzs-1 )
     4595                      ENDIF
    45874596                   ENDDO
    45884597                ENDDO
     
    45904599
    45914600                DO  m = 1, surf_lsm_h%ns
    4592                    i = surf_lsm_h%i(m)
    4593                    j = surf_lsm_h%j(m)
    4594 
    4595                    IF ( init_3d%msoil_3d(0,j,i) /= init_3d%fill_msoil )        &
    4596                       CALL netcdf_data_input_interpolate(                      &
     4601                   IF ( surf_lsm_h%vegetation_surface(m)  .OR.                 &
     4602                        surf_lsm_h%pavement_surface(m) )  THEN
     4603                      i = surf_lsm_h%i(m)
     4604                      j = surf_lsm_h%j(m)
     4605
     4606                      IF ( init_3d%msoil_3d(0,j,i) /= init_3d%fill_msoil )     &
     4607                         CALL netcdf_data_input_interpolate(                   &
    45974608                                       m_soil_h%var_2d(nzb_soil:nzt_soil,m),   &
    45984609                                       init_3d%msoil_3d(:,j,i),                &
     
    46004611                                       nzb_soil, nzt_soil,                     &
    46014612                                       nzb_soil, init_3d%nzs-1 )
     4613                   ENDIF
    46024614                ENDDO
    46034615                DO  l = 0, 3
    46044616                   DO  m = 1, surf_lsm_v(l)%ns
    4605 !
    4606 !--                   Note, in contrast to the static input data the dynamic
    4607 !--                   input do not need to be checked whether a grid point
    4608 !--                   is building covered. This is because soil data in the
    4609 !--                   dynamic input is provided for the whole domain. 
    4610                       i = surf_lsm_v(l)%i(m)
    4611                       j = surf_lsm_v(l)%j(m)
    4612 
    4613                       IF ( init_3d%msoil_3d(0,j,i) /= init_3d%fill_msoil )     &
    4614                          CALL netcdf_data_input_interpolate(                   &
     4617                      IF ( surf_lsm_v(l)%vegetation_surface(m)  .OR.           &
     4618                           surf_lsm_v(l)%pavement_surface(m) )  THEN
     4619!
     4620!--                      Note, in contrast to the static input data the dynamic
     4621!--                      input do not need to be checked whether a grid point
     4622!--                      is building covered. This is because soil data in the
     4623!--                      dynamic input is provided for the whole domain. 
     4624                         i = surf_lsm_v(l)%i(m)
     4625                         j = surf_lsm_v(l)%j(m)
     4626                         
     4627                         IF ( init_3d%msoil_3d(0,j,i) /= init_3d%fill_msoil )  &
     4628                            CALL netcdf_data_input_interpolate(                &
    46154629                                       m_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),&
    46164630                                       init_3d%msoil_3d(:,j,i),                &
     
    46184632                                       nzb_soil, nzt_soil,                     &
    46194633                                       nzb_soil, init_3d%nzs-1 )
     4634                      ENDIF
    46204635                   ENDDO
    46214636                ENDDO
     
    46284643             IF ( init_3d%lod_tsoil == 1 )  THEN ! change to 1 if provided correctly by INIFOR
    46294644                DO  m = 1, surf_lsm_h%ns
    4630 
    4631                    CALL netcdf_data_input_interpolate(                         &
     4645                   IF ( surf_lsm_h%vegetation_surface(m)  .OR.                 &
     4646                        surf_lsm_h%pavement_surface(m) )  THEN
     4647                      CALL netcdf_data_input_interpolate(                      &
    46324648                                       t_soil_h%var_2d(nzb_soil:nzt_soil,m),   &
    46334649                                       init_3d%tsoil_1d(:),                    &
     
    46354651                                       nzb_soil, nzt_soil,                     &
    46364652                                       nzb_soil, init_3d%nzs-1 )
    4637                    t_soil_h%var_2d(nzt_soil+1,m) = t_soil_h%var_2d(nzt_soil,m)
     4653!
     4654!--                   Set boundary condition, i.e. deep soil temperature
     4655                      t_soil_h%var_2d(nzt_soil+1,m) = t_soil_h%var_2d(nzt_soil,m)
     4656                   ENDIF
    46384657                ENDDO
    46394658                DO  l = 0, 3
    46404659                   DO  m = 1, surf_lsm_v(l)%ns
    4641 
    4642                       CALL netcdf_data_input_interpolate(                      &
     4660                      IF ( surf_lsm_v(l)%vegetation_surface(m)  .OR.           &
     4661                           surf_lsm_v(l)%pavement_surface(m) )  THEN
     4662                        CALL netcdf_data_input_interpolate(                    &
    46434663                                       t_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),&
    46444664                                       init_3d%tsoil_1d(:),                    &
     
    46464666                                       nzb_soil, nzt_soil,                     &
    46474667                                       nzb_soil, init_3d%nzs-1 )
    4648                       t_soil_v(l)%var_2d(nzt_soil+1,m) =                       &
     4668!
     4669!--                      Set boundary condition, i.e. deep soil temperature
     4670                         t_soil_v(l)%var_2d(nzt_soil+1,m) =                    &
    46494671                                                 t_soil_v(l)%var_2d(nzt_soil,m)
     4672                      ENDIF
    46504673                   ENDDO
    46514674                ENDDO
     
    46534676
    46544677                DO  m = 1, surf_lsm_h%ns
    4655                    i = surf_lsm_h%i(m)
    4656                    j = surf_lsm_h%j(m)
    4657 
    4658                    IF ( init_3d%tsoil_3d(0,j,i) /= init_3d%fill_tsoil )        &
    4659                       CALL netcdf_data_input_interpolate(                      &
     4678                   IF ( surf_lsm_h%vegetation_surface(m)  .OR.                 &
     4679                        surf_lsm_h%pavement_surface(m) )  THEN
     4680                      i = surf_lsm_h%i(m)
     4681                      j = surf_lsm_h%j(m)
     4682                     
     4683                      IF ( init_3d%tsoil_3d(0,j,i) /= init_3d%fill_tsoil )     &
     4684                         CALL netcdf_data_input_interpolate(                   &
    46604685                                       t_soil_h%var_2d(nzb_soil:nzt_soil,m),   &
    46614686                                       init_3d%tsoil_3d(:,j,i),                &
     
    46634688                                       nzb_soil, nzt_soil,                     &
    46644689                                       nzb_soil, init_3d%nzs-1 )
    4665                    t_soil_h%var_2d(nzt_soil+1,m) = t_soil_h%var_2d(nzt_soil,m)
     4690!
     4691!--                   Set boundary condition, i.e. deep soil temperature
     4692                      t_soil_h%var_2d(nzt_soil+1,m) = t_soil_h%var_2d(nzt_soil,m)
     4693                   ENDIF
    46664694                ENDDO
    46674695                DO  l = 0, 3
    46684696                   DO  m = 1, surf_lsm_v(l)%ns
    4669 !
    4670 !--                   Note, in contrast to the static input data the dynamic
    4671 !--                   input do not need to be checked whether a grid point
    4672 !--                   is building covered. This is because soil data in the
    4673 !--                   dynamic input is provided for the whole domain. 
    4674                       i = surf_lsm_v(l)%i(m)
    4675                       j = surf_lsm_v(l)%j(m)
    4676 
    4677                       IF ( init_3d%tsoil_3d(0,j,i) /= init_3d%fill_tsoil )     &
    4678                          CALL netcdf_data_input_interpolate(                   &
     4697                      IF ( surf_lsm_v(l)%vegetation_surface(m)  .OR.           &
     4698                           surf_lsm_v(l)%pavement_surface(m) )  THEN
     4699!
     4700!--                      Note, in contrast to the static input data the dynamic
     4701!--                      input do not need to be checked whether a grid point
     4702!--                      is building covered. This is because soil data in the
     4703!--                      dynamic input is provided for the whole domain. 
     4704                         i = surf_lsm_v(l)%i(m)
     4705                         j = surf_lsm_v(l)%j(m)
     4706                         
     4707                         IF ( init_3d%tsoil_3d(0,j,i) /= init_3d%fill_tsoil )  &
     4708                            CALL netcdf_data_input_interpolate(                &
    46794709                                       t_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),&
    46804710                                       init_3d%tsoil_3d(:,j,i),                &
     
    46824712                                       nzb_soil, nzt_soil,                     &
    46834713                                       nzb_soil, init_3d%nzs-1 )
    4684                       t_soil_v(l)%var_2d(nzt_soil+1,m) =                       &
     4714!
     4715!--                      Set boundary condition, i.e. deep soil temperature
     4716                         t_soil_v(l)%var_2d(nzt_soil+1,m) =                    &
    46854717                                                 t_soil_v(l)%var_2d(nzt_soil,m)
     4718                      ENDIF
    46864719                   ENDDO
    46874720                ENDDO
     
    47104743                     surf_lsm_v(l)%pavement_surface(m) )  THEN
    47114744                   DO  k = nzb_soil, nzt_soil
    4712                       IF ( m_soil_v(l)%var_2d(k,m) > surf_lsm_v(l)%m_sat(k,m) )  &
     4745                      IF ( m_soil_v(l)%var_2d(k,m) > surf_lsm_v(l)%m_sat(k,m) )&
    47134746                      THEN
    4714                          WRITE( message_string, * )                               &
     4747                         WRITE( message_string, * )                            &
    47154748                            'soil moisture is higher than ' //                 &
    47164749                            'its saturation value at (k,j,i) ', k,             &
Note: See TracChangeset for help on using the changeset viewer.