#if defined(DOC)
!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
! version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
#endif
#ifdef NEWTHERMO
! DEFINITION DES FONCTIONS THERMODYNAMIQUES DE BASE
! POUR LES CONSTANTES, UTILISER LE COMMON /CONSPHY/
! NOTE: TOUTES LES FONCTIONS TRAVAILLENT AVEC LES UNITES S.I.
! I.E. TTT EN DEG K, PRS EN PA, QQQ EN KG/KG
! *** N. BRUNET - MAI 90 ***
! * REVISION 01 - MAI 94 - N. BRUNET
! NOUVELLE VERSION POUR FAIBLES PRESSIONS
! * REVISION 02 - AOUT 2000 - J-P TOVIESSI
! CALCUL EN REAL*8
! * REVISION 03 - SEPT 2000 - N. BRUNET
! AJOUT DE NOUVELLES FONCTIONS
! * REVISION 04 - JANV 2000 - J. MAILHOT
! FONCTIONS EN PHASE MIXTE
! * REVISION 05 - DEC 2001 - G. LEMAY
! DOUBLE PRECISION POUR PHASE MIXTE
! * REVISION 06 - AVR 2002 - A. PLANTE
! AJOUT DES NOUVELLES FONCTIONS FOTTVH ET FOTVHT
! * REVISION 07 - OCT 2004 - B. BILODEAU
! NOUVEAU FORMAT POUR COMPILATION AVEC FICHIERS .ftn90
!
! FONCTION DE TENSION DE VAPEUR SATURANTE (TETENS) - EW OU EI SELON TT
REAL*8 FUNCTION FOEW (TTT) 15
REAL TTT
REAL*8 T2
T2 = DBLE(TTT)
IF (TTT.GT.TRPL) THEN
FOEW = 610.78D0*DEXP(17.269D0*(T2-DBLE(TRPL))/(T2-35.86D0))
ELSE
FOEW = 610.78D0*DEXP(21.875D0*(T2-DBLE(TRPL))/(T2-7.66D0))
ENDIF
END FUNCTION FOEW
! FONCTION CALCULANT LA DERIVEE SELON T DE LN EW (OU LN EI)
REAL*8 FUNCTION FODLE(TTT) 5
REAL TTT
REAL*8 TEMPO
IF (TTT.GT.TRPL) THEN
TEMPO=DBLE(TTT)-35.86D0
FODLE=17.269D0*(DBLE(TRPL)-35.86D0)/(TEMPO*TEMPO)
ELSE
TEMPO=DBLE(TTT)-7.66D0
FODLE=21.875D0*(DBLE(TRPL)-7.66D0)/(TEMPO*TEMPO)
ENDIF
END FUNCTION FODLE
! FONCTION CALCULANT L'HUMIDITE SPECIFIQUE SATURANTE (QSAT)
REAL*8 FUNCTION FOQST (TTT,PRS) 50,1
REAL TTT,PRS
FOQST = DBLE(EPS1)/(DMAX1(1.D0,DBLE(PRS)/FOEW
(TTT))- DBLE(EPS2))
END FUNCTION FOQST
! FONCTION CALCULANT LA DERIVEE DE QSAT SELON T
! QST EST LA SORTIE DE FOQST
REAL*8 FUNCTION FODQS(QST,TTT) 27,1
REAL QST,TTT
FODQS=DBLE(QST)*(1.D0+DBLE(DELTA)*DBLE(QST))*FODLE
(TTT)
END FUNCTION FODQS
! FONCTION CALCULANT TENSION VAP (EEE) FN DE HUM SP (QQQ) ET PRS
REAL*8 FUNCTION FOEFQ(QQQ,PRS) 12
REAL QQQ,PRS
REAL*8 P2,Q2
Q2 = DBLE(QQQ)
P2 = DBLE(PRS)
FOEFQ = DMIN1(P2,(Q2*P2)/(DBLE(EPS1)+DBLE(EPS2)*Q2))
END FUNCTION FOEFQ
! FONCTION CALCULANT HUM SP (QQQ) DE TENS. VAP (EEE) ET PRES (PRS)
REAL*8 FUNCTION FOQFE(EEE,PRS) 11
REAL EEE,PRS
REAL*8 E2
E2=DBLE(EEE)
FOQFE=DMIN1(1.D0,DBLE(EPS1)*E2/(DBLE(PRS)-DBLE(EPS2)*E2))
END FUNCTION FOQFE
! FONCTION CALCULANT TEMP VIRT. (TVI) DE TEMP (TTT) ET HUM SP (QQQ)
REAL*8 FUNCTION FOTVT(TTT,QQQ) 37
REAL TTT,QQQ
FOTVT = DBLE(TTT) * (1.0D0 + DBLE(DELTA)*DBLE(QQQ))
END FUNCTION FOTVT
! FONCTION CALCULANT TEMP VIRT. (TVI) DE TEMP (TTT), HUM SP (QQQ) ET
! MASSE SP DES HYDROMETEORES.
REAL*8 FUNCTION FOTVHT(TTT,QQQ,QQH) 2
REAL TTT,QQQ,QQH
FOTVHT = DBLE(TTT) * (1.0D0 + DBLE(DELTA)*DBLE(QQQ) - DBLE(QQH))
END FUNCTION FOTVHT
! FONCTION CALCULANT TTT DE TEMP VIRT. (TVI) ET HUM SP (QQQ)
REAL*8 FUNCTION FOTTV(TVI,QQQ) 23
REAL TVI,QQQ
FOTTV = DBLE(TVI) / (1.0D0 + DBLE(DELTA)*DBLE(QQQ))
END FUNCTION FOTTV
! FONCTION CALCULANT TTT DE TEMP VIRT. (TVI), HUM SP (QQQ) ET
! MASSE SP DES HYDROMETEORES (QQH)
REAL*8 FUNCTION FOTTVH(TVI,QQQ,QQH) 2
REAL TVI,QQQ,QQH
FOTTVH = DBLE(TVI) / (1.0D0 + DBLE(DELTA)*DBLE(QQQ) - DBLE(QQH))
END FUNCTION FOTTVH
! FONCTION CALCULANT HUM REL DE HUM SP (QQQ), TEMP (TTT) ET PRES (PRS)
REAL*8 FUNCTION FOHR(QQQ,TTT,PRS) 4,2
REAL QQQ,TTT,PRS
! HR = E/ESAT
FOHR = DMIN1(DBLE(PRS),FOEFQ
(QQQ,PRS)) / FOEW
(TTT)
END FUNCTION FOHR
! FONCTION CALCULANT LA CHALEUR LATENTE DE CONDENSATION
REAL*8 FUNCTION FOLV(TTT) 5
REAL TTT
FOLV =DBLE(CHLC) - 2317.D0*(DBLE(TTT)-DBLE(TRPL))
END FUNCTION FOLV
! FONCTION CALCULANT LA CHALEUR LATENTE DE SUBLIMATION
REAL*8 FUNCTION FOLS(TTT) 4
REAL TTT
REAL*8 T2
T2 = DBLE(TTT)
FOLS=DBLE(CHLC)+DBLE(CHLF)+(DBLE(CPV)-(7.24D0*T2+128.4D0))*(T2-DBLE(TRPL))
END FUNCTION FOLS
! FONCTION RESOLVANT L'EQN. DE POISSON POUR LA TEMPERATURE
! NOTE: SI PF=1000*100, "FOPOIT" DONNE LE THETA STANDARD
REAL*8 FUNCTION FOPOIT(T00,PR0,PF) 3
REAL T00,PR0,PF
FOPOIT = DBLE(T00)*(DBLE(PR0)/DBLE(PF))**(-DBLE(CAPPA))
END FUNCTION FOPOIT
! FONCTION RESOLVANT L'EQN. DE POISSON POUR LA PRESSION
REAL*8 FUNCTION FOPOIP(T00,TF,PR0) 3
REAL T00,TF,PR0
FOPOIP=DBLE(PR0)*DEXP(-(DLOG(DBLE(T00)/DBLE(TF))/DBLE(CAPPA)))
END FUNCTION FOPOIP
! LES 5 FONCTIONS SUIVANTES SONT VALIDES DANS LE CONTEXTE OU ON
! NE DESIRE PAS TENIR COMPTE DE LA PHASE GLACE DANS LES CALCULS
! DE SATURATION.
! FONCTION DE VAPEUR SATURANTE (TETENS)
REAL*8 FUNCTION FOEWA (TTT) 19
REAL TTT
FOEWA=610.78D0*DEXP(17.269D0*(DBLE(TTT)-DBLE(TRPL))/(DBLE(TTT)-35.86D0))
END FUNCTION FOEWA
! FONCTION CALCULANT LA DERIVEE SELON T DE LN EW
REAL*8 FUNCTION FODLA(TTT) 8
REAL TTT
FODLA = 17.269D0*(DBLE(TRPL)-35.86D0)/(DBLE(TTT)-35.86D0)**2
END FUNCTION FODLA
! FONCTION CALCULANT L'HUMIDITE SPECIFIQUE SATURANTE
REAL*8 FUNCTION FOQSA(TTT,PRS) 43,1
REAL TTT,PRS
FOQSA = DBLE(EPS1)/(DMAX1(1.D0,DBLE(PRS)/FOEWA
(TTT))-DBLE(EPS2))
END FUNCTION FOQSA
! FONCTION CALCULANT LA DERIVEE DE QSAT SELON T
REAL*8 FUNCTION FODQA(QST,TTT) 19,1
REAL QST,TTT
FODQA=DBLE(QST)*(1.D0+DBLE(DELTA)*DBLE(QST))*FODLA
(TTT)
END FUNCTION FODQA
! FONCTION CALCULANT L'HUMIDITE RELATIVE
REAL*8 FUNCTION FOHRA(QQQ,TTT,PRS) 5,2
REAL QQQ,TTT,PRS
FOHRA = DMIN1(DBLE(PRS),FOEFQ
(QQQ,PRS))/FOEWA
(TTT)
END FUNCTION FOHRA
! Definition of basic thermodynamic functions in mixed-phase mode
! FFF is the fraction of ice and DDFF its derivative w/r to T
! NOTE: S.I. units are used
! i.e. TTT in deg K, PRS in Pa
! *** J. Mailhot - Jan. 2000 ***
! Saturation calculations in presence of liquid phase only
! Function for saturation vapor pressure (TETENS)
REAL*8 FUNCTION FESI(TTT) 8
REAL TTT
FESI=610.78D0*DEXP(21.875D0*(DBLE(TTT)-DBLE(TRPL))/(DBLE(TTT)-7.66D0))
END FUNCTION FESI
REAL*8 FUNCTION FDLESI(TTT) 4
REAL TTT
REAL*8 TEMPO
TEMPO = DBLE(TTT)-7.66D0
FDLESI=21.875D0*(DBLE(TRPL)-7.66D0)/(TEMPO*TEMPO)
END FUNCTION FDLESI
REAL*8 FUNCTION FESMX(TTT,FFF) 6,2
REAL TTT,FFF
FESMX = (1.D0-DBLE(FFF))*FOEWA
(TTT)+DBLE(FFF)*FESI
(TTT)
END FUNCTION FESMX
REAL*8 FUNCTION FDLESMX(TTT,FFF,DDFF) 8,5
REAL TTT,FFF,DDFF
REAL*8 D2,E1,F1,F2,M1
F2 = DBLE(FFF)
E1 = FOEWA
(TTT)
F1 = FESI
(TTT)
D2 = DBLE(DDFF)
M1 = FESMX
(TTT,FFF)
FDLESMX=((1.D0-F2)*E1*FODLA
(TTT)+F2*F1*FDLESI
(TTT)+D2*(F1-E1))/M1
END FUNCTION FDLESMX
REAL*8 FUNCTION FQSMX(TTT,PRS,FFF) 12,1
REAL TTT,PRS,FFF
FQSMX=DBLE(EPS1)/(DMAX1(1.D0,DBLE(PRS)/FESMX
(TTT,FFF))-DBLE(EPS2))
END FUNCTION FQSMX
REAL*8 FUNCTION FDQSMX(QSM,DLEMX) 9
REAL QSM,DLEMX
FDQSMX = DBLE(QSM)*(1.D0+DBLE(DELTA)*DBLE(QSM))*DBLE(DLEMX)
END FUNCTION FDQSMX
#else
SUBROUTINE THERMOBIDON
END SUBROUTINE THERMOBIDON
#endif