[Dart-dev] DART/branches Revision: 11462

dart at ucar.edu dart at ucar.edu
Wed Apr 12 18:46:54 MDT 2017


thoar at ucar.edu
2017-04-12 18:46:54 -0600 (Wed, 12 Apr 2017)
393
this was called scripts_backup/model_mod_140418.f90  (2014 04 18)
original note:
    Add coefg_2003_10D into the original model_mod;
    Replace Ally's ss model with a radiative transfer model using the scheme of Njoku and Chan., 2006. 
    Add subroutine to read soil texture data from restart file;
    Constrain updated first layer soil moisture within 0-porosity (set to 0.5 if missing);




Modified: DART/branches/Tb/models/clm/model_mod.f90
===================================================================
--- DART/branches/Tb/models/clm/model_mod.f90	2017-04-13 00:43:51 UTC (rev 11461)
+++ DART/branches/Tb/models/clm/model_mod.f90	2017-04-13 00:46:54 UTC (rev 11462)
@@ -116,7 +116,7 @@
 character(len=32 ), parameter :: revision = "$Revision$"
 character(len=128), parameter :: revdate  = "$Date$"
 
-character(len=256) :: string1, string2, string3
+character(len=256) :: string1, string2, string3, string4
 logical, save :: module_initialized = .false.
 
 ! Storage for a random sequence for perturbing a single initial state
@@ -158,11 +158,13 @@
 character(len=256) :: clm_restart_filename = 'clm_restart.nc'
 character(len=256) :: clm_history_filename = 'clm_history.nc'
 character(len=256) :: casename = 'clm_dart'
+character(len=256) :: coefg_nc = 'coefg_amsre2003_10D.nc'
 
 character(len=obstypelength) :: clm_state_variables(max_state_variables*num_state_table_columns) = ' '
 
 namelist /model_nml/            &
-   casename,                    &
+   casename,                    & 
+   coefg_nc,                    &
    clm_restart_filename,        &
    clm_history_filename,        &
    output_state_vector,         &
@@ -203,6 +205,20 @@
 ! Properties required for a snow column
 !----------------------------------------------------------------------
 
+
+type soilprops
+   private
+   integer  :: nlayers  ! snow layers
+   real(r4) :: ssm      ! aux_ins(1) surface soil moisture [m3m-3]
+   real(r4) :: stg      ! aux_ins(2) surface layer temperature [k]   
+   real(r4) :: sat      ! aux_ins(3) topsoil porosity
+   real(r4) :: ssand    ! aux_ins(4) soil sand content percentage (0~100)
+   real(r4) :: sclay    ! aux_ins(5) soil clay content percentage (0~100)
+   real(r4) :: scoefg   ! aux_ins(6) background value for coefficient "g"
+end type soilprops
+
+type(soilprops) :: soilcolumn
+
 type snowprops
    private
    integer  :: nlayers         ! aux_ins(1)
@@ -2328,6 +2344,7 @@
 
 ! BOMBPROOFING - check for a vertical dimension for this variable
 if (progvar(ivar)%maxlevels > 1) then
+   write(*,*)'progvar(ivar)%maxlevels = ',progvar(ivar)%maxlevels  !====Long
    write(string1, *)'Variable '//trim(varstring)//' cannot use this routine.'
    write(string2, *)'use get_grid_vertval() instead.'
    call error_handler(E_ERR,'compute_gridcell_value', string1, &
@@ -2732,7 +2749,8 @@
 integer, optional,        intent(in)  :: ncid
 
 integer :: i,j,ii, VarID
-real(r8), allocatable, dimension(:,:) :: org_array
+real(r8), allocatable, dimension(:,:) :: org_array, org_porosity
+real(r8), allocatable, dimension(:)   :: org_watsat
 
 if ( .not. module_initialized ) call static_init_model
 
@@ -2761,6 +2779,8 @@
 if (present(ncid)) then
 
    allocate(org_array(size(data_2d_array,1),size(data_2d_array,2)))
+   allocate(org_porosity(15,size(data_2d_array,2)))      !============Long
+   allocate(org_watsat(size(data_2d_array,2)))           !============Long
 
    call nc_check(nf90_inq_varid(ncid, progvar(ivar)%varname, VarID), &
             'vector_to_2d_prog_var', 'inq_varid '//trim(progvar(ivar)%varname))
@@ -2768,6 +2788,16 @@
    call nc_check(nf90_get_var(ncid, VarID, org_array), &
             'vector_to_2d_prog_var', 'get_var '//trim(progvar(ivar)%varname))
 
+   call nc_check(nf90_inq_varid(ncid, 'WATSAT', VarID), &
+            'vector_to_2d_prog_var', 'inq_varid WATSAT')
+
+   call nc_check(nf90_get_var(ncid, VarID, org_porosity), &
+            'vector_to_2d_prog_var', 'get_var WATSAT')
+
+   ! to convert top layer soil porosity with unit: m3/m3 to kg/m2
+   where((org_porosity>1)) org_porosity=0.5_r8
+   org_watsat=org_porosity(1,:)*(LEVGRND(6)+LEVGRND(7))/2*1000
+
    ! restoring the indeterminate original values
 
    where(data_2d_array == MISSING_R8 ) data_2d_array = org_array
@@ -2781,6 +2811,20 @@
    elseif (trim(progvar(ivar)%varname) == 'ZISNO') then
       where((data_2d_array < 0.0_r8)) data_2d_array = org_array
    elseif (trim(progvar(ivar)%varname) == 'H2OSOI_LIQ') then
+      !===========================================================Long
+      ! Currently, only update the first layer of soil, 
+      ! i.e., the 6th layer in levtot.
+      ! So replace other layers' value with original value.


More information about the Dart-dev mailing list