The solution is to modify the METGRID.TBL.ARW.run file that you use in metgrid. Set the ST and SM fields to mimic SOILT and SOILM, as below:
===========================================
name=ST
z_dim_name=num_soilt_levels
derived=yes
fill_lev = 0:SOILT000(200100)
fill_lev = 5:SOILT005(200100)
fill_lev = 20:SOILT020(200100)
fill_lev = 40:SOILT040(200100)
fill_lev = 160:SOILT160(200100)
fill_lev = 300:SOILT300(200100)
===========================================
name=SM
z_dim_name=num_soilm_levels
derived=yes
fill_lev = 0:SOILM000(200100)
fill_lev = 5:SOILM005(200100)
fill_lev = 20:SOILM020(200100)
fill_lev = 40:SOILM040(200100)
fill_lev = 160:SOILM160(200100)
fill_lev = 300:SOILM300(200100)
The issue arises because the contents of st_input are used in module_soil_pre.F (subroutine process_soil_real) to set tmn to the soil level nearest 30 cm depth. Without ST defined in this way, the array contains zeroes. See the below code for an example:
DO j = jts, MIN(jde-1,jte)
DO i = its, MIN(ide-1,ite)
tmn(i,j) = st_input(i,closest_layer+1,j)
END DO
END DO
===========================================
name=ST
z_dim_name=num_soilt_levels
derived=yes
fill_lev = 0:SOILT000(200100)
fill_lev = 5:SOILT005(200100)
fill_lev = 20:SOILT020(200100)
fill_lev = 40:SOILT040(200100)
fill_lev = 160:SOILT160(200100)
fill_lev = 300:SOILT300(200100)
===========================================
name=SM
z_dim_name=num_soilm_levels
derived=yes
fill_lev = 0:SOILM000(200100)
fill_lev = 5:SOILM005(200100)
fill_lev = 20:SOILM020(200100)
fill_lev = 40:SOILM040(200100)
fill_lev = 160:SOILM160(200100)
fill_lev = 300:SOILM300(200100)
The issue arises because the contents of st_input are used in module_soil_pre.F (subroutine process_soil_real) to set tmn to the soil level nearest 30 cm depth. Without ST defined in this way, the array contains zeroes. See the below code for an example:
DO j = jts, MIN(jde-1,jte)
DO i = its, MIN(ide-1,ite)
tmn(i,j) = st_input(i,closest_layer+1,j)
END DO
END DO