source: trunk/LMDZ.MARS/libf/phymars/aerave.F @ 1944

Last change on this file since 1944 was 38, checked in by emillour, 14 years ago

Ajout du modè Martien (mon LMDZ.MARS.BETA, du 28/01/2011) dans le rértoire mars, pour pouvoir suivre plus facilement les modifs.
EM

File size: 6.0 KB
Line 
1      SUBROUTINE aerave ( ndata,
2     & longdata,epdata,omegdata,gdata,         
3     &            longref,epref,temp,nir,longir
4     &            ,epir,omegir,gir,qref,omegaref        )
5      IMPLICIT NONE
6c.......................................................................
7c
8c R.Fournier 02/1996
9c (modif F.Forget 02/1996)
10c le spectre est decoupe en "nir" bandes et cette routine calcule
11c les donnees radiatives moyenne sur chaque bande : l'optimisation
12c est faite pour une temperature au sol "temp" et une epaisseur
13c optique de l'atmosphere "epref" a la longueur d'onde "longref"
14c
15c dans la version actuelle, les ponderations sont independantes de
16c l'epaisseur optique : c'est a dire que "omegir", "gir"
17c et "epir/epre" sont independants de "epref".
18c en effet les ponderations sont choisies pour une solution exacte
19c en couche mince et milieu isotherme.
20c
21c entree
22c
23c    ndata : taille des champs data
24c    longdata,epdata,omegdata,gdata : proprietes radiative de l'aerosol
25c                  (longdata longueur d'onde en METRES)
26c  * longref : longueur d'onde a laquelle l'epaisseur optique
27c              est connue
28c  * epref : epaisseur optique a longref
29c  * temp : temperature choisie pour la ponderation (Planck)
30c  * nir : nombre d'intervals dans la discretisation spectrale
31c           du GCM
32c  * longir : longueurs d'onde definissant ces intervals
33c
34c sortie
35c
36c  * epir : epaisseur optique moyenne pour chaque interval
37c  * omegir : "scattering albedo" moyen pour chaque interval
38c  * gir : "assymetry factor" moyen pour chaque interval
39c  * qref : extinction coefficient at reference wavelength
40c  * omegaref : single scat. albedo at reference wavelength
41c
42c.......................................................................
43c
44      REAL longref
45      REAL epref
46      REAL temp
47      INTEGER nir
48      REAL longir(nir+1)
49      REAL epir(nir)
50      REAL omegir(nir)
51      REAL gir(nir)
52c
53c.......................................................................
54c
55      INTEGER iir,nirmx
56      PARAMETER (nirmx=100)
57      INTEGER idata,ndata
58c
59c.......................................................................
60c
61      REAL emit
62      REAL totalemit(nirmx)
63      REAL longdata(ndata),epdata(ndata)
64     &    ,omegdata(ndata),gdata(ndata)
65      REAL qextcorrdata(ndata)
66      INTEGER ibande,nbande
67      PARAMETER (nbande=1000)
68      REAL long,deltalong
69      INTEGER ilong
70      INTEGER i1,i2
71      REAL c1,c2
72      REAL factep,qextcorr,omeg,g
73      REAL qref,omegaref
74c
75c.......................................................................
76c
77      DOUBLE PRECISION tmp1
78      REAL tmp2,tmp3
79c
80c
81      long=longref
82c
83c********************************************************
84c interpolation
85      ilong=1
86      DO idata=2,ndata
87        IF (long.gt.longdata(idata)) ilong=idata
88      ENDDO
89      i1=ilong
90      i2=ilong+1
91      IF (i2.gt.ndata) i2=ndata
92      IF (long.lt.longdata(1)) i2=1
93      IF (i1.eq.i2) THEN
94        c1=1.E+0
95        c2=0.E+0
96      ELSE
97        c1=(longdata(i2)-long) / (longdata(i2)-longdata(i1))
98        c2=(longdata(i1)-long) / (longdata(i1)-longdata(i2))
99      ENDIF
100c********************************************************
101c
102      qref=c1*epdata(i1)+c2*epdata(i2)
103      omegaref=c1*omegdata(i1)+c2*omegdata(i2)
104      factep=qref/epref
105      DO idata=1,ndata
106        qextcorrdata(idata)=epdata(idata)/factep
107      ENDDO
108c
109c.......................................................................
110c
111      DO iir=1,nir
112c
113c.......................................................................
114c
115        deltalong=(longir(iir+1)-longir(iir)) / nbande
116        totalemit(iir)=0.E+0
117        epir(iir)=0.E+0
118        omegir(iir)=0.E+0
119        gir(iir)=0.E+0
120c
121c.......................................................................
122c
123        DO ibande=1,nbande
124c
125c.......................................................................
126c
127          long=longir(iir) + (ibande-0.5E+0) * deltalong
128          CALL blackl(DBLE(long),DBLE(temp),tmp1)
129          emit=REAL(tmp1)
130c
131c.......................................................................
132c
133c********************************************************
134c interpolation
135      ilong=1
136      DO idata=2,ndata
137        IF (long.gt.longdata(idata)) ilong=idata
138      ENDDO
139      i1=ilong
140      i2=ilong+1
141      IF (i2.gt.ndata) i2=ndata
142      IF (long.lt.longdata(1)) i2=1
143      IF (i1.eq.i2) THEN
144        c1=1.E+0
145        c2=0.E+0
146      ELSE
147        c1=(longdata(i2)-long) / (longdata(i2)-longdata(i1))
148        c2=(longdata(i1)-long) / (longdata(i1)-longdata(i2))
149      ENDIF
150c********************************************************
151c
152          qextcorr=c1*qextcorrdata(i1)+c2*qextcorrdata(i2)
153          omeg=c1*omegdata(i1)+c2*omegdata(i2)
154          g=c1*gdata(i1)+c2*gdata(i2)
155c
156c.......................................................................
157c
158          totalemit(iir)=totalemit(iir)+deltalong*emit
159          epir(iir)=epir(iir)+deltalong*emit*qextcorr
160          omegir(iir)=omegir(iir)+deltalong*emit*omeg*qextcorr
161          gir(iir)=gir(iir)+deltalong*emit*omeg*qextcorr*g
162c
163c.......................................................................
164c
165        ENDDO
166c
167c.......................................................................
168c
169        gir(iir)=gir(iir)/omegir(iir)
170        omegir(iir)=omegir(iir)/epir(iir)
171        epir(iir)=epir(iir)/totalemit(iir)
172c
173c.......................................................................
174c
175      ENDDO
176c
177c......................................................................
178c
179c     Diagnostic de controle si on moyenne sur tout le spectre vis ou IR :
180c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
181c     tmp2=0.E+0
182c     DO iir=1,nir
183c       tmp2=tmp2+totalemit(iir)
184c     ENDDO
185c     tmp3=5.67E-8 * temp**4
186c     IF (abs((tmp2-tmp3)/tmp3).gt.0.05E+0) THEN
187c       PRINT *,'!!!! <---> il manque du Planck (voir moyenne.F)'
188c       PRINT *,'somme des bandes :',tmp2,'--- Planck:',tmp3
189c     ENDIF
190c
191c......................................................................
192c
193      RETURN
194      END
Note: See TracBrowser for help on using the repository browser.