41 &(tair,twat,tfrz,tdew,cc,visb,wind,pluie,sumph,phcl,phri,phps,
42 & phib,phie,phih,phip,anfem,dt,at,mardat,martim,lambd0,cice)
80 & lin_watair,cst_watair,lin_iceair,cst_iceair,
81 & coef_phib,coef_phie,coef_phih,coef_phip,sgma,
89 INTEGER,
INTENT(IN) :: MARDAT(3),MARTIM(3),CICE
91 DOUBLE PRECISION,
INTENT(IN) :: TWAT,ANFEM,TFRZ
92 DOUBLE PRECISION,
INTENT(IN) :: TAIR,TDEW,CC,VISB,WIND,PLUIE
93 DOUBLE PRECISION,
INTENT(IN) :: DT,AT
94 DOUBLE PRECISION,
INTENT(INOUT) :: SUMPH,PHCL,PHRI
95 DOUBLE PRECISION,
INTENT(INOUT) :: PHPS,PHIB,PHIE,PHIH,PHIP
96 DOUBLE PRECISION,
INTENT(IN) :: LAMBD0
101 INTEGER IYEAR,IMONTH,IDAY,IHOUR,IMIN,ISEC
104 DOUBLE PRECISION DN, DAY,DAYREEL,NDAYS,DTHR
106 DOUBLE PRECISION PHBA,PHBC,PHBR,PHBW
107 DOUBLE PRECISION ES1,EA1,EPINA,AKN,VA,ASV
108 DOUBLE PRECISION PCL,PRI,PPS,TAK,TSK,TDK
109 DOUBLE PRECISION T1,T2,T10,T20
134 day =
daynum(iyear,imonth,iday,ihour,imin,isec)
135 & + floor(at/86400.d0)
136 ndays = 365.d0 +
REAL(
leap(iyear))
137 dayreel = modulo(day, ndays)
156 t10 = ihour + modulo(at,86400.d0)/3600.d0
160 IF (dthr.GE.1.d0)
THEN 161 ndlt = int(dthr + 0.001d0)
165 CALL solar(dn,t1,t20,cc,pcl,pri,pps,cice,lambd0)
171 CALL solar(dn,t1,t2,cc,pcl,pri,pps,cice,lambd0)
179 CALL solar(dn,t10,t20,cc,pcl,pri,pps,cice,lambd0)
191 IF( atmoexch.EQ.0 )
THEN 193 phih = cst_iceair + ( tair-tfrz )*lin_iceair
195 phih = cst_watair + ( tair-twat )*lin_watair
203 ELSEIF( atmoexch.EQ.1 )
THEN 205 tak = tair + 273.16d0
206 tdk = tdew + 273.16d0
209 tsk = twat + 273.16d0
220 es1 = 7.95357242d10*exp((-18.1972839d0*373.16d0/tsk)+
221 & 5.02808d0*log(373.16d0/tsk)-20242.1852d0*
222 & exp(-26.1205253d0*tsk/373.16d0)+
223 & 58.0691913d0*exp(-8.039282d0*373.16d0/tsk))
224 ea1 = 7.95357242d10*exp((-18.1972839d0*373.16d0/tdk)+
225 & 5.02808d0*log(373.16d0/tdk)-20242.1852d0*
226 & exp(-26.1205253d0*tdk/373.16d0)+
227 & 58.0691913d0*exp(-8.039282d0*373.16d0/tdk))
233 es1 = 5.75185606d10*exp((-20.947031d0*273.16d0/tak)-
234 & 3.56654d0*log(273.16d0/tak)-2.01889049d0/273.16d0*tak)
235 ea1 = 5.75185606d10*exp((-20.947031d0*273.16d0/tdk)-
236 & 3.56654d0*log(273.16d0/tdk)-2.01889049d0/273.16d0*tdk)
240 IF (tair.LT.0.d0)
THEN 242 epina = 1.08d0 * (1.d0 - exp(-ea1 ** (tak / 2016.d0)))
245 epina = 1.d0-0.261d0*exp(-0.000777d0*(273.16d0-tak)**2)
248 phbc = epina * sgma * tak ** 4
250 phba = phbc * (1.d0 + 0.0017d0 * cc **2)
254 phbw = 0.97d0 * sgma * tsk ** 4
261 phib = phba - phbr - phbw
262 phib = coef_phib*phib
268 akn = 8.d0 + 0.35d0 * (twat - tair)
269 va = (2.d0/
windz) ** 0.15d0 * wind
273 phie = -(1.56d0*akn + 6.08d0 * va) * (es1-ea1)*4.1855d0/8.64d0
274 phie = coef_phie*phie
276 akn = 8.d0 + 0.35d0 * (0.d0 - tair)
277 va = (2.d0/
windz) ** 0.15d0 * wind
281 phih = (akn + 3.9d0*va) * (tak-tsk)*4.1855d0/8.64d0
282 phih = coef_phih*phih
287 IF (visb.GT.0.d0.AND.visb.LT.1.d0)
THEN 289 asv = 78.5d0 / 86400.d0
292 asv = 78.5d0 / 86400.d0 * visb ** (-2.375d0)
296 IF(visb.LT.1.d-5)
THEN 308 IF(pluie.GT.0.d0)
THEN 311 IF(tair.LT.0.d0)
THEN 312 phip = - asv*cp_eau*(0.d0 - twat)
314 phip = - asv*cp_eau*(tair - twat)
318 phip = - asv*cp_eau*(tair - 0.d0)
324 phip = coef_phip*phip
329 sumph = phps + phib + phie + phih + phip
344 &(twat,tmelt,sumph,anfem,thifems,hwi,dt)
368 DOUBLE PRECISION,
INTENT(IN) :: HWI
369 DOUBLE PRECISION,
INTENT(IN) :: TWAT,TMELT,SUMPH
370 DOUBLE PRECISION,
INTENT(IN) :: DT
371 DOUBLE PRECISION,
INTENT(INOUT) :: ANFEM,THIFEMS
376 DOUBLE PRECISION AUX,DH
382 & - aux*hwi*(twat-tmelt)
384 IF( dh.GT.(-thifems) )
THEN 385 thifems = thifems + dh
394 IF( thifems.LE.0.d0 ) thifems = 0.d0
395 IF( thifems.LE.0.d0 ) anfem = 0.d0
407 &(dn,t1,t2,cc,phcl,phri,phps,cice,lambd0)
435 INTEGER ,
INTENT(IN) :: CICE
436 DOUBLE PRECISION,
INTENT(IN) :: CC
437 DOUBLE PRECISION,
INTENT(IN) :: DN,T1,T2
438 DOUBLE PRECISION,
INTENT(INOUT) :: PHCL,PHRI,PHPS
439 DOUBLE PRECISION,
INTENT(IN) :: LAMBD0
443 DOUBLE PRECISION :: PI
444 DOUBLE PRECISION :: AA, ALPHA,ALPHR,ALPHS,ALHA
445 DOUBLE PRECISION R,BB,AMO,AM,CR,DELTA,EO,ET,HRIS,HSS,
446 & papo,phiso,phrr,phs,rhs1,rhs2,sia,alr,hs1,hs2,hset
473 phs = lambd0 * pi / 180.d0
474 alphs =
alphsd * pi / 180.d0
475 alphr =
alphrd * pi / 180.d0
478 delta = 23.45d0*pi/180.d0*sin(360.d0*(284.d0+dn)/365.d0*pi/180.d0)
482 r = 2.d0 * pi * (dn - 1.d0) / 365.d0
485 eo = 1.d0 + 0.033d0 * cos(2.d0 * pi / 365.d0 * dn)
487 et = 3.8197d0 * (0.000075d0 + 0.001868d0 * cos(r)
488 & -0.032077d0*sin(r)-0.014615d0*cos(2.d0*r)-0.04089d0*sin(2.d0*r))
491 hss = acos( -tan(phs) * tan(delta) )
492 IF (hss.LT.0.d0)
THEN 496 hset = 12.d0 + hss * 12.d0 / pi - (pi - alphs) / pi * 12.d0
498 hris = 12.d0 - hss * 12.d0 / pi + alphr / pi * 12.d0
501 rhs1 = (12.d0 - hs1) * pi / 12.d0
503 rhs2 = (12.d0 - hs2) * pi / 12.d0
512 IF (hs1.GT.hset.AND.hs2.GT.hset)
THEN 515 IF (hs1.LT.hris.AND.hs2.LT.hris)
THEN 519 IF (hs1.LT.hris .AND. hs2.GT.hris)
THEN 520 rhs1=(12.d0-hris)*pi/12.d0
523 IF (hs2.GT.hset.AND.hs1.LT.hset)
THEN 524 rhs2=(12.0-hset)*pi/12.d0
529 alha = (rhs1 + rhs2) / 2.d0
531 phiso = 12.d0/pi*
sio*eo*((rhs1-rhs2)*sin(delta)*sin(phs)+
532 & (sin(rhs1)-sin(rhs2))*cos(delta)*cos(phs))
534 sia = sin(delta) * sin(phs) + cos(delta) * cos(phs) * cos(alha)
536 alpha = asin( sia ) * 180.d0 / pi
538 amo = 1.d0 / (sia + 0.15d0 * (alpha + 3.885d0) ** (-1.253d0))
540 papo = exp(-0.0001184d0 *
modelz)
544 am = 0.99d0 - 0.17d0 * am
548 IF (phcl.LT.0.d0) phcl=0.d0
550 phri = phcl * ( 1.d0 - 0.0065d0 * cc **2 )
554 IF (phcl.EQ.0.d0)
THEN 558 cr = max((1.d0 - phri / phcl),0.d0)
559 aa = 2.2d0 +cr**0.7d0/4.d0 - (cr**0.7d0 - 0.4d0)**2 / 0.16d0
560 bb = -1.02d0+cr**0.7d0/16.d0 + (cr**0.7d0 - 0.4d0)**2 / 0.64d0
562 alr = aa * alpha ** bb
571 IF (phcl.EQ.0.) phrr=0.d0
605 DOUBLE PRECISION,
INTENT(IN) :: H,U,TWAT,TFRZ
609 DOUBLE PRECISION RE, DH
618 IF(dh.LE.0.001d0.AND.dh.GT.0.d0)
THEN 624 IF(re.LT.2200.d0)
THEN 628 ELSEIF( twat.GT.tfrz )
THEN 641 INTEGER FUNCTION leap 673 INTEGER,
INTENT(IN) :: IYEAR
677 IF( mod(iyear,4).EQ.0.AND.
678 & (mod(iyear,100).NE.0.OR.mod(iyear,400).EQ.0))
THEN 690 DOUBLE PRECISION FUNCTION daynum 693 &(iyear,imonth,iday,ihour,imin,isec)
728 INTEGER,
INTENT(IN) :: IYEAR,IMONTH,IDAY,IHOUR,IMIN,ISEC
737 parameter( month=(/0,31,59,90,120,151,181,212,243,273,304,334/) )
741 daynum =
REAL(month(imonth)+iday)
742 & +
REAL(ihour)/24.D0+
REAL(imin)/1440.D0+
REAL(isec)/86400.D0
subroutine solar(DN, T1, T2, CC, PHCL, PHRI, PHPS, CICE, LAMBD0)
double precision function, public daynum(IYEAR, IMONTH, IDAY, IHOUR, IMIN, ISEC)
integer function, public leap(IYEAR)
subroutine, public thermal_fluxes(TAIR, TWAT, TFRZ, TDEW, CC, VISB, WIND, PLUIE, SUMPH, PHCL, PHRI, PHPS, PHIB, PHIE, PHIH, PHIP, ANFEM, DT, AT, MARDAT, MARTIM, LAMBD0, CICE)
double precision lin_iceair
double precision, public alphsd
double precision function, public waterice_heat_coef(H, U, TWAT, TFRZ)
double precision, public alphrd
double precision, public modelz
subroutine, public icover_growth(TWAT, TMELT, SUMPH, ANFEM, THIFEMS, HWI, DT)
double precision, public windz