source: trunk/WRF.COMMON/WRFV2/mars_lmd/libf/phymars/aerave.F

Last change on this file was 11, checked in by aslmd, 14 years ago

spiga@svn-planeto:ajoute le modele meso-echelle martien

File size: 5.7 KB
Line 
1      SUBROUTINE aerave ( ndata,
2     & longdata,epdata,omegdata,gdata,         
3     &            longref,epref,temp,nir,longir
4     &            ,epir,omegir,gir                      )
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
40c.......................................................................
41c
42      REAL longref
43      REAL epref
44      REAL temp
45      INTEGER nir
46      REAL longir(nir+1)
47      REAL epir(nir)
48      REAL omegir(nir)
49      REAL gir(nir)
50c
51c.......................................................................
52c
53      INTEGER iir,nirmx
54      PARAMETER (nirmx=100)
55      INTEGER idata,ndata
56c
57c.......................................................................
58c
59      REAL emit
60      REAL totalemit(nirmx)
61      REAL longdata(ndata),epdata(ndata)
62     &    ,omegdata(ndata),gdata(ndata)
63      INTEGER ibande,nbande
64      PARAMETER (nbande=1000)
65      REAL long,deltalong
66      INTEGER ilong
67      INTEGER i1,i2
68      REAL c1,c2
69      REAL factep,ep,omeg,g
70c
71c.......................................................................
72c
73      DOUBLE PRECISION tmp1
74      REAL tmp2,tmp3
75c
76c
77      long=longref
78c
79c********************************************************
80c interpolation
81      ilong=1
82      DO idata=2,ndata
83        IF (long.gt.longdata(idata)) ilong=idata
84      ENDDO
85      i1=ilong
86      i2=ilong+1
87      IF (i2.gt.ndata) i2=ndata
88      IF (long.lt.longdata(1)) i2=1
89      IF (i1.eq.i2) THEN
90        c1=1.E+0
91        c2=0.E+0
92      ELSE
93        c1=(longdata(i2)-long) / (longdata(i2)-longdata(i1))
94        c2=(longdata(i1)-long) / (longdata(i1)-longdata(i2))
95      ENDIF
96c********************************************************
97c
98      ep=c1*epdata(i1)+c2*epdata(i2)
99      factep=ep/epref
100      DO idata=1,ndata
101        epdata(idata)=epdata(idata)/factep
102      ENDDO
103c
104c.......................................................................
105c
106      DO iir=1,nir
107c
108c.......................................................................
109c
110        deltalong=(longir(iir+1)-longir(iir)) / nbande
111        totalemit(iir)=0.E+0
112        epir(iir)=0.E+0
113        omegir(iir)=0.E+0
114        gir(iir)=0.E+0
115c
116c.......................................................................
117c
118        DO ibande=1,nbande
119c
120c.......................................................................
121c
122          long=longir(iir) + (ibande-0.5E+0) * deltalong
123          CALL blackl(DBLE(long),DBLE(temp),tmp1)
124          emit=REAL(tmp1)
125c
126c.......................................................................
127c
128c********************************************************
129c interpolation
130      ilong=1
131      DO idata=2,ndata
132        IF (long.gt.longdata(idata)) ilong=idata
133      ENDDO
134      i1=ilong
135      i2=ilong+1
136      IF (i2.gt.ndata) i2=ndata
137      IF (long.lt.longdata(1)) i2=1
138      IF (i1.eq.i2) THEN
139        c1=1.E+0
140        c2=0.E+0
141      ELSE
142        c1=(longdata(i2)-long) / (longdata(i2)-longdata(i1))
143        c2=(longdata(i1)-long) / (longdata(i1)-longdata(i2))
144      ENDIF
145c********************************************************
146c
147          ep=c1*epdata(i1)+c2*epdata(i2)
148          omeg=c1*omegdata(i1)+c2*omegdata(i2)
149          g=c1*gdata(i1)+c2*gdata(i2)
150c
151c.......................................................................
152c
153          totalemit(iir)=totalemit(iir)+deltalong*emit
154          epir(iir)=epir(iir)+deltalong*emit*ep
155          omegir(iir)=omegir(iir)+deltalong*emit*omeg*ep
156          gir(iir)=gir(iir)+deltalong*emit*omeg*ep*g
157c
158c.......................................................................
159c
160        ENDDO
161c
162c.......................................................................
163c
164        gir(iir)=gir(iir)/omegir(iir)
165        omegir(iir)=omegir(iir)/epir(iir)
166        epir(iir)=epir(iir)/totalemit(iir)
167c
168c.......................................................................
169c
170      ENDDO
171c
172c......................................................................
173c
174c     Diagnostic de controle si on moyenne sur tout le spectre vis ou IR :
175c     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
176c     tmp2=0.E+0
177c     DO iir=1,nir
178c       tmp2=tmp2+totalemit(iir)
179c     ENDDO
180c     tmp3=5.67E-8 * temp**4
181c     IF (abs((tmp2-tmp3)/tmp3).gt.0.05E+0) THEN
182c       PRINT *,'!!!! <---> il manque du Planck (voir moyenne.F)'
183c       PRINT *,'somme des bandes :',tmp2,'--- Planck:',tmp3
184c     ENDIF
185c
186c......................................................................
187c
188      RETURN
189      END
Note: See TracBrowser for help on using the repository browser.