source: LMDZ4/trunk/libf/phylmd/thermcell_condens.F90 @ 3269

Last change on this file since 3269 was 1403, checked in by Laurent Fairhead, 14 years ago

Merged LMDZ4V5.0-dev branch changes r1292:r1399 to trunk.

Validation:
Validation consisted in compiling the HEAD revision of the trunk,
LMDZ4V5.0-dev branch and the merged sources and running different
configurations on local and SX8 machines comparing results.

Local machine: bench configuration, 32x24x11, gfortran

  • IPSLCM5A configuration (comparison between trunk and merged sources):
    • numerical convergence on dynamical fields over 3 days
    • start files are equivalent (except for RN and PB fields)
    • daily history files equivalent
  • MH07 configuration, new physics package (comparison between LMDZ4V5.0-dev branch and merged sources):
    • numerical convergence on dynamical fields over 3 days
    • start files are equivalent (except for RN and PB fields)
    • daily history files equivalent

SX8 machine (brodie), 96x95x39 on 4 processors:

  • IPSLCM5A configuration:
    • start files are equivalent (except for RN and PB fields)
    • monthly history files equivalent
  • MH07 configuration:
    • start files are equivalent (except for RN and PB fields)
    • monthly history files equivalent

Changes to the makegcm and create_make_gcm scripts to take into account
main programs in F90 files


Fusion de la branche LMDZ4V5.0-dev (r1292:r1399) au tronc principal

Validation:
La validation a consisté à compiler la HEAD de le trunk et de la banche
LMDZ4V5.0-dev et les sources fusionnées et de faire tourner le modéle selon
différentes configurations en local et sur SX8 et de comparer les résultats

En local: 32x24x11, config bench/gfortran

  • pour une config IPSLCM5A (comparaison tronc/fusion):
    • convergence numérique sur les champs dynamiques après 3 jours
    • restart et restartphy égaux (à part sur RN et Pb)
    • fichiers histoire égaux
  • pour une config nlle physique (MH07) (comparaison LMDZ4v5.0-dev/fusion):
    • convergence numérique sur les champs dynamiques après 3 jours
    • restart et restartphy égaux
    • fichiers histoire équivalents

Sur brodie, 96x95x39 sur 4 proc:

  • pour une config IPSLCM5A:
    • restart et restartphy égaux (à part sur RN et PB)
    • pas de différence dans les fichiers histmth.nc
  • pour une config MH07
    • restart et restartphy égaux (à part sur RN et PB)
    • pas de différence dans les fichiers histmth.nc

Changement sur makegcm et create_make-gcm pour pouvoir prendre en compte des
programmes principaux en *F90

File size: 2.4 KB
Line 
1subroutine thermcell_condens(klon,active,zpspsk,pplev,ztla,zqta,zqla)
2implicit none
3
4#include "YOMCST.h"
5#include "YOETHF.h"
6#include "FCTTRE.h"
7
8
9!====================================================================
10! DECLARATIONS
11!====================================================================
12
13! Arguments
14INTEGER klon
15REAL zpspsk(klon),pplev(klon)
16REAL ztla(klon),zqta(klon),zqla(klon)
17LOGICAL active(klon)
18
19! Variables locales
20INTEGER ig,iter
21REAL Tbef(klon),DT(klon)
22REAL tdelta,qsatbef,zcor,qlbef,zdelta,zcvm5,dqsat,num,denom,dqsat_dT
23logical Zsat
24REAL RLvCp
25REAL, SAVE :: DDT0=.01
26LOGICAL afaire(klon),tout_converge
27
28!====================================================================
29! INITIALISATIONS
30!====================================================================
31
32RLvCp = RLVTT/RCPD
33tout_converge=.false.
34afaire(:)=.false.
35DT(:)=0.
36
37
38!====================================================================
39! Routine a vectoriser en copiant active dans converge et en mettant
40! la boucle sur les iterations a l'exterieur est en mettant
41! converge= false des que la convergence est atteinte.
42!====================================================================
43
44do ig=1,klon
45   if (active(ig)) then
46               Tbef(ig)=ztla(ig)*zpspsk(ig)
47               zdelta=MAX(0.,SIGN(1.,RTT-Tbef(ig)))
48               qsatbef= R2ES * FOEEW(Tbef(ig),zdelta)/pplev(ig)
49               qsatbef=MIN(0.5,qsatbef)
50               zcor=1./(1.-retv*qsatbef)
51               qsatbef=qsatbef*zcor
52               qlbef=max(0.,zqta(ig)-qsatbef)
53               DT(ig) = 0.5*RLvCp*qlbef
54     endif
55enddo
56
57do iter=1,10
58    afaire(:)=abs(DT(:)).gt.DDT0
59    do ig=1,klon
60               if (afaire(ig)) then
61                 Tbef(ig)=Tbef(ig)+DT(ig)
62                 zdelta=MAX(0.,SIGN(1.,RTT-Tbef(ig)))
63                 qsatbef= R2ES * FOEEW(Tbef(ig),zdelta)/pplev(ig)
64                 qsatbef=MIN(0.5,qsatbef)
65                 zcor=1./(1.-retv*qsatbef)
66                 qsatbef=qsatbef*zcor
67                 qlbef=zqta(ig)-qsatbef
68                 zdelta=MAX(0.,SIGN(1.,RTT-Tbef(ig)))
69                 zcvm5=R5LES*(1.-zdelta) + R5IES*zdelta
70                 zcor=1./(1.-retv*qsatbef)
71                 dqsat_dT=FOEDE(Tbef(ig),zdelta,zcvm5,qsatbef,zcor)
72                 num=-Tbef(ig)+ztla(ig)*zpspsk(ig)+RLvCp*qlbef
73                 denom=1.+RLvCp*dqsat_dT
74                 zqla(ig) = max(0.,zqta(ig)-qsatbef)
75                 DT(ig)=num/denom
76               endif
77    enddo
78enddo
79
80return
81end
Note: See TracBrowser for help on using the repository browser.