1
1
! > @file
2
2
! ! @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
5
6
6
7
! > Replace undefined values on the model grid with a valid
7
8
! ! value at a nearby neighbor. Undefined values are typically
12
13
! ! not consider valid values at adjacent faces. That is a future
13
14
! ! upgrade.
14
15
! !
16
+ ! ! @note This routine works for fractional categorical fields.
17
+ ! !
15
18
! ! @param[inout] field - input: field before missing values are replaced
16
19
! ! - output: field after missing values are replaced
17
20
! ! @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
20
24
! ! @param[in] tile tile number
21
25
! ! @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 )
24
28
25
29
use mpi
26
30
use esmf
@@ -29,51 +33,28 @@ subroutine search2 (field, mask, idim, jdim, tile, field_name)
29
33
30
34
character (len=* ) :: field_name
31
35
32
- integer , intent (in ) :: idim, jdim, tile
36
+ integer , intent (in ) :: idim, jdim, tile, num_categories
33
37
integer (esmf_kind_i4), intent (in ) :: mask(idim,jdim)
34
38
35
- real (esmf_kind_r4 ), intent (inout ) :: field(idim,jdim,20 )
39
+ real (esmf_kind_r4 ), intent (inout ) :: field(idim,jdim,num_categories )
36
40
37
41
integer :: i, j, krad, ii, jj
38
42
integer :: istart, iend
39
43
integer :: jstart, jend
40
44
integer :: ierr
45
+ integer :: default_category
41
46
42
- real :: default_value
43
47
real (esmf_kind_r4 ), allocatable :: field_save(:,:,:)
44
48
45
49
!- ----------------------------------------------------------------------
46
- ! Set default value .
50
+ ! Set default category .
47
51
!- ----------------------------------------------------------------------
48
52
49
-
50
53
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 )
73
54
case (' soil_type' ) ! soil type
74
- default_value = float( 2 )
55
+ default_category = 3
75
56
case (' vegetation_type' ) ! vegetation type
76
- default_value = float( 3 )
57
+ default_category = 3
77
58
case default
78
59
print * ,' - FATAL ERROR IN ROUTINE SEARCH. UNIDENTIFIED FIELD : ' , field
79
60
call mpi_abort(mpi_comm_world, 77 , ierr)
@@ -83,7 +64,7 @@ subroutine search2 (field, mask, idim, jdim, tile, field_name)
83
64
! Perform search and replace.
84
65
!- ----------------------------------------------------------------------
85
66
86
- allocate (field_save(idim,jdim,20 ))
67
+ allocate (field_save(idim,jdim,num_categories ))
87
68
field_save = field
88
69
89
70
J_LOOP : do j = 1 , jdim
@@ -126,9 +107,9 @@ subroutine search2 (field, mask, idim, jdim, tile, field_name)
126
107
enddo KRAD_LOOP
127
108
128
109
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 .
130
111
131
- write (6 ,101 ) tile,i,j,default_value
112
+ write (6 ,101 ) tile,i,j,default_category
132
113
133
114
endif
134
115
enddo I_LOOP
0 commit comments