Skip to content

Commit e90969d

Browse files
Some cleanup to new search routine.
Fixes ufs-community#709.
1 parent b5e90be commit e90969d

File tree

2 files changed

+20
-39
lines changed

2 files changed

+20
-39
lines changed

sorc/sfc_climo_gen.fd/interp2.F90

+1-1
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ subroutine interp2(localpet, method, input_file)
285285
enddo
286286
enddo
287287

288-
call search2 (data_mdl_one_tile, mask_mdl_one_tile, i_mdl, j_mdl, tile, field_names(n))
288+
call search2 (data_mdl_one_tile, mask_mdl_one_tile, i_mdl, j_mdl, num_categories, tile, field_names(n))
289289
! where(mask_mdl_one_tile == 0) data_mdl_one_tile = missing
290290
print*,'after regrid ',data_mdl_one_tile(i_mdl/2,j_mdl/2,:)
291291
call output2 (data_mdl_one_tile, lat_mdl_one_tile, lon_mdl_one_tile, i_mdl, j_mdl, num_categories, tile, t, n)

sorc/sfc_climo_gen.fd/search2.f90

+19-38
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
!> @file
22
!! @brief Replace undefined values on the model grid with a valid
3-
!! value at a nearby neighbor.
4-
!! @author George Gayno @date 2018
3+
!! value at a nearby neighbor. This routine works for fractional
4+
!! categorical fields.
5+
!! @author George Gayno @date 2022
56

67
!> Replace undefined values on the model grid with a valid
78
!! value at a nearby neighbor. Undefined values are typically
@@ -12,15 +13,18 @@
1213
!! not consider valid values at adjacent faces. That is a future
1314
!! upgrade.
1415
!!
16+
!! @note This routine works for fractional categorical fields.
17+
!!
1518
!! @param[inout] field - input: field before missing values are replaced
1619
!! - output: field after missing values are replaced
1720
!! @param[in] mask field bitmap. Field defined where mask=1
18-
!! @param[inout] idim i dimension of tile
19-
!! @param[inout] jdim j dimension of tile
21+
!! @param[in] idim i dimension of tile
22+
!! @param[in] jdim j dimension of tile
23+
!! @param[in] num_categories number of veg/soil categories
2024
!! @param[in] tile tile number
2125
!! @param[in] field_name field name
22-
!! @author George Gayno @date 2018
23-
subroutine search2 (field, mask, idim, jdim, tile, field_name)
26+
!! @author George Gayno @date 2022
27+
subroutine search2 (field, mask, idim, jdim, num_categories, tile, field_name)
2428

2529
use mpi
2630
use esmf
@@ -29,51 +33,28 @@ subroutine search2 (field, mask, idim, jdim, tile, field_name)
2933

3034
character(len=*) :: field_name
3135

32-
integer, intent(in) :: idim, jdim, tile
36+
integer, intent(in) :: idim, jdim, tile, num_categories
3337
integer(esmf_kind_i4), intent(in) :: mask(idim,jdim)
3438

35-
real(esmf_kind_r4), intent(inout) :: field(idim,jdim,20)
39+
real(esmf_kind_r4), intent(inout) :: field(idim,jdim,num_categories)
3640

3741
integer :: i, j, krad, ii, jj
3842
integer :: istart, iend
3943
integer :: jstart, jend
4044
integer :: ierr
45+
integer :: default_category
4146

42-
real :: default_value
4347
real(esmf_kind_r4), allocatable :: field_save(:,:,:)
4448

4549
!-----------------------------------------------------------------------
46-
! Set default value.
50+
! Set default category.
4751
!-----------------------------------------------------------------------
4852

49-
5053
select case (field_name)
51-
case ('substrate_temperature') ! soil substrate_temperature
52-
default_value = 280.0
53-
case ('vegetation_greenness') ! vegetation greenness
54-
default_value = 0.5
55-
case ('maximum_snow_albedo') ! maximum snow albedo
56-
default_value = 0.5
57-
case ('leaf_area_index') ! leaf area index
58-
default_value = 1.0
59-
case ('visible_black_sky_albedo') ! visible black sky albedo
60-
default_value = 0.1
61-
case ('visible_white_sky_albedo') ! visible white sky albedo
62-
default_value = 0.1
63-
case ('near_IR_black_sky_albedo') ! near IR black sky albedo
64-
default_value = 0.2
65-
case ('near_IR_white_sky_albedo') ! near IR white sky albedo
66-
default_value = 0.2
67-
case ('facsf') ! facsf
68-
default_value = 0.5
69-
case ('facwf') ! facwf
70-
default_value = 0.5
71-
case ('slope_type') ! slope type
72-
default_value = float(1)
7354
case ('soil_type') ! soil type
74-
default_value = float(2)
55+
default_category = 3
7556
case ('vegetation_type') ! vegetation type
76-
default_value = float(3)
57+
default_category = 3
7758
case default
7859
print*,'- FATAL ERROR IN ROUTINE SEARCH. UNIDENTIFIED FIELD : ', field
7960
call mpi_abort(mpi_comm_world, 77, ierr)
@@ -83,7 +64,7 @@ subroutine search2 (field, mask, idim, jdim, tile, field_name)
8364
! Perform search and replace.
8465
!-----------------------------------------------------------------------
8566

86-
allocate (field_save(idim,jdim,20))
67+
allocate (field_save(idim,jdim,num_categories))
8768
field_save = field
8869

8970
J_LOOP : do j = 1, jdim
@@ -126,9 +107,9 @@ subroutine search2 (field, mask, idim, jdim, tile, field_name)
126107
enddo KRAD_LOOP
127108

128109
field(i,j,:) = 0.0
129-
field(i,j,nint(default_value)) = 1.0 ! Search failed. Use default value.
110+
field(i,j,default_category) = 1.0 ! Search failed. Use 100% of default category.
130111

131-
write(6,101) tile,i,j,default_value
112+
write(6,101) tile,i,j,default_category
132113

133114
endif
134115
enddo I_LOOP

0 commit comments

Comments
 (0)