101 type ( MODEL_DOMAIN_T ),
intent(inout) :: cells
104 logical :: belongs_to_lu( ubound( cells%landuse_code, 1 ) )
105 integer (c_int) :: indx
107 do indx=1, ubound( landuse_code_list, 1 )
110 belongs_to_lu = ( cells%landuse_code == landuse_code_list( indx ) )
121 logical (c_bool),
intent(in) :: cell_selection(:)
122 integer (c_int),
intent(in),
optional :: poly_id
124 integer (c_int) :: lc
125 integer (c_int) :: poly_id_l
126 character (len=10) :: date
127 real (c_float) :: sms_max, rain, fog, irr, runoff, can_evap, ref_et0, &
128 crop_et0, actual_et, recharge, sms_end, snowmelt, &
129 surface_storage_excess, impervious_frac, surface_storage, &
132 if (
present(poly_id) )
then
142 date =
sim_dt%curr%prettydate()
145 sms_max =
mean( cells%soil_storage_max, cell_selection )
146 rain =
mean( cells%rainfall, cell_selection )
147 fog =
mean( cells%fog, cell_selection )
148 irr =
mean( cells%irrigation, cell_selection )
149 runoff =
mean( cells%runoff, cell_selection )
150 can_evap =
mean( cells%interception, cell_selection )
151 ref_et0 =
mean( cells%reference_et0, cell_selection )
152 crop_et0 =
mean( cells%reference_et0 * cells%crop_coefficient_kcb, cell_selection )
153 actual_et_soil =
mean( real( cells%actual_et_soil, c_float), cell_selection )
154 actual_et =
mean( real( cells%actual_et, c_float), cell_selection )
155 recharge =
mean( cells%net_infiltration, cell_selection )
156 sms_end =
mean( cells%soil_storage, cell_selection )
157 surface_storage_excess =
mean( cells%surface_storage_excess, cell_selection )
158 surface_storage =
mean( cells%surface_storage, cell_selection )
159 snowmelt =
mean( cells%snowmelt, cell_selection )
160 impervious_frac = 1.0_c_float -
mean( cells%pervious_fraction, cell_selection )
162 write( unit=
lu, fmt=
"(2a,3(i0,a),15(f12.3,a),f12.3)" ) &
164 poly_id_l,
tab, count( cell_selection),
tab, lc,
tab, &
166 irr,
tab, runoff,
tab, can_evap,
tab, ref_et0,
tab, crop_et0,
tab, &
167 actual_et,
tab, recharge,
tab, sms_end,
tab, surface_storage_excess, &
168 tab, surface_storage,
tab, snowmelt,
tab, impervious_frac, &
179 integer ( c_int) :: int_vector(:)
180 logical :: cell_selection(:)
183 integer (c_int),
dimension(625) :: value
184 integer (c_int),
dimension(625) :: item_count
186 integer (c_int) :: index, index1, index2
187 integer (c_int) :: last
188 integer (c_int) :: majority_value
194 do index1=1, ubound( int_vector, 1 )
197 if ( .not. cell_selection( index1 ) ) cycle
204 if (value(index2) == int_vector( index1 ) )
then
205 item_count( index2 ) = item_count( index2 ) + 1
213 if ( .not. match )
then
215 value( last ) = int_vector( index1 )
216 item_count( last ) = item_count( last ) + 1
221 index = maxloc( item_count, dim=1)
222 majority_value = value( index )
228 function mean( float_vector, cell_selection )
result( mean_value )
230 real (c_float) :: float_vector(:)
231 logical :: cell_selection(:)
232 real (c_float) :: mean_value
235 integer (c_int) :: item_count
237 item_count = count( cell_selection )
239 if ( item_count > 0 )
then
241 mean_value = sum( float_vector, cell_selection ) / real(item_count, c_float)
245 mean_value = -99999.0