Skip to content

Commit 3e147b5

Browse files
Add logic to turn off the landice adjustments when
processing fractional types. Fixes ufs-community#709.
1 parent 2c8161a commit 3e147b5

File tree

3 files changed

+42
-28
lines changed

3 files changed

+42
-28
lines changed

sorc/sfc_climo_gen.fd/interp.F90

+32-22
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ subroutine interp(localpet, method, input_file)
1515
use esmf
1616
use netcdf
1717
use model_grid
18+
use program_setup, only : fract_vegsoil_type
1819
use source_grid
1920
use utils
2021
use mpi
@@ -187,14 +188,16 @@ subroutine interp(localpet, method, input_file)
187188

188189
! These fields are adjusted at landice.
189190

190-
select case (trim(field_names(n)))
191-
case ('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type')
192-
if (localpet == 0) then
193-
allocate(vegt_mdl_one_tile(i_mdl,j_mdl))
194-
else
195-
allocate(vegt_mdl_one_tile(0,0))
196-
endif
197-
end select
191+
if (.not. fract_vegsoil_type) then
192+
select case (trim(field_names(n)))
193+
case ('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type')
194+
if (localpet == 0) then
195+
allocate(vegt_mdl_one_tile(i_mdl,j_mdl))
196+
else
197+
allocate(vegt_mdl_one_tile(0,0))
198+
endif
199+
end select
200+
endif
198201

199202
OUTPUT_LOOP : do tile = 1, num_tiles
200203

@@ -218,30 +221,37 @@ subroutine interp(localpet, method, input_file)
218221
if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) &
219222
call error_handler("IN FieldGather.", rc)
220223

221-
select case (trim(field_names(n)))
222-
case ('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type')
223-
print*,"- CALL FieldGather FOR MODEL GRID VEG TYPE."
224-
call ESMF_FieldGather(vegt_field_mdl, vegt_mdl_one_tile, rootPet=0, tile=tile, rc=rc)
225-
if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) &
224+
if (.not. fract_vegsoil_type) then
225+
select case (trim(field_names(n)))
226+
case ('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type')
227+
print*,"- CALL FieldGather FOR MODEL GRID VEG TYPE."
228+
call ESMF_FieldGather(vegt_field_mdl, vegt_mdl_one_tile, rootPet=0, tile=tile, rc=rc)
229+
if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) &
226230
call error_handler("IN FieldGather.", rc)
227-
end select
231+
end select
232+
endif
228233

229234
if (localpet == 0) then
230235
print*,'- CALL SEARCH FOR TILE ',tile
231236
call search (data_mdl_one_tile, mask_mdl_one_tile, i_mdl, j_mdl, tile, field_names(n))
232-
select case (field_names(n))
233-
case ('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type')
234-
call adjust_for_landice (data_mdl_one_tile, vegt_mdl_one_tile, i_mdl, j_mdl, field_names(n))
235-
end select
237+
if (.not. fract_vegsoil_type) then
238+
select case (field_names(n))
239+
case ('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type')
240+
print*,'before adjust ice ',maxval(vegt_mdl_one_tile),minval(vegt_mdl_one_tile)
241+
call adjust_for_landice (data_mdl_one_tile, vegt_mdl_one_tile, i_mdl, j_mdl, field_names(n))
242+
end select
243+
endif
236244
where(mask_mdl_one_tile == 0) data_mdl_one_tile = missing
237245
call output (data_mdl_one_tile, lat_mdl_one_tile, lon_mdl_one_tile, i_mdl, j_mdl, tile, record, t, n)
238246
endif
239247

240-
if (field_names(n) == 'vegetation_type') then
241-
print*,"- CALL FieldScatter FOR MODEL GRID VEGETATION TYPE."
242-
call ESMF_FieldScatter(vegt_field_mdl, data_mdl_one_tile, rootPet=0, tile=tile, rc=rc)
243-
if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) &
248+
if (.not. fract_vegsoil_type) then
249+
if (field_names(n) == 'vegetation_type') then
250+
print*,"- CALL FieldScatter FOR MODEL GRID VEGETATION TYPE."
251+
call ESMF_FieldScatter(vegt_field_mdl, data_mdl_one_tile, rootPet=0, tile=tile, rc=rc)
252+
if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) &
244253
call error_handler("IN FieldScatter.", rc)
254+
endif
245255
endif
246256

247257
enddo OUTPUT_LOOP

sorc/sfc_climo_gen.fd/model_grid.F90

+9-5
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,16 @@ subroutine define_model_grid(localpet, npets)
164164
if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) &
165165
call error_handler("IN FieldCreate", rc)
166166

167-
print*,"- CALL FieldCreate FOR VEGETATION TYPE INTERPOLATED TO MODEL GRID."
168-
vegt_field_mdl = ESMF_FieldCreate(grid_mdl, &
167+
if (.not. fract_vegsoil_type) then
168+
print*,"- CALL FieldCreate FOR VEGETATION TYPE INTERPOLATED TO MODEL GRID."
169+
vegt_field_mdl = ESMF_FieldCreate(grid_mdl, &
169170
typekind=ESMF_TYPEKIND_R4, &
170171
staggerloc=ESMF_STAGGERLOC_CENTER, &
171172
name="veg type on model grid", &
172173
rc=rc)
173-
if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) &
174+
if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) &
174175
call error_handler("IN FieldCreate", rc)
176+
endif
175177

176178
print*,"- CALL FieldCreate FOR MODEL GRID LATITUDE."
177179
latitude_field_mdl = ESMF_FieldCreate(grid_mdl, &
@@ -399,8 +401,10 @@ subroutine model_grid_cleanup
399401
print*,"- CALL FieldDestroy FOR MODEL GRID DATA FIELD."
400402
call ESMF_FieldDestroy(data_field_mdl,rc=rc)
401403

402-
print*,"- CALL FieldDestroy FOR MODEL GRID VEGETATION TYPE."
403-
call ESMF_FieldDestroy(vegt_field_mdl,rc=rc)
404+
if (ESMF_FieldIsCreated(vegt_field_mdl)) then
405+
print*,"- CALL FieldDestroy FOR MODEL GRID VEGETATION TYPE."
406+
call ESMF_FieldDestroy(vegt_field_mdl,rc=rc)
407+
endif
404408

405409
print*,"- CALL FieldDestroy FOR MODEL GRID LATITUDE."
406410
call ESMF_FieldDestroy(latitude_field_mdl,rc=rc)

sorc/sfc_climo_gen.fd/program_setup.f90

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ module program_setup
4343
integer, public :: halo = 0 !< Number of row/cols defining the lateral
4444
!! boundary halo. Used for regional nests.
4545

46-
logical, public :: fract_vegsoil_type = .true. !< When true, output the percentage of each soil
46+
logical, public :: fract_vegsoil_type = .false. !< When true, output the percentage of each soil
4747
!! and vegetation type category.
4848

4949
public :: read_setup_namelist

0 commit comments

Comments
 (0)