14 use mo_kind,
only : i4, dp
80 subroutine pet_correctbylai(param, nodata, LCOVER0, LAI0, mask0, cell_id0, upp_row_L1, low_row_L1, lef_col_L1, &
81 rig_col_L1, nL0_in_L1, L1_petLAIcorFactor)
89 real(dp),
dimension(5),
intent(in) :: param
92 real(dp),
intent(in) :: nodata
95 integer(i4),
dimension(:),
intent(in) :: lcover0
98 real(dp),
dimension(:, :),
intent(in) :: lai0
101 logical,
dimension(:, :),
intent(in) :: mask0
104 integer(i4),
dimension(:),
intent(in) :: cell_id0
107 integer(i4),
dimension(:),
intent(in) :: upp_row_l1
110 integer(i4),
dimension(:),
intent(in) :: low_row_l1
113 integer(i4),
dimension(:),
intent(in) :: lef_col_l1
116 integer(i4),
dimension(:),
intent(in) :: rig_col_l1
119 integer(i4),
dimension(:),
intent(in) :: nl0_in_l1
122 real(dp),
dimension(:, :),
intent(inout) :: l1_petlaicorfactor
125 real(dp),
dimension(size(LCOVER0, 1), size(LAI0, 2)) :: petlaicorfactor_0
128 integer(i4) :: kk, tt
140 do kk = 1,
size(lcover0, 1)
147 petlaicorfactor_0(kk, :) = param(1) + (param(4) * (1.0_dp - exp(param(5) * lai0(kk, :))))
149 petlaicorfactor_0(kk, :) = param(2) + (param(4) * (1.0_dp - exp(param(5) * lai0(kk, :))))
151 petlaicorfactor_0(kk, :) = param(3) + (param(4) * (1.0_dp - exp(param(5) * lai0(kk, :))))
158 do tt = 1,
size(lai0, 2)
160 lef_col_l1, rig_col_l1, cell_id0, mask0, nodata, petlaicorfactor_0(:, tt))
220 integer(i4),
dimension(:),
intent(in) :: id0
223 real(dp),
dimension(:),
intent(in) :: latitude_l0
226 real(dp),
intent(in) :: nodata
229 real(dp),
dimension(3),
intent(in) :: param
232 real(dp),
dimension(:),
intent(in) :: asp0
235 real(dp),
dimension(:),
intent(out) :: fasp0
238 real(dp),
dimension(size(id0, 1)) :: fasp0s
240 logical,
dimension(size(id0, 1)) :: mask_north_hemisphere_l0
242 real(dp) :: tmp_maxcorrectionfactorpet
245 mask_north_hemisphere_l0 = merge(.true., .false., latitude_l0 .gt. 0.0_dp)
247 tmp_maxcorrectionfactorpet = param(1) + param(2)
252 param(1) + (tmp_maxcorrectionfactorpet - param(1)) / param(3) * asp0, &
253 param(1) + (tmp_maxcorrectionfactorpet - param(1)) / (360._dp - param(3)) * (360._dp - asp0), &
256 fasp0 = merge(fasp0, nodata, id0 /= int(nodata, i4))
262 param(1) + (tmp_maxcorrectionfactorpet - param(1)) / (360._dp - param(3)) * (360._dp - asp0), &
263 param(1) + (tmp_maxcorrectionfactorpet - param(1)) / param(3) * asp0, &
265 fasp0s = merge(fasp0s, nodata, id0 /= int(nodata, i4))
269 fasp0 = merge(fasp0, fasp0s, mask_north_hemisphere_l0)
312 Rig_col_L1, priestley_taylor_alpha1)
319 real(dp),
dimension(:, :),
intent(in) :: lai0
322 real(dp),
dimension(:),
intent(in) :: param
325 logical,
dimension(:, :),
intent(in) :: mask0
328 real(dp),
intent(in) :: nodata
331 integer(i4),
dimension(:),
intent(in) :: cell_id0
334 integer(i4),
dimension(:),
intent(in) :: nl0_in_l1
337 integer(i4),
dimension(:),
intent(in) :: upp_row_l1
340 integer(i4),
dimension(:),
intent(in) :: low_row_l1
343 integer(i4),
dimension(:),
intent(in) :: lef_col_l1
346 integer(i4),
dimension(:),
intent(in) :: rig_col_l1
349 real(dp),
dimension(:, :),
intent(out) :: priestley_taylor_alpha1
354 real(dp),
dimension(:, :),
allocatable :: priestley_taylor_alpha0
358 allocate(priestley_taylor_alpha0(
size(lai0, 1),
size(lai0, 2))) ; priestley_taylor_alpha0 = nodata
359 priestley_taylor_alpha1 = nodata
361 do tt = 1,
size(lai0, 2)
362 priestley_taylor_alpha0(:, tt) = param(1) + param(2) * lai0(:, tt)
365 lef_col_l1, rig_col_l1, cell_id0, mask0, nodata, priestley_taylor_alpha0(:, tt))
408 Rig_col_L1, bulksurface_resistance1)
416 real(dp),
dimension(:, :),
intent(in) :: lai0
419 real(dp),
intent(in) :: param
422 logical,
dimension(:, :),
intent(in) :: mask0
425 real(dp),
intent(in) :: nodata
428 integer(i4),
dimension(:),
intent(in) :: cell_id0
431 integer(i4),
dimension(:),
intent(in) :: nl0_in_l1
434 integer(i4),
dimension(:),
intent(in) :: upp_row_l1
437 integer(i4),
dimension(:),
intent(in) :: low_row_l1
440 integer(i4),
dimension(:),
intent(in) :: lef_col_l1
443 integer(i4),
dimension(:),
intent(in) :: rig_col_l1
446 real(dp),
dimension(:, :),
intent(out) :: bulksurface_resistance1
452 real(dp),
dimension(:, :),
allocatable :: bulksurface_resistance0
456 allocate(bulksurface_resistance0(
size(lai0, 1),
size(lai0, 2))) ; bulksurface_resistance0 = nodata
457 bulksurface_resistance1 = nodata
460 do tt = 1,
size(lai0, 2)
461 bulksurface_resistance0(:, tt) = param / (lai0(:, tt) / &
467 bulksurface_resistance0(:, tt) = merge(
max_surfresist, bulksurface_resistance0(:, tt), &
471 lef_col_l1, rig_col_l1, cell_id0, mask0, nodata, bulksurface_resistance0(:, tt))
Provides MPR specific constants.
real(dp), parameter, public lai_offset_surfresi
LAI offset for bulk surface resistance formulation.
real(dp), parameter, public lai_factor_surfresi
LAI factor for bulk surface resistance formulation.
real(dp), parameter, public max_surfresist
maximum bulk surface resistance
subroutine, public pet_correctbyasp(id0, latitude_l0, asp0, param, nodata, fasp0)
correction of PET
subroutine, public bulksurface_resistance(lai0, param, mask0, nodata, cell_id0, nl0_in_l1, upp_row_l1, low_row_l1, lef_col_l1, rig_col_l1, bulksurface_resistance1)
Regionalization of bulk surface resistance.
subroutine, public priestley_taylor_alpha(lai0, param, mask0, nodata, cell_id0, nl0_in_l1, upp_row_l1, low_row_l1, lef_col_l1, rig_col_l1, priestley_taylor_alpha1)
Regionalization of priestley taylor alpha.
subroutine, public pet_correctbylai(param, nodata, lcover0, lai0, mask0, cell_id0, upp_row_l1, low_row_l1, lef_col_l1, rig_col_l1, nl0_in_l1, l1_petlaicorfactor)
estimate PET correction factor based on LAI at L1
Module containing upscaling operators.
real(dp) function, dimension(size(nl0_cells_in_l1_cell, 1)), public upscale_arithmetic_mean(nl0_cells_in_l1_cell, l1_upper_rowid_cell, l1_lower_rowid_cell, l1_left_colonid_cell, l1_right_colonid_cell, l0_cellid, mask0, nodata_value, l0_finescale_data)
aritmetic mean
real(dp) function, dimension(size(nl0_cells_in_l1_cell, 1)), public upscale_harmonic_mean(nl0_cells_in_l1_cell, l1_upper_rowid_cell, l1_lower_rowid_cell, l1_left_colonid_cell, l1_right_colonid_cell, l0_cellid, mask0, nodata_value, l0_finescale_data)
harmonic mean