source: LMDZ4/trunk/libf/phylmd/aeropt.F @ 3604

Last change on this file since 3604 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

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
RevLine 
[524]1!
[1403]2! $Id: aeropt.F 1403 2010-07-01 09:02:53Z oboucher $
[524]3!
4      SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, RHcl,
5     .            tau_ae, piz_ae, cg_ae, ai        )
6c
[766]7      USE dimphy
[524]8      IMPLICIT none
9c
10c
11c     
[766]12cym#include "dimensions.h"
13cym#include "dimphy.h"
[524]14#include "YOMCST.h"
15c
16c Arguments:
17c
[1279]18      REAL, INTENT(in) :: paprs(klon,klev+1)
19      REAL, INTENT(in) :: pplay(klon,klev), t_seri(klon,klev)
20      REAL, INTENT(in) :: msulfate(klon,klev) ! masse sulfate ug SO4/m3  [ug/m^3]
21      REAL, INTENT(in) :: RHcl(klon,klev)     ! humidite relative ciel clair
22      REAL, INTENT(out) :: tau_ae(klon,klev,2) ! epaisseur optique aerosol
23      REAL, INTENT(out) :: piz_ae(klon,klev,2) ! single scattering albedo aerosol
24      REAL, INTENT(out) :: cg_ae(klon,klev,2)  ! asymmetry parameter aerosol
25      REAL, INTENT(out) :: ai(klon)            ! POLDER aerosol index
[524]26c
27c Local
28c
29      INTEGER i, k, inu
30      INTEGER RH_num, nbre_RH
31      PARAMETER (nbre_RH=12)
32      REAL RH_tab(nbre_RH)
33      REAL RH_MAX, DELTA, rh
34      PARAMETER (RH_MAX=95.)
35      DATA RH_tab/0.,10.,20.,30.,40.,50.,60.,70.,80.,85.,90.,95./
36      REAL zrho, zdz
37      REAL taue670(klon)       ! epaisseur optique aerosol absorption 550 nm
38      REAL taue865(klon)       ! epaisseur optique aerosol extinction 865 nm
39      REAL alpha_aer_sulfate(nbre_RH,5)   !--unit m2/g SO4
40      REAL alphasulfate     
[1403]41
42      CHARACTER (LEN=20) :: modname='aeropt'
43      CHARACTER (LEN=80) :: abort_message
44
[524]45c
46c Proprietes optiques
47c
48      REAL alpha_aer(nbre_RH,2)   !--unit m2/g SO4
49      REAL cg_aer(nbre_RH,2)
50      DATA alpha_aer/.500130E+01,  .500130E+01,  .500130E+01, 
51     .               .500130E+01,  .500130E+01,  .616710E+01, 
52     .               .826850E+01,  .107687E+02,  .136976E+02, 
53     .               .162972E+02,  .211690E+02,  .354833E+02, 
54     .               .139460E+01,  .139460E+01,  .139460E+01, 
55     .               .139460E+01,  .139460E+01,  .173910E+01, 
56     .               .244380E+01,  .332320E+01,  .440120E+01, 
57     .               .539570E+01,  .734580E+01,  .136038E+02 /
58      DATA cg_aer/.619800E+00,  .619800E+00,  .619800E+00, 
59     .            .619800E+00,  .619800E+00,  .662700E+00, 
60     .            .682100E+00,  .698500E+00,  .712500E+00, 
61     .            .721800E+00,  .734600E+00,  .755800E+00, 
62     .            .545600E+00,  .545600E+00,  .545600E+00, 
63     .            .545600E+00,  .545600E+00,  .583700E+00, 
64     .            .607100E+00,  .627700E+00,  .645800E+00, 
65     .            .658400E+00,  .676500E+00,  .708500E+00 /
66      DATA alpha_aer_sulfate/
67     . 4.910,4.910,4.910,4.910,6.547,7.373,
68     . 8.373,9.788,12.167,14.256,17.924,28.433,
69     . 1.453,1.453,1.453,1.453,2.003,2.321,
70     . 2.711,3.282,4.287,5.210,6.914,12.305,
71     . 4.308,4.308,4.308,4.308,5.753,6.521,
72     . 7.449,8.772,11.014,12.999,16.518,26.772,
73     . 3.265,3.265,3.265,3.265,4.388,5.016,
74     . 5.775,6.868,8.745,10.429,13.457,22.538,
75     . 2.116,2.116,2.116,2.116,2.882,3.330,
76     . 3.876,4.670,6.059,7.327,9.650,16.883/
77c
78      DO i=1, klon
79         taue670(i)=0.0
80         taue865(i)=0.0
81      ENDDO
82c     
83      DO k=1, klev
84      DO i=1, klon
85         if (t_seri(i,k).eq.0) write (*,*) 'aeropt T ',i,k,t_seri(i,k)
86         if (pplay(i,k).eq.0) write (*,*) 'aeropt p ',i,k,pplay(i,k)         
87        zrho=pplay(i,k)/t_seri(i,k)/RD                  ! kg/m3
88        zdz=(paprs(i,k)-paprs(i,k+1))/zrho/RG           ! m
89        rh=MIN(RHcl(i,k)*100.,RH_MAX)
90        RH_num = INT( rh/10. + 1.)
[1403]91        IF (rh.LT.0.) THEN
92          abort_message = 'aeropt: RH < 0 not possible'
93          CALL abort_gcm (modname,abort_message,1)
94        ENDIF
[524]95        IF (rh.gt.85.) RH_num=10
96        IF (rh.gt.90.) RH_num=11
97        DELTA=(rh-RH_tab(RH_num))/(RH_tab(RH_num+1)-RH_tab(RH_num))
98c               
99        inu=1
100        tau_ae(i,k,inu)=alpha_aer(RH_num,inu) +
101     .             DELTA*(alpha_aer(RH_num+1,inu)-alpha_aer(RH_num,inu))
102        tau_ae(i,k,inu)=tau_ae(i,k,inu)*msulfate(i,k)*zdz*1.e-6
103        piz_ae(i,k,inu)=1.0
104        cg_ae(i,k,inu)=cg_aer(RH_num,inu) +
105     .                 DELTA*(cg_aer(RH_num+1,inu)-cg_aer(RH_num,inu))
106c
107        inu=2
108        tau_ae(i,k,inu)=alpha_aer(RH_num,inu) +
109     .             DELTA*(alpha_aer(RH_num+1,inu)-alpha_aer(RH_num,inu))
110        tau_ae(i,k,inu)=tau_ae(i,k,inu)*msulfate(i,k)*zdz*1.e-6
111        piz_ae(i,k,inu)=1.0
112        cg_ae(i,k,inu)=cg_aer(RH_num,inu) +
113     .                 DELTA*(cg_aer(RH_num+1,inu)-cg_aer(RH_num,inu))
114cjq
115cjq for aerosol index
116c
117        alphasulfate=alpha_aer_sulfate(RH_num,4) +
118     .       DELTA*(alpha_aer_sulfate(RH_num+1,4)-
119     .       alpha_aer_sulfate(RH_num,4)) !--m2/g
120c     
121        taue670(i)=taue670(i)+
122     .       alphasulfate*msulfate(i,k)*zdz*1.e-6
123c
124        alphasulfate=alpha_aer_sulfate(RH_num,5) +
125     .       DELTA*(alpha_aer_sulfate(RH_num+1,5)-
126     .       alpha_aer_sulfate(RH_num,5)) !--m2/g
127c
128        taue865(i)=taue865(i)+
129     .         alphasulfate*msulfate(i,k)*zdz*1.e-6
130       
131      ENDDO
132      ENDDO
133c     
134      DO i=1, klon
135        ai(i)=(-log(MAX(taue670(i),0.0001)/
136     .                MAX(taue865(i),0.0001))/log(670./865.)) *
137     .        taue865(i)
138      ENDDO     
139c
140      RETURN
141      END
Note: See TracBrowser for help on using the repository browser.