Changeset 4118 for palm/trunk/SOURCE/land_surface_model_mod.f90
- Timestamp:
- Jul 25, 2019 4:11:45 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/land_surface_model_mod.f90
r4110 r4118 25 25 ! ----------------- 26 26 ! $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 27 31 ! Relax checks for non-consistent initialization in case static or dynamic 28 32 ! input is provided. For example, soil_temperature or deep_soil_temperature … … 4568 4572 IF ( init_3d%lod_msoil == 1 ) THEN 4569 4573 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( & 4572 4578 m_soil_h%var_2d(nzb_soil:nzt_soil,m), & 4573 4579 init_3d%msoil_1d(:), & … … 4575 4581 nzb_soil, nzt_soil, & 4576 4582 nzb_soil, init_3d%nzs-1 ) 4583 ENDIF 4577 4584 ENDDO 4578 4585 DO l = 0, 3 4579 4586 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( & 4582 4590 m_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),& 4583 4591 init_3d%msoil_1d(:), & … … 4585 4593 nzb_soil, nzt_soil, & 4586 4594 nzb_soil, init_3d%nzs-1 ) 4595 ENDIF 4587 4596 ENDDO 4588 4597 ENDDO … … 4590 4599 4591 4600 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( & 4597 4608 m_soil_h%var_2d(nzb_soil:nzt_soil,m), & 4598 4609 init_3d%msoil_3d(:,j,i), & … … 4600 4611 nzb_soil, nzt_soil, & 4601 4612 nzb_soil, init_3d%nzs-1 ) 4613 ENDIF 4602 4614 ENDDO 4603 4615 DO l = 0, 3 4604 4616 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( & 4615 4629 m_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),& 4616 4630 init_3d%msoil_3d(:,j,i), & … … 4618 4632 nzb_soil, nzt_soil, & 4619 4633 nzb_soil, init_3d%nzs-1 ) 4634 ENDIF 4620 4635 ENDDO 4621 4636 ENDDO … … 4628 4643 IF ( init_3d%lod_tsoil == 1 ) THEN ! change to 1 if provided correctly by INIFOR 4629 4644 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( & 4632 4648 t_soil_h%var_2d(nzb_soil:nzt_soil,m), & 4633 4649 init_3d%tsoil_1d(:), & … … 4635 4651 nzb_soil, nzt_soil, & 4636 4652 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 4638 4657 ENDDO 4639 4658 DO l = 0, 3 4640 4659 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( & 4643 4663 t_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),& 4644 4664 init_3d%tsoil_1d(:), & … … 4646 4666 nzb_soil, nzt_soil, & 4647 4667 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) = & 4649 4671 t_soil_v(l)%var_2d(nzt_soil,m) 4672 ENDIF 4650 4673 ENDDO 4651 4674 ENDDO … … 4653 4676 4654 4677 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( & 4660 4685 t_soil_h%var_2d(nzb_soil:nzt_soil,m), & 4661 4686 init_3d%tsoil_3d(:,j,i), & … … 4663 4688 nzb_soil, nzt_soil, & 4664 4689 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 4666 4694 ENDDO 4667 4695 DO l = 0, 3 4668 4696 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( & 4679 4709 t_soil_v(l)%var_2d(nzb_soil:nzt_soil,m),& 4680 4710 init_3d%tsoil_3d(:,j,i), & … … 4682 4712 nzb_soil, nzt_soil, & 4683 4713 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) = & 4685 4717 t_soil_v(l)%var_2d(nzt_soil,m) 4718 ENDIF 4686 4719 ENDDO 4687 4720 ENDDO … … 4710 4743 surf_lsm_v(l)%pavement_surface(m) ) THEN 4711 4744 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) )& 4713 4746 THEN 4714 WRITE( message_string, * ) 4747 WRITE( message_string, * ) & 4715 4748 'soil moisture is higher than ' // & 4716 4749 'its saturation value at (k,j,i) ', k, &
Note: See TracChangeset
for help on using the changeset viewer.