7 ptstep, hisba, hphoto, hsnow, oagrip, otr_ml, &
8 ptime, ksize, kpatch, kmask, pseuil, &
9 ppsn, ppsng, ppsnv, pff, pffg, pffv, &
10 pwg, pwgi, pwfc, pwwilt, pwsnow, prsnow, &
11 pfaparc, pfapirc, plai_effc, pmus, pfsat, &
57 USE modi_comput_cold_layers_thick
59 USE yomhook
,ONLY : lhook, dr_hook
60 USE parkind1
,ONLY : jprb
70 REAL,
INTENT(IN) :: ptstep
71 CHARACTER(LEN=*),
INTENT(IN) :: hisba
72 CHARACTER(LEN=*),
INTENT(IN) :: hphoto
73 CHARACTER(LEN=*),
INTENT(IN) :: hsnow
74 LOGICAL,
INTENT(IN) :: oagrip
75 LOGICAL,
INTENT(IN) :: otr_ml
76 REAL,
INTENT(IN) :: ptime
77 INTEGER,
INTENT(IN) :: ksize, kpatch
78 INTEGER,
DIMENSION(:),
INTENT(IN) :: kmask
79 REAL,
DIMENSION(:),
INTENT(IN) :: pseuil
82 REAL,
DIMENSION(:),
INTENT(IN) :: ppsn
83 REAL,
DIMENSION(:),
INTENT(IN) :: ppsng
84 REAL,
DIMENSION(:),
INTENT(IN) :: ppsnv
85 REAL,
DIMENSION(:),
INTENT(IN) :: pff
86 REAL,
DIMENSION(:),
INTENT(IN) :: pffg
87 REAL,
DIMENSION(:),
INTENT(IN) :: pffv
89 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwg
90 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwgi
91 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwfc
92 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwwilt
93 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwsnow
94 REAL,
DIMENSION(:,:),
INTENT(IN) :: prsnow
96 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdg
97 REAL,
DIMENSION(:,:),
INTENT(IN) :: ptg
99 REAL,
DIMENSION(:),
INTENT(INOUT) :: pfaparc
100 REAL,
DIMENSION(:),
INTENT(INOUT) :: pfapirc
101 REAL,
DIMENSION(:),
INTENT(INOUT) :: plai_effc
102 REAL,
DIMENSION(:),
INTENT(INOUT) :: pmus
104 REAL,
DIMENSION(:),
INTENT(IN) :: pfsat
108 REAL,
DIMENSION(SIZE(PPSN)) :: zsnowtemp
109 REAL,
DIMENSION(SIZE(PWSNOW,1),SIZE(PWSNOW,2)) :: zwork
110 REAL,
DIMENSION(SIZE(PWSNOW,1),SIZE(PWSNOW,2)) :: zworktemp
112 REAL,
DIMENSION(KSIZE) :: zalt, zflt
115 INTEGER :: jj, ji, jk
116 REAL(KIND=JPRB) :: zhook_handle
120 IF (lhook) CALL dr_hook(
'DIAG_MISC_ISBA_N',0,zhook_handle)
122 IF (dgmi%LSURF_MISC_BUDGET)
THEN
124 pkdi%XP_SWI (:,:)=xundef
125 pkdi%XP_TSWI(:,:)=xundef
128 IF(pwg(ji,jj)/=xundef)
THEN
129 pkdi%XP_SWI (ji,jj) = (pwg(ji,jj) - pwwilt(ji,jj)) / (pwfc(ji,jj) - pwwilt(ji,jj))
130 pkdi%XP_TSWI(ji,jj) = (pwg(ji,jj) - pwwilt(ji,jj)) / (pwfc(ji,jj) - pwwilt(ji,jj))
132 IF(pwgi(ji,jj)/=xundef)
THEN
133 pkdi%XP_TSWI(ji,jj) = pkdi%XP_TSWI(ji,jj) + pwgi(ji,jj) / (pwfc(ji,jj) - pwwilt(ji,jj))
138 DO jk=1,
SIZE(pkdi%XP_SWI,2)
143 dgmi%XSWI (ji,jk,kpatch) = pkdi%XP_SWI (jj,jk)
144 dgmi%XTSWI (ji,jk,kpatch) = pkdi%XP_TSWI (jj,jk)
149 DO ji = 1,
SIZE(pwsnow,2)
151 DO jj = 1,
SIZE(pwsnow,1)
152 zwork(jj,ji) = pwsnow(jj,ji) / prsnow(jj,ji)
160 IF (hsnow/=
'EBA')
THEN
161 zworktemp(:,:) = pkdi%XP_SNOWTEMP(:,:)
163 zworktemp(:,1) = min(ptg(:,1),xtt)
166 DO ji = 1,
SIZE(pwsnow,2)
168 DO jj = 1,
SIZE(pwsnow,1)
169 pkdi%XP_TWSNOW(jj) = pkdi%XP_TWSNOW(jj) + pwsnow(jj,ji)
170 pkdi%XP_TDSNOW(jj) = pkdi%XP_TDSNOW(jj) + zwork(jj,ji)
171 zsnowtemp(jj) = zsnowtemp(jj) + zworktemp(jj,ji) * zwork(jj,ji)
175 WHERE(pkdi%XP_TDSNOW(:)>0.0)
176 zsnowtemp(:)=zsnowtemp(:)/pkdi%XP_TDSNOW(:)
185 dgmi%XHV (ji, kpatch) = pkdi%XP_HV (jj)
186 dgmi%XDPSNG (ji, kpatch) = ppsng(jj)
187 dgmi%XDPSNV (ji, kpatch) = ppsnv(jj)
188 dgmi%XDPSN (ji, kpatch) = ppsn(jj)
189 dgmi%XALBT (ji, kpatch) = pkdi%XP_ALBT (jj)
190 dgmi%XDFF (ji, kpatch) = pff(jj)
191 dgmi%XDFFG (ji, kpatch) = pffg(jj)
192 dgmi%XDFFV (ji, kpatch) = pffv(jj)
193 dgmi%XTWSNOW (ji, kpatch) = pkdi%XP_TWSNOW (jj)
194 dgmi%XTDSNOW (ji, kpatch) = pkdi%XP_TDSNOW (jj)
195 dgmi%XTTSNOW (ji, kpatch) = zsnowtemp(jj)
196 dgmi%XDFSAT (ji, kpatch) = pfsat(jj)
200 IF (hsnow==
'3-L' .OR. hsnow==
'CRO')
THEN
202 DO jk=1,
SIZE(pkdi%XP_SNOWLIQ,2)
207 dgmi%XSNOWLIQ (ji,jk,kpatch) = pkdi%XP_SNOWLIQ (jj,jk)
208 dgmi%XSNOWTEMP(ji,jk,kpatch) = pkdi%XP_SNOWTEMP (jj,jk)
218 IF (hphoto/=
'NON'.AND.otr_ml)
THEN
224 dgmi%XFAPAR (ji, kpatch) = pkdi%XP_FAPAR (jj)
225 dgmi%XFAPIR (ji, kpatch) = pkdi%XP_FAPIR (jj)
226 dgmi%XFAPAR_BS (ji, kpatch) = pkdi%XP_FAPAR_BS (jj)
227 dgmi%XFAPIR_BS (ji, kpatch) = pkdi%XP_FAPIR_BS (jj)
232 gmask = ( ptime - ptstep < 0. ) .AND. ( ptime >= 0. )
238 IF (pmus(jj).NE.0.)
THEN
239 dgmi%XDFAPARC (ji, kpatch) = pfaparc(jj) / pmus(jj)
240 dgmi%XDFAPIRC (ji, kpatch) = pfapirc(jj) / pmus(jj)
241 dgmi%XDLAI_EFFC (ji, kpatch) = plai_effc(jj) / pmus(jj)
262 dgmi%XALT(ji,kpatch) = zalt(jj)
263 dgmi%XFLT(ji,kpatch) = zflt(jj)
275 dgmi%XSEUIL (ji, kpatch) = pseuil(jj)
280 IF (lhook) CALL dr_hook(
'DIAG_MISC_ISBA_N',1,zhook_handle)
subroutine diag_misc_isba_n(DGMI, PKDI, PTSTEP, HISBA, HPHOTO, HSNOW, OAGRIP, OTR_ML, PTIME, KSIZE, KPATCH, KMASK, PSEUIL, PPSN, PPSNG, PPSNV, PFF, PFFG, PFFV, PWG, PWGI, PWFC, PWWILT, PWSNOW, PRSNOW, PFAPARC, PFAPIRC, PLAI_EFFC, PMUS, PFSAT, PDG, PTG)
subroutine comput_cold_layers_thick(PDG, PTG, PALT, PFLT)