6 SUBROUTINE coupling_isba_n (DTCO, UG, U, USS, NAG, CHI, NCHI, DTI, ID, NGB, GB, &
7 ISS, NISS, IG, NIG, IO, S, K, NK, NP, NPE, NDST, SLT, &
8 HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, &
9 KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PZREF, PUREF, PZS, &
10 PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, &
11 PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, &
12 PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, &
13 PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, &
14 PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST )
93 USE modd_co2v_par
, ONLY : xmco2, xspin_co2
96 USE modd_snow_par
, ONLY : xz0sn
106 USE modd_agri
, ONLY : lagrip
107 USE modd_deepsoil
, ONLY : ldeepsoil
113 USE modi_irrigation_update
114 USE modi_add_forecast_to_date_surf
117 USE modi_average_flux
120 USE modi_average_diag_isba_n
121 USE modi_vegetation_evol
122 USE modi_vegetation_update
124 USE modi_subscale_z0eff
127 USE modi_diag_inline_isba_n
128 USE modi_diag_evap_cumul_isba_n
129 USE modi_diag_misc_isba_n
130 USE modi_reproj_diag_isba_n
132 USE modi_update_rad_isba_n
133 USE modi_deepsoil_update
134 USE modi_isba_sgh_update
135 USE modi_isba_flood_properties
136 USE modi_diag_cpl_esm_isba
137 USE modi_hydro_glacier
139 USE modi_carbon_spinup
142 USE modi_average_diag_evap_isba_n
143 USE modi_average_diag_misc_isba_n
145 USE modi_soilemisno_n
148 USE modi_coupling_dst_n
149 USE modi_coupling_surf_topd
150 USE modi_isba_budget_init
152 USE modi_unpack_diag_patch_n
164 TYPE(
sso_t),
INTENT(INOUT) :: USS
173 TYPE(
sso_t),
INTENT(INOUT) :: ISS
174 TYPE(
sso_np_t),
INTENT(INOUT) :: NISS
175 TYPE(
grid_t),
INTENT(INOUT) :: IG
184 TYPE(
dst_np_t),
INTENT(INOUT) :: NDST
185 TYPE(
slt_t),
INTENT(INOUT) :: SLT
187 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
188 CHARACTER(LEN=1),
INTENT(IN) :: HCOUPLING
191 INTEGER,
INTENT(IN) :: KYEAR
192 INTEGER,
INTENT(IN) :: KMONTH
193 INTEGER,
INTENT(IN) :: KDAY
194 REAL,
INTENT(IN) :: PTIME
195 INTEGER,
INTENT(IN) :: KI
196 INTEGER,
INTENT(IN) :: KSV
197 INTEGER,
INTENT(IN) :: KSW
198 REAL,
DIMENSION(KI),
INTENT(IN) :: PTSUN
199 REAL,
INTENT(IN) :: PTSTEP
200 REAL,
DIMENSION(KI),
INTENT(IN) :: PZREF
201 REAL,
DIMENSION(KI),
INTENT(IN) :: PUREF
203 REAL,
DIMENSION(KI),
INTENT(IN) :: PTA
204 REAL,
DIMENSION(KI),
INTENT(IN) :: PQA
205 REAL,
DIMENSION(KI),
INTENT(IN) :: PRHOA
206 REAL,
DIMENSION(KI,KSV),
INTENT(IN) :: PSV
209 CHARACTER(LEN=6),
DIMENSION(KSV),
INTENT(IN):: HSV
210 REAL,
DIMENSION(KI),
INTENT(IN) :: PU
211 REAL,
DIMENSION(KI),
INTENT(IN) :: PV
212 REAL,
DIMENSION(KI,KSW),
INTENT(IN) :: PDIR_SW
214 REAL,
DIMENSION(KI,KSW),
INTENT(IN) :: PSCA_SW
216 REAL,
DIMENSION(KSW),
INTENT(IN) :: PSW_BANDS
217 REAL,
DIMENSION(KI),
INTENT(IN) :: PZENITH
218 REAL,
DIMENSION(KI),
INTENT(IN) :: PZENITH2
219 REAL,
DIMENSION(KI),
INTENT(IN) :: PLW
221 REAL,
DIMENSION(KI),
INTENT(IN) :: PPS
222 REAL,
DIMENSION(KI),
INTENT(IN) :: PPA
223 REAL,
DIMENSION(KI),
INTENT(IN) :: PZS
224 REAL,
DIMENSION(KI),
INTENT(IN) :: PCO2
225 REAL,
DIMENSION(KI),
INTENT(IN) :: PSNOW
226 REAL,
DIMENSION(KI),
INTENT(IN) :: PRAIN
229 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFTH
230 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFTQ
231 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFU
232 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFV
233 REAL,
DIMENSION(KI),
INTENT(OUT) :: PSFCO2
234 REAL,
DIMENSION(KI,KSV),
INTENT(OUT):: PSFTS
236 REAL,
DIMENSION(KI),
INTENT(OUT) :: PTRAD
237 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: PDIR_ALB
238 REAL,
DIMENSION(KI,KSW),
INTENT(OUT):: PSCA_ALB
239 REAL,
DIMENSION(KI),
INTENT(OUT) :: PEMIS
241 REAL,
DIMENSION(KI),
INTENT(OUT) :: PTSURF
242 REAL,
DIMENSION(KI),
INTENT(OUT) :: PZ0
243 REAL,
DIMENSION(KI),
INTENT(OUT) :: PZ0H
244 REAL,
DIMENSION(KI),
INTENT(OUT) :: PQSURF
246 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEW_A_COEF
247 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEW_B_COEF
248 REAL,
DIMENSION(KI),
INTENT(IN) :: PPET_A_COEF
249 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEQ_A_COEF
250 REAL,
DIMENSION(KI),
INTENT(IN) :: PPET_B_COEF
251 REAL,
DIMENSION(KI),
INTENT(IN) :: PPEQ_B_COEF
252 CHARACTER(LEN=2),
INTENT(IN) :: HTEST
262 TYPE(
sso_t),
POINTER :: ISSK
264 REAL,
DIMENSION(KI) :: ZWIND
265 REAL,
DIMENSION(KI) :: ZDIR
266 REAL,
DIMENSION(KI) :: ZEXNA
267 REAL,
DIMENSION(KI) :: ZEXNS
268 REAL,
DIMENSION(KI) :: ZALFA
269 REAL,
DIMENSION(KI) :: ZQA
270 REAL,
DIMENSION(KI) :: ZCO2
272 REAL,
DIMENSION(KI) :: ZPEQ_A_COEF
273 REAL,
DIMENSION(KI) :: ZPEQ_B_COEF
279 REAL,
DIMENSION(KI,IO%NPATCH) :: ZSFTH_TILE
280 REAL,
DIMENSION(KI,IO%NPATCH) :: ZSFTQ_TILE
281 REAL,
DIMENSION(KI,IO%NPATCH) :: ZSFCO2_TILE
282 REAL,
DIMENSION(KI,IO%NPATCH) :: ZSFU_TILE
283 REAL,
DIMENSION(KI,IO%NPATCH) :: ZSFV_TILE
284 REAL,
DIMENSION(KI,IO%NPATCH) :: ZTRAD_TILE
285 REAL,
DIMENSION(KI,IO%NPATCH) :: ZEMIS_TILE
286 REAL,
DIMENSION(KI,IO%NPATCH) :: ZTSURF_TILE
287 REAL,
DIMENSION(KI,IO%NPATCH) :: ZZ0_TILE
288 REAL,
DIMENSION(KI,IO%NPATCH) :: ZZ0H_TILE
289 REAL,
DIMENSION(KI,IO%NPATCH) :: ZQSURF_TILE
290 REAL,
DIMENSION(KI,KSW,IO%NPATCH) :: ZDIR_ALB_TILE
291 REAL,
DIMENSION(KI,KSW,IO%NPATCH) :: ZSCA_ALB_TILE
292 REAL,
DIMENSION(KI,KSV,IO%NPATCH) :: ZSFTS_TILE
294 REAL,
DIMENSION(KI, IO%NPATCH) :: ZCPL_DRAIN
295 REAL,
DIMENSION(KI, IO%NPATCH) :: ZCPL_RUNOFF
296 REAL,
DIMENSION(KI, IO%NPATCH) :: ZCPL_EFLOOD
297 REAL,
DIMENSION(KI, IO%NPATCH) :: ZCPL_PFLOOD
298 REAL,
DIMENSION(KI, IO%NPATCH) :: ZCPL_IFLOOD
299 REAL,
DIMENSION(KI, IO%NPATCH) :: ZCPL_ICEFLUX
303 REAL,
DIMENSION(KI, IO%NPATCH) :: ZSW_FORBIO
305 REAL :: ZCONVERTFACM0_SLT, ZCONVERTFACM0_DST
306 REAL :: ZCONVERTFACM3_SLT, ZCONVERTFACM3_DST
307 REAL :: ZCONVERTFACM6_SLT, ZCONVERTFACM6_DST
314 INTEGER :: JSV, IDST, IMOMENT, II, IMASK, JI
315 INTEGER :: JLAYER, JMODE, JSV_IDX
319 INTEGER :: JJ, IBEG, IEND, ISIZE
320 LOGICAL :: GUPDATED, GALB
322 REAL(KIND=JPRB) :: ZHOOK_HANDLE
325 IF (
lhook)
CALL dr_hook(
'COUPLING_ISBA_N',0,zhook_handle)
326 IF (htest/=
'OK')
THEN 327 CALL abor1_sfx(
'COUPLING_ISBAN: FATAL ERROR DURING ARGUMENT TRANSFER')
344 zdir_alb_tile(:,:,:) =
xundef 345 zsca_alb_tile(:,:,:) =
xundef 351 zsfts_tile(:,:,:) = 0.
353 zcpl_drain(:,:) = 0.0
354 zcpl_runoff(:,:) = 0.0
355 zcpl_eflood(:,:) = 0.0
356 zcpl_pflood(:,:) = 0.0
357 zcpl_iflood(:,:) = 0.0
358 zcpl_iceflux(:,:) = 0.0
371 zqa(jj) = pqa(jj) / prhoa(jj)
372 zpeq_a_coef(jj) = ppeq_a_coef(jj) / prhoa(jj)
373 zpeq_b_coef(jj) = ppeq_b_coef(jj) / prhoa(jj)
375 zco2(jj) = pco2(jj) / prhoa(jj)
384 zwind(jj) = sqrt(pu(jj)**2+pv(jj)**2)
388 IF (zwind(jj)>0.) zdir(jj)=atan2(pu(jj),pv(jj))
392 zalfa(jj) = zdir(jj) - iss%XZ0EFFJPDIR(jj) *
xpi/180.
394 IF (zalfa(jj)<-
xpi) zalfa(jj) = zalfa(jj) + 2.*
xpi 395 IF (zalfa(jj)>=
xpi) zalfa(jj) = zalfa(jj) - 2.*
xpi 405 IF (lagrip .AND. (io%CPHOTO==
'NIT'.OR. io%CPHOTO==
'NCB') )
THEN 429 IF(io%LSPINUPCARBS.OR.io%LSPINUPCARBW)
THEN 431 ispinend = io%NNBYEARSPINS-nint(io%NNBYEARSPINS*xspin_co2)
433 io%LAGRI_TO_GRASS = .false.
435 IF ( io%LSPINUPCARBS .AND. (io%NNBYEARSOLD <= ispinend) )
THEN 437 io%LAGRI_TO_GRASS = .true.
439 zco2(:) = io%XCO2_START * 1.e-6 * xmco2 /
xmd 441 ELSEIF(io%LSPINUPCARBS .AND. (io%NNBYEARSOLD > ispinend) .AND. (io%NNBYEARSOLD <= io%NNBYEARSPINS) )
THEN 443 zspinco2 = io%XCO2_START + (io%XCO2_END-io%XCO2_START) * &
444 REAL(IO%NNBYEARSOLD - ISPINEND) /
REAL(io%nnbyearspins - ispinend)
446 zco2(:) = zspinco2 * 1.e-6 * xmco2 /
xmd 458 s%TTIME%TIME = s%TTIME%TIME + ptstep
469 patch_loop:
DO jp=1,io%NPATCH
471 IF (np%AL(jp)%NSIZE_P == 0 ) cycle
481 CALL treat_patch(nk%AL(jp), np%AL(jp), npe%AL(jp), niss%AL(jp), nag%AL(jp), &
482 nig%AL(jp), nchi%AL(jp), ndst%AL(jp), id%ND%AL(jp), id%NDC%AL(jp), &
483 id%NDE%AL(jp), id%NDEC%AL(jp), id%NDM%AL(jp), ngb%AL(jp) )
493 zcpl_eflood, zcpl_pflood, zcpl_iflood, zcpl_iceflux )
506 IF (io%CPHOTO==
'NIT'.OR.io%CPHOTO==
'NCB') galb = .true.
508 CALL vegetation_update(dtco, dti, ig%NDIM, io, nk%AL(jp), np%AL(jp), npe%AL(jp), jp, &
509 ptstep, s%TTIME, s%XCOVER, s%LCOVER, lagrip, &
510 'NAT', galb, niss%AL(jp), gupdated )
515 IF(io%LPERTSURF.AND.gupdated)
THEN 526 pek%XVEG(ji) = s%XPERTVEG(imask)
527 pek%XLAI(ji) = s%XPERTLAI(imask)
528 pek%XCV (ji) = s%XPERTCV (imask)
530 IF(pek%XALBNIR(ji)/=
xundef) pek%XALBNIR(ji) = pek%XALBNIR(ji) *( 1.+ s%XPERTALB(imask) )
531 IF(pek%XALBVIS(ji)/=
xundef) pek%XALBVIS(ji) = pek%XALBVIS(ji) *( 1.+ s%XPERTALB(imask) )
532 IF(pek%XALBUV(ji)/=
xundef) pek%XALBUV (ji) = pek%XALBUV (ji) *( 1.+ s%XPERTALB(imask) )
533 IF(pek%XZ0(ji)/=
xundef) pek%XZ0(ji) = pek%XZ0(ji) *( 1.+ s%XPERTZ0(imask) )
534 IF(issk%XZ0EFFIP(ji)/=
xundef) issk%XZ0EFFIP(ji) = issk%XZ0EFFIP(ji)*( 1.+ s%XPERTZ0(imask) )
535 IF(issk%XZ0EFFIM(ji)/=
xundef) issk%XZ0EFFIM(ji) = issk%XZ0EFFIM(ji)*( 1.+ s%XPERTZ0(imask) )
536 IF(issk%XZ0EFFJP(ji)/=
xundef) issk%XZ0EFFJP(ji) = issk%XZ0EFFJP(ji)*( 1.+ s%XPERTZ0(imask) )
537 IF(issk%XZ0EFFJM(ji)/=
xundef) issk%XZ0EFFJM(ji) = issk%XZ0EFFJM(ji)*( 1.+ s%XPERTZ0(imask) )
547 CALL average_flux(s%XPATCH, zsfth_tile, zsftq_tile, zsfts_tile, &
548 zsfco2_tile, zsfu_tile, zsfv_tile, psfth, psftq,&
549 psfts, psfco2, psfu, psfv )
558 CALL average_phy(s%XPATCH, ztsurf_tile, zz0_tile, zz0h_tile, &
559 zqsurf_tile, puref, pzref, ptsurf, pz0, pz0h, pqsurf )
567 CALL update_rad_isba_n(io, s, nk%AL(jp), np%AL(jp), npe%AL(jp), jp, pzenith2, psw_bands, &
568 zdir_alb_tile(:,:,jp), zsca_alb_tile(:,:,jp), &
569 zemis_tile(:,jp), pdir_sw, psca_sw )
572 CALL average_rad(s%XPATCH, zdir_alb_tile, zsca_alb_tile, zemis_tile, &
573 ztrad_tile, pdir_alb, psca_alb, s%XEMIS_NAT, s%XTSRAD_NAT )
583 id%O%LSURF_BUDGETC, io%LCANOPY, puref, pzref, psfco2, ptrad)
588 io%NPATCH, io%LGLACIER, io%LMEB_PATCH, ptstep, prain, psnow)
597 io, s, k, nk, np, npe, ug, u, hprogram, u%NDIM_FULL)
607 IF (chi%SVI%NBEQ>0 .AND. chi%LCH_BIO_FLUX)
THEN 608 CALL ch_bvocem_n(chi%SVI, ngb, gb, io, s, np, npe, zsw_forbio, prhoa, psfts)
612 IF (chi%LCH_NO_FLUX)
THEN 618 IF (
lhook)
CALL dr_hook(
'COUPLING_ISBA_N',1,zhook_handle)
622 SUBROUTINE treat_patch(KK, PK, PEK, ISSK, AGK, GK, CHIK, DSTK, DK, DCK, DEK, DECK, DMK, GBK )
640 TYPE(
sso_t),
INTENT(INOUT) :: ISSK
641 TYPE(
agri_t),
INTENT(INOUT) :: AGK
642 TYPE(
grid_t),
INTENT(INOUT) :: GK
644 TYPE(
dst_t),
INTENT(INOUT) :: DSTK
645 TYPE(
diag_t),
INTENT(INOUT) :: DK
646 TYPE(
diag_t),
INTENT(INOUT) :: DCK
652 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_ZREF
653 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_UREF
654 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_U
655 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_V
656 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_WIND
657 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_DIR
658 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_QA
659 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_TA
660 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_CO2
661 REAL,
DIMENSION(PK%NSIZE_P,KSV) :: ZP_SV
662 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_ZENITH
663 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_PEW_A_COEF
664 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_PEW_B_COEF
665 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_PET_A_COEF
666 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_PET_B_COEF
667 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_PEQ_A_COEF
668 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_PEQ_B_COEF
669 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_RAIN
670 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_SNOW
671 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_LW
672 REAL,
DIMENSION(PK%NSIZE_P,ISWB) :: ZP_DIR_SW
673 REAL,
DIMENSION(PK%NSIZE_P,ISWB) :: ZP_SCA_SW
674 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_PS
675 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_PA
676 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_ZS
677 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_SFTQ
678 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_SFTH
679 REAL,
DIMENSION(PK%NSIZE_P,KSV) :: ZP_SFTS
680 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_SFCO2
681 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_USTAR
682 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_SFU
683 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_SFV
684 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_TRAD
685 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_TSURF
686 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_Z0
687 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_Z0H
688 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_QSURF
692 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_RHOA
693 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_EXNA
694 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_EXNS
695 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_ALFA
699 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_ALBNIR_TVEG
700 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_ALBNIR_TSOIL
701 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_ALBVIS_TVEG
702 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_ALBVIS_TSOIL
703 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_EMIS
704 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_GLOBAL_SW
705 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_SLOPE_COS
707 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_Z0FLOOD
708 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_FFGNOS
709 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_FFVNOS
711 REAL,
DIMENSION(PK%NSIZE_P,IO%NNBIOMASS) :: ZP_RESP_BIOMASS_INST
715 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_AC_AGG
716 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_HU_AGG
720 REAL,
DIMENSION(PK%NSIZE_P) :: ZPALPHAN
721 REAL,
DIMENSION(PK%NSIZE_P) :: ZSNOWDEPTH
722 REAL,
DIMENSION(PK%NSIZE_P) :: ZZ0G_WITHOUT_SNOW
723 REAL,
DIMENSION(PK%NSIZE_P) :: ZZ0_MEBV
724 REAL,
DIMENSION(PK%NSIZE_P) :: ZZ0H_MEBV
725 REAL,
DIMENSION(PK%NSIZE_P) :: ZZ0EFF_MEBV
726 REAL,
DIMENSION(PK%NSIZE_P) :: ZZ0_MEBN
727 REAL,
DIMENSION(PK%NSIZE_P) :: ZZ0H_MEBN
728 REAL,
DIMENSION(PK%NSIZE_P) :: ZZ0EFF_MEBN
730 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_MEB_SCA_SW
734 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_WG_INI
735 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_WGI_INI
736 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_WR_INI
737 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_SWE_INI
741 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_DEEP_FLUX
742 REAL,
DIMENSION(PK%NSIZE_P) :: ZP_TDEEP_A
743 REAL,
DIMENSION(PK%NSIZE_P) :: ZIRRIG_GR
748 INTEGER :: JJ, JI, JK
749 REAL(KIND=JPRB) :: ZHOOK_HANDLE
751 IF (
lhook)
CALL dr_hook(
'COUPLING_ISBA_n:TREAT_PATCH',0,zhook_handle)
757 IF (io%NPATCH==1)
THEN 758 zp_zenith(:) = pzenith(:)
759 zp_zref(:) = pzref(:)
760 zp_uref(:) = puref(:)
761 zp_wind(:) = zwind(:)
768 zp_sv(:,:) = psv(:,:)
769 zp_pew_a_coef(:) = ppew_a_coef(:)
770 zp_pew_b_coef(:) = ppew_b_coef(:)
771 zp_pet_a_coef(:) = ppet_a_coef(:)
772 zp_pet_b_coef(:) = ppet_b_coef(:)
773 zp_peq_a_coef(:) = zpeq_a_coef(:)
774 zp_peq_b_coef(:) = zpeq_b_coef(:)
775 zp_rain(:) = prain(:)
776 zp_snow(:) = psnow(:)
778 zp_dir_sw(:,:) = pdir_sw(:,:)
779 zp_sca_sw(:,:) = psca_sw(:,:)
784 zp_rhoa(:) = prhoa(:)
785 zp_exna(:) = zexna(:)
786 zp_exns(:) = zexns(:)
787 zp_alfa(:) = zalfa(:)
793 zp_zenith(jj) = pzenith(ji)
794 zp_zref(jj) = pzref(ji)
795 zp_uref(jj) = puref(ji)
796 zp_wind(jj) = zwind(ji)
799 zp_dir(jj) = zdir(ji)
802 zp_co2(jj) = zco2(ji)
803 zp_pew_a_coef(jj) = ppew_a_coef(ji)
804 zp_pew_b_coef(jj) = ppew_b_coef(ji)
805 zp_pet_a_coef(jj) = ppet_a_coef(ji)
806 zp_pet_b_coef(jj) = ppet_b_coef(ji)
807 zp_peq_a_coef(jj) = zpeq_a_coef(ji)
808 zp_peq_b_coef(jj) = zpeq_b_coef(ji)
809 zp_rain(jj) = prain(ji)
810 zp_snow(jj) = psnow(ji)
816 zp_rhoa(jj) = prhoa(ji)
817 zp_exna(jj) = zexna(ji)
818 zp_exns(jj) = zexns(ji)
819 zp_alfa(jj) = zalfa(ji)
827 zp_sv(jj,jk) = psv(ji,jk)
831 DO jk=1,
SIZE(pdir_sw,2)
836 zp_dir_sw(jj,jk) = pdir_sw(ji,jk)
837 zp_sca_sw(jj,jk) = psca_sw(ji,jk)
846 gmeb = io%LMEB_PATCH(jp)
853 zp_slope_cos(:) = 1./sqrt(1.+issk%XSSO_SLOPE(:)**2)
854 IF(
lnosof) zp_slope_cos(:) = 1.0
882 zsnowdepth(:) =
sum(pek%TSNOW%WSNOW(:,:)/pek%TSNOW%RHO(:,:),2)
883 zpalphan(:) =
mebpalphan(zsnowdepth,pek%XH_VEG(:))
892 CALL z0eff(pek%TSNOW%SCHEME, gmeb, zp_alfa, zp_zref, zp_uref, &
893 pek%XZ0, issk%XZ0REL, pek%XPSN, zpalphan, pek%XZ0LITTER, &
894 pek%TSNOW%WSNOW(:,1), issk, kk%XFF, zp_z0flood, pk%XZ0_O_Z0H, &
895 dk%XZ0, dk%XZ0H, dk%XZ0EFF, zz0g_without_snow, &
896 zz0_mebv, zz0h_mebv, zz0eff_mebv, zz0_mebn, zz0h_mebn, zz0eff_mebn )
916 CALL isba_albedo(pek, io%LTR_ML, gmeb, zp_dir_sw, zp_sca_sw, &
917 psw_bands, iswb, kk%XALBF, kk%XFFV, kk%XFFG, zp_global_sw, &
918 zp_meb_sca_sw, zp_albnir_tveg, zp_albvis_tveg, &
919 zp_albnir_tsoil, zp_albvis_tsoil )
925 CALL isba_budget_init(id%DE%LWATER_BUDGET, io%CISBA, pek, pk%XDG, pk%XDZG, &
926 zp_wg_ini, zp_wgi_ini, zp_wr_ini, zp_swe_ini )
933 CALL isba(io, kk, pk, pek, gk, agk, dk, dek, dmk, &
934 s%TTIME, s%XPOI, s%XABC, gbk%XIACAN, gmeb, ptstep,
cimplicit_wind, &
935 zp_zref, zp_uref, zp_slope_cos, zp_ta, zp_qa, zp_exna, zp_rhoa, &
936 zp_ps, zp_exns, zp_rain, zp_snow, zp_zenith, zp_meb_sca_sw, zp_global_sw, zp_lw, &
937 zp_wind, zp_pew_a_coef, zp_pew_b_coef, zp_pet_a_coef, zp_peq_a_coef, &
938 zp_pet_b_coef, zp_peq_b_coef, zp_albnir_tveg, zp_albvis_tveg, zp_albnir_tsoil, &
939 zp_albvis_tsoil, zpalphan, zz0g_without_snow, zz0_mebv, zz0h_mebv, zz0eff_mebv, &
940 zz0_mebn, zz0h_mebn, zz0eff_mebn, zp_tdeep_a, zp_co2, zp_ffgnos, zp_ffvnos, &
941 zp_emis, zp_ustar, zp_ac_agg, zp_hu_agg, zp_resp_biomass_inst, zp_deep_flux, &
951 IF(io%LGLACIER)
CALL hydro_glacier(ptstep, zp_snow, pek, dek%XICEFLUX)
957 CALL isba_budget(io, pk, pek, dek, id%DE%LWATER_BUDGET, ptstep, zp_wg_ini, zp_wgi_ini, &
958 zp_wr_ini, zp_swe_ini, zp_rain, zp_snow, dk%XEVAP )
964 IF (io%CALBEDO==
'EVOL' .AND. io%LECOCLIMAP)
THEN 965 CALL soil_albedo(io%CALBEDO, kk%XWSAT(:,1),pek%XWG(:,1), kk, pek,
"ALL")
967 CALL albedo(io%CALBEDO, pek )
974 IF (io%CPHOTO==
'NIT' .OR. io%CPHOTO==
'NCB')
THEN 975 CALL vegetation_evol(io, dti, pk, pek, lagrip, ptstep, kmonth, kday, ptime, gk%XLAT, &
976 zp_rhoa, zp_co2, issk, zp_resp_biomass_inst, &
979 pswdir=zp_global_sw )
987 dek%XRESP_ECO (:) = 0.
988 dek%XRESP_AUTO(:) = 0.
990 IF ( io%CPHOTO/=
'NON' .AND. io%CRESPSL/=
'NON' .AND. any(pek%XLAI(:)/=
xundef) )
THEN 991 CALL carbon_evol(io, kk, pk, pek, dek, ptstep, zp_rhoa, zp_resp_biomass_inst )
994 zp_sfco2(:) = dek%XRESP_ECO(:) - dek%XGPP(:)
997 IF ( io%CPHOTO/=
'NON')
THEN 998 dek%XGPP(:) = dek%XGPP(:) * zp_rhoa(:)
999 dek%XRESP_ECO(:) = dek%XRESP_ECO(:) * zp_rhoa(:)
1000 dek%XRESP_AUTO(:) = dek%XRESP_AUTO(:) * zp_rhoa(:)
1007 CALL subscale_z0eff(issk,pek%XZ0(:),.false.,omask=(pek%TSNOW%WSNOW(:,1)==0. .AND. pek%XPSN(:)>0.) )
1013 zp_sfth(:) = dk%XH(:)
1014 zp_sftq(:) = dk%XEVAP(:)
1019 zp_sfu(:) = - zp_u(:)/zp_wind(:) * zp_ustar(:)**2 * zp_rhoa(:)
1020 zp_sfv(:) = - zp_v(:)/zp_wind(:) * zp_ustar(:)**2 * zp_rhoa(:)
1034 IF (chi%SVI%NBEQ>0)
THEN 1035 IF( chi%CCH_DRY_DEP ==
"WES89")
THEN 1037 ibeg = chi%SVI%NSV_CHSBEG
1038 iend = chi%SVI%NSV_CHSEND
1039 isize = iend - ibeg + 1
1042 zp_ustar, zp_ta, zp_pa, zp_trad(:), isize )
1044 zp_sfts(:,ibeg:iend) = - zp_sv(:,ibeg:iend) * chik%XDEP(:,1:chi%SVI%NBEQ)
1046 IF (chi%SVI%NAEREQ > 0 )
THEN 1048 ibeg = chi%SVI%NSV_AERBEG
1049 iend = chi%SVI%NSV_AEREND
1050 CALL ch_aer_dep(zp_sv(:,ibeg:iend), zp_sfts(:,ibeg:iend), zp_ustar, pek%XRESA, zp_ta, zp_rhoa)
1054 ibeg = chi%SVI%NSV_AERBEG
1055 iend = chi%SVI%NSV_AEREND
1056 zp_sfts(:,ibeg:iend) = 0.
1057 zp_sfts(:,ibeg:iend) = 0.
1066 IF(chi%SVI%NDSTEQ>0)
THEN 1068 ibeg = chi%SVI%NSV_DSTBEG
1069 iend = chi%SVI%NSV_DSTEND
1070 idst = iend - ibeg + 1
1085 zp_sfts(:,ibeg:iend) &
1088 IF (chi%SVI%NSV_AEREND > 0)
THEN 1094 jsv_idx = (jmode-1)*3
1098 jsv_idx = (jmode-1)*2
1102 IF ((trim(hsv(jsv)) ==
"@DSTI").AND.(jmode==3))
THEN 1106 IF ( (trim(hsv(jsv)) ==
"@DSTJ").AND.(jmode==2))
THEN 1116 CALL dslt_dep(zp_sv(:,ibeg:iend), zp_sfts(:,ibeg:iend), zp_ustar, pek%XRESA, &
1117 zp_ta, zp_rhoa, dstk%XEMISSIG_DST, dstk%XEMISRADIUS_DST,
jpmode_dst, &
1123 zp_sfts(:,ibeg:iend), &
1125 dstk%XEMISRADIUS_DST, &
1126 dstk%XEMISSIG_DST, &
1128 zconvertfacm0_dst, &
1129 zconvertfacm6_dst, &
1130 zconvertfacm3_dst, &
1139 IF (chi%SVI%NSLTEQ>0)
THEN 1141 ibeg = chi%SVI%NSV_SLTBEG
1142 iend = chi%SVI%NSV_SLTEND
1144 CALL dslt_dep(zp_sv(:,ibeg:iend), zp_sfts(:,ibeg:iend), zp_ustar, pek%XRESA, &
1145 zp_ta, zp_rhoa, slt%XEMISSIG_SLT, slt%XEMISRADIUS_SLT,
jpmode_slt, &
1150 zp_sfts(:,ibeg:iend), &
1152 slt%XEMISRADIUS_SLT, &
1155 zconvertfacm0_slt, &
1156 zconvertfacm6_slt, &
1157 zconvertfacm3_slt, &
1166 zp_ps, zp_rhoa, zp_u, zp_v, zp_zref, zp_uref, zp_sfth, &
1167 zp_sftq, zp_sfu, zp_sfv, zp_dir_sw, zp_sca_sw, zp_lw )
1176 zp_tsurf(:) = dk%XTS (:)
1177 zp_z0(:) = dk%XZ0 (:)
1178 zp_z0h(:) = dk%XZ0H(:)
1179 zp_qsurf(:) = dk%XQS (:)
1188 io, ptstep, pk%NSIZE_P, jp, zp_rhoa)
1194 CALL diag_misc_isba_n(dmk, kk, pk, pek, agk, io, id%DM%LSURF_MISC_BUDGET, &
1195 id%DM%LVOLUMETRIC_SNOWLIQ, ptstep, lagrip, ptime, pk%NSIZE_P )
1197 CALL reproj_diag_isba_n(dk, dek, dmk, pek, id%O%LSURF_BUDGET, id%DE%LSURF_EVAP_BUDGET, &
1198 id%DE%LWATER_BUDGET, id%DM%LSURF_MISC_BUDGET, id%DM%LPROSNOW, &
1199 io%LMEB_PATCH(jp), zp_slope_cos)
1205 IF (pek%TSNOW%SCHEME==
'3-L'.OR.pek%TSNOW%SCHEME==
'CRO')
THEN 1206 pek%TSNOW%TEMP(:,:) = dmk%XSNOWTEMP(:,:)
1207 pek%TSNOW%TS (:) = dmk%XSNOWTEMP(:,1)
1212 zcpl_drain, zcpl_runoff, zcpl_eflood, zcpl_pflood, &
1213 zcpl_iflood, zcpl_iceflux)
1219 IF (chi%SVI%NBEQ>0 .AND. chi%LCH_BIO_FLUX)
THEN 1222 zsw_forbio(pk%NR_P(jj),jp) = 0.
1229 zsw_forbio(pk%NR_P(jj),jp) = zsw_forbio(pk%NR_P(jj),jp) + zp_dir_sw(jj,jswb) + zp_sca_sw(jj,jswb)
1238 IF (io%NPATCH==1)
THEN 1239 zsftq_tile(:,jp) = zp_sftq(:)
1240 zsfth_tile(:,jp) = zp_sfth(:)
1241 zsfts_tile(:,:,jp)= zp_sfts(:,:)
1242 zsfco2_tile(:,jp) = zp_sfco2(:)
1243 zsfu_tile(:,jp) = zp_sfu(:)
1244 zsfv_tile(:,jp) = zp_sfv(:)
1245 ztrad_tile(:,jp) = zp_trad(:)
1246 ztsurf_tile(:,jp) = zp_tsurf(:)
1247 zz0_tile(:,jp) = zp_z0(:)
1248 zz0h_tile(:,jp) = zp_z0h(:)
1249 zqsurf_tile(:,jp) = zp_qsurf(:)
1255 zsftq_tile(ji,jp) = zp_sftq(jj)
1256 zsfth_tile(ji,jp) = zp_sfth(jj)
1257 zsfco2_tile(ji,jp) = zp_sfco2(jj)
1258 zsfu_tile(ji,jp) = zp_sfu(jj)
1259 zsfv_tile(ji,jp) = zp_sfv(jj)
1260 ztrad_tile(ji,jp) = zp_trad(jj)
1261 ztsurf_tile(ji,jp) = zp_tsurf(jj)
1262 zz0_tile(ji,jp) = zp_z0(jj)
1263 zz0h_tile(ji,jp) = zp_z0h(jj)
1264 zqsurf_tile(ji,jp) = zp_qsurf(jj)
1269 DO jk=1,
SIZE(zp_sfts,2)
1272 zsfts_tile(ji,jk,jp)= zp_sfts(jj,jk)
1281 IF (chi%SVI%NDSTEQ>0)
THEN 1283 IF (imoment == 1)
THEN 1284 dstk%XSFDST(:,jsv) = zsfts_tile(:,
ndst_mdebeg+jsv-1,jp)
1286 dstk%XSFDST(:,jsv) = zsfts_tile(:,
ndst_mdebeg+(jsv-1)*imoment+1,jp)
1289 dstk%XSFDSTM(:,jsv) = dstk%XSFDSTM(:,jsv) + dstk%XSFDST(:,jsv) * ptstep
1293 IF (
lhook)
CALL dr_hook(
'COUPLING_ISBA_n:TREAT_PATCH',1,zhook_handle)
subroutine coupling_dst_n(DSTK, KK, PK, PEK, DK, HPROGRAM, KI, KDST, PPS, PQA, PRHOA, PPA, PTA, PU, PUREF, PV, PZREF, PSFDST)
subroutine isba_albedo(PEK, OTR_ML, OMEB, PDIR_SW, PSCA_SW, PSW_BA
subroutine massflux2momentflux(PFLUX, PRHODREF, PEMISRADIUS, PEMISSIG, KMDE, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX)
subroutine isba_flood_properties(PLAI, PFFLOOD, PFFROZEN, PZ0FLOOD, PFFG_NOSNOW, PFFV_NOSNOW)
subroutine isba_budget_init(OWATER_BUDGET, HISBA, PEK, PDG, PDZG, PWG_INI, PWGI_INI, PWR_INI, PSWE_INI)
character(len=3) cimplicit_wind
real, parameter xmolarweight_slt
subroutine treat_patch(KK, PK, PEK, ISSK, AGK, GK, CHIK, DSTK, DK, DCK, DEK, DECK, DMK, GBK)
real, parameter xmolarweight_dst
subroutine carbon_spinup(TPTIME, IO)
subroutine average_diag_evap_isba_n(OSURF_BUDGETC, DE, DEC, NDE, NDEC, NP, KNPATCH, OGLACIER, OMEB_PATCH, PTSTEP, PRAIN, PSNOW)
subroutine hydro_glacier(PTSTEP, PSR, PEK, PICEFLUX)
subroutine diag_misc_isba_n(DMK, KK, PK, PEK, AGK, IO, OSURF_MISC_BUDGET, OVOLUMETRIC_SNOWLIQ, PTSTEP, OAGRIP, PTIME, KSIZE)
subroutine coupling_isba_n(DTCO, UG, U, USS, NAG, CHI, NCHI, DTI, ID, NGB, GB, ISS, NISS, IG, NIG, IO, S, K, NK, NP, NPE, NDST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
real, parameter xdensity_dst
subroutine ch_aer_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF)
subroutine soilemisno_n(GB, S, K, NP, NPE, PUA, PVA)
subroutine ch_dep_isba(KK, PK, PEK, D, DM, CHIK, PUSTAR, PTA, PPA, PTRAD, KSIZE)
subroutine subscale_z0eff(ISSK, PZ0VEG, OZ0REL, OMASK)
subroutine vegetation_evol(IO, DTI, PK, PEK, OAGRIP, PTSTEP, KMONTH, KDAY, PTIME, PLAT, PRHOA, P_CO2, ISSK, PRESP_BIOMASS_INST, PSWDIR)
subroutine abor1_sfx(YTEXT)
subroutine average_diag_isba_n(DGO, D, DC, ND, NDC, NP, KNPATCH,
subroutine coupling_surf_topd(DE, DEC, DC, DMI, G, IO, S, K, NK, NP, NPE, UG, U, HPROGRAM, KI)
subroutine diag_inline_isba_n(DGO, KK, DK, OCANOPY, PTA, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW)
subroutine diag_cpl_esm_isba(IO, S, NK, NP, PTSTEP, PCPL_DRAIN, P
subroutine average_phy(PFRAC_TILE, PTSURF_TILE, PZ0_TILE, PZ0H_TILE, PQSURF_TILE, PUREF, PZREF, PTSURF, PZ0, PZ0H, PQSURF)
subroutine isba_sgh_update(PMESH_SIZE, IO, S, K, NK, NP, NPE, PRA
subroutine reproj_diag_isba_n(DK, DEK, DMK, PEK, OSURF_BUDGET, OSURF_EVAP_BUDGET, OWATER_BUDGET, OSURF_MISC_BUDGET, OPROSNOW, OMEB_PATCH, PSLOPECOS)
integer, dimension(:), allocatable nmaskt_patch
subroutine isba_budget(IO, PK, PEK, DEK, OWATER_BUDGET, PTSTEP, PWG_INI, PWGI_INI, PWR_INI, PSWE_INI, PRAIN, PSNOW, PEVAP)
subroutine z0eff(HSNOW_SCHEME, OMEB, PALFA, PZREF, PUREF, PZ0, PZ0REL, PPSN, PPALPHAN, PZ0LITTER, PWSNOW, ISS, PFF, PZ0_FLOOD, PZ0_O_Z0H, PZ0_WITH_SNOW, PZ0H_WITH_SNOW, PZ0EFF, PZ0G_WITHOUT_SNOW, PZ0_MEBV, PZ0H_MEBV, PZ0EFF_MEBV, PZ0_MEBN, PZ0H_MEBN, PZ0EFF_MEBN)
subroutine soil_albedo(HALBEDO, PWSAT, PWG1, KK, PEK, HBAND)
subroutine dslt_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF, PEMISSIG, PEMISRADIUS, KPMODE, PDENSITY, PMOLARWEIGHT, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX, HVERMOD)
subroutine average_flux(PFRAC_TILE, PSFTH_TILE, PSFTQ_TILE, PSFTS_TILE, PSFCO2_TILE, PSFU_TILE, PSFV_TILE, PSFTH, PSFTQ, PSFTS, PSFCO2, PSFU, PSFV)
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
subroutine diag_evap_cumul_isba_n(OSURF_BUDGETC, DE, DECK, DCK, DEK, DK, PEK, IO, PTSTEP, KSIZE, KPATCH, PRHOA)
subroutine vegetation_update(DTCO, DTV, KDIM, IO, KK, PK, PEK, KPATCH, PTSTEP, TTIME, PCOVER, OCOVER, OAGRIP, HSFTYPE, OALB, ISSK, ODUPDATED, OABSENT)
subroutine add_forecast_to_date_surf(KYEAR, KMONTH, KDAY, PSEC)
subroutine isba(IO, KK, PK, PEK, G, AG, DK, DEK, DMK, TPTIME, PPOI
subroutine deepsoil_update(PTDEEP, PGAMMAT, KMONTH)
subroutine unpack_diag_patch_n(IO, DEK, PK, KMASK, KSIZE, KNPATCH, KPATCH, PCPL_DRAIN, PCPL_RUNOFF, PCPL_EFLOOD, PCPL_PFLOOD, PCPL_IFLOOD, PCPL_ICEFLUX)
subroutine carbon_evol(IO, KK, PK, PEK, DEK, PTSTEP, PRHOA, PRESP_BIOMASS_INST)
subroutine albedo(HALBEDO, PEK, PSNOW, OMASK)
real, parameter xdensity_slt
subroutine irrigation_update(NAG, NPE, KPATCH, PTSTEP, KMONTH, KD
subroutine average_rad(PFRAC_TILE, PDIR_ALB_TILE, PSCA_ALB_TILE, PEMIS_TILE, PTRAD_TILE,
subroutine average_diag_misc_isba_n(DM, NDM, IO, NP, NPE)
subroutine update_rad_isba_n(IO, S, KK, PK, PEK, KPATCH, PZENITH, PSW_BANDS, PDIR_ALB_WITH_SNOW, PSCA_ALB_WITH_SNOW, PEMIST, PDIR_SW, PSCA_SW)
subroutine ch_bvocem_n(SV, NGB, GB, IO, S, NP, NPE, PSW_FORBIO, PRHOA, PSFTS)