source: trunk/LMDZ.MARS/libf/phymars/lwdiff.F @ 1226

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

LMDZ.MARS : Replaced comcstfi and planete includes by modules.

File size: 6.8 KB
Line 
1      subroutine lwdiff (kdlon,kflev
2     .         ,pbsur,pbtop,pdbsl
3     .         ,tautotal,omegtotal,gtotal
4     .         ,pemis,pfluc)
5
6      use dimradmars_mod, only: nir, npademx, nabsmx, nflev, ndlon,
7     &                          ndlo2
8      use yomlw_h, only: nlaylte
9      USE comcstfi_h
10      IMPLICIT NONE
11 
12!#include "dimensions.h"
13!#include "dimphys.h"
14!#include "dimradmars.h"
15#include "callkeys.h"
16
17!#include "yomaer.h"
18!#include "yomlw.h"
19C-----------------------------------------------------------------------
20C
21c  ABSORPTION ET DIFUSION HORS DE LA BANDE A 15 MICRONS :
22c! 1) Dans la bande a 15 micron (CO2), les poussieres
23c! n'interviennent que comme un milieu gris non diffusif avec
24c!                      Q=Qext*(1-Omega)
25c! cette bande est decoupee en deux sous bandes (indices 1 et 2)
26c! pour lesquelles les parametres optiques des poussieres sont
27c! identiques
28c! 2)  le reste est decoupe en "nir-2" bandes : une bande qui recouvre toutes
29c! les longueurs d'onde inferieures a celles de la bande a 15 microns
30c! (indice 3) et nir-3 bandes pour les grandes longueurs d'onde
31c! (indices 4...nir) sur chacune de ces  bandes, les poussieres
32c! sont supposees diffusantes grises.
33c!
34C
35C-----------------------------------------------------------------------
36C
37C
38C-----------------------------------------------------------------------
39C
40C*       0.1   ARGUMENTS
41C              ---------
42C
43      integer kdlon,kflev
44      REAL PBSUR(NDLO2,nir), PBTOP(NDLO2,nir)
45     S  ,  PDBSL(NDLO2,nir,KFLEV*2), PEMIS(NDLO2)
46
47      real PFLUC(NDLO2,2,KFLEV+1)
48      real tautotal(ndlon,nflev,nir)
49      real omegtotal(ndlon,nflev,nir), gtotal(ndlon,nflev,nir)
50
51C
52C
53C-------------------------------------------------------------------------
54C
55C*       0.2   LOCAL ARRAYS
56C              ------------
57C
58C
59      integer jl, jk, ndd, indd, iir, j1
60      integer  j2, j2dd2, j2dd1,j2bot,j2top, j2dd
61      REAL ZADJD(NDLON,NFLEV+1), ZADJU(NDLON,NFLEV+1)
62     S  ,  ZDBDT(NDLON,nir,NFLEV)
63     S  ,  ZDISD(NDLON,NFLEV+1), ZDISU(NDLON,NFLEV+1)
64     S  ,  ZFD(NDLON), ZFDN(NDLON,NFLEV+1), ZFU(NDLON)
65     S  ,  ZFUP(NDLON,NFLEV+1),ZGLAYD(NDLON),ZGLAYU(NDLON)
66     S  ,  ZOMEGADD(NDLON,NFLEV*2),ZGDD(NDLON,NFLEV*2)
67     S  ,  ZTAUDD(NDLON,NFLEV*2)
68     S  ,  ZBHDD(NDLON,NFLEV*2+1),ZBSDD(NDLON)
69     S  ,  ZZBHDD(NDLON,NFLEV*2+1),ZZBSDD(NDLON)
70     S  ,  ZFAHDD(NDLON,NFLEV*2+1),ZFDHDD(NDLON,NFLEV*2+1)
71     S  ,  ZZFAHDD(NDLON,NFLEV*2+1),ZZFDHDD(NDLON,NFLEV*2+1)
72C
73C-----------------------------------------------------------------------
74C
75C*         1.    INITIALIZATION
76C                --------------
77C
78 100  CONTINUE
79C
80C*         1.1     INITIALIZE LAYER CONTRIBUTIONS
81C                  ------------------------------
82C
83 110  CONTINUE
84C
85
86      do jl = 1 , kdlon
87        do jk = 1 , nlaylte
88          PFLUC(jl,1,jk) = 0.
89          PFLUC(jl,2,jk) = 0.
90        enddo
91      enddo
92
93      DO 112 JK = 1 , nlaylte+1
94        DO 111 JL = 1 , KDLON
95          ZADJD(JL,JK) = 0.
96          ZADJU(JL,JK) = 0.
97          ZDISD(JL,JK) = 0.
98          ZDISU(JL,JK) = 0.
99 111    CONTINUE
100 112  CONTINUE
101C
102C
103C     ------------------------------------------------------------------
104C
105C*         2.      VERTICAL INTEGRATION
106C                  --------------------
107C
108C     ------------------------------------------------------------------
109C
110C
111C  ==================================================================
112C*         2.0     contribution des bandes "hors co2"
113C  ==================================================================
114C
115 200  CONTINUE
116C
117C     ------------------------------------------------------------------
118C
119C*         2.0.1   preparation des Planck a chaque hauteur
120C                  ----------------------------------
121C
122c!
123c! le nombre de couche pour la diffusion sera le nombre de layer * 2
124c! soit NDD=nlaylte*2, donc la taille du vecteur des Planck sera
125c! nlaylte*2 + 1. la taille des vecteurs omega / g / tau sera
126c! par contre nlaylte*2 (voir dans FLUSV.F).
127c!
128      NDD=nlaylte*2
129      DO indd=1,ndd+1
130                                            do jl=1,kdlon
131         ZFAHDD(jl,indd)=0.
132         ZFDHDD(jl,indd)=0.
133         ZBHDD(jl,indd)=0.
134                                            enddo
135      ENDDO
136                                            do jl=1,kdlon
137      ZBSDD(jl)=0.
138                                            enddo
139c!
140c! boucle sur les  bandes hors CO2
141c!
142      DO 10001 iir=3,nir
143c!
144                                            do jl=1,kdlon
145        ZZBHDD(JL,1)=PBTOP(JL,iir)/pi
146                                            enddo
147        DO J1=2,NDD+1
148                                            do jl=1,kdlon
149           ZZBHDD(JL,J1)=
150     &     ZZBHDD(JL,J1-1)-PDBSL(JL,iir,NDD-J1+2)/pi
151                                            enddo
152        ENDDO
153                                            do jl=1,kdlon
154        ZZBSDD(JL)=PBSUR(JL,iir)/pi
155                                            enddo
156
157C
158C     ------------------------------------------------------------------
159C
160C*         2.0.2   preparation des coefficients de diffusion
161C                  -----------------------------------------
162C
163c! les omega, g, tau ... boucle de bas en haut
164        DO J2=1,nlaylte-1
165          J2DD2=(nlaylte-J2+1)*2
166          J2DD1=J2DD2-1
167          J2BOT=3*J2-2
168          J2TOP=3*J2+1
169          do jl=1,kdlon
170            ZTAUDD(JL,J2DD1)=tautotal(jl,J2,iir)*0.5
171            ZTAUDD(JL,J2DD2)=ZTAUDD(JL,J2DD1)
172            ZOMEGADD(JL,J2DD1)=omegtotal(jl,J2,iir)
173            ZOMEGADD(JL,J2DD2)=omegtotal(jl,J2,iir)
174            ZGDD(JL,J2DD1)=gtotal(jl,J2,iir)
175            ZGDD(JL,J2DD2)=gtotal(jl,J2,iir)
176          enddo
177        ENDDO
178        J2=nlaylte
179        J2DD2=2
180        J2DD1=1
181        J2BOT=3*J2-2
182                                            do jl=1,kdlon
183        ZTAUDD(JL,J2DD1)= tautotal(jl,J2,iir)*0.5
184        ZTAUDD(JL,J2DD2)= tautotal(jl,J2,iir)*0.5
185        ZOMEGADD(JL,J2DD1)= omegtotal(jl,J2,iir)
186        ZOMEGADD(JL,J2DD2)= omegtotal(jl,J2,iir)
187        ZGDD(JL,J2DD1)= gtotal(jl,J2,iir)
188        ZGDD(JL,J2DD2)= gtotal(jl,J2,iir)
189                                            enddo
190C
191C     ------------------------------------------------------------------
192C
193C*         2.0.3   calcul de la diffusion
194C                  ----------------------
195C
196
197c-----------------------------------------------------------------------
198        CALL flusv(KDLON,0
199     &  ,NDD,ZOMEGADD,ZGDD,ZTAUDD,PEMIS
200     &  ,ZZBHDD,ZZBSDD
201     &  ,ZZFAHDD,ZZFDHDD)
202c!
203c!  Cumul des flux sur le spectre hors bande du CO2
204c!
205        DO indd=1,ndd+1
206           do jl=1,kdlon
207             ZFAHDD(jl,indd)=ZFAHDD(jl,indd)+ZZFAHDD(jl,indd)
208             ZFDHDD(jl,indd)=ZFDHDD(jl,indd)+ZZFDHDD(jl,indd)
209           enddo
210        ENDDO
21110001 CONTINUE
212
213      DO J2=1,nlaylte+1
214        J2DD=(nlaylte-J2+1)*2+1
215        do jl=1,kdlon
216          PFLUC(JL,1,J2)=PFLUC(JL,1,J2)+ZFAHDD(JL,J2DD)
217          PFLUC(JL,2,J2)=PFLUC(JL,2,J2)-ZFDHDD(JL,J2DD)
218        enddo
219      ENDDO
220
221
222      END
Note: See TracBrowser for help on using the repository browser.