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

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

LMDZ.MARS
IMPORTANT CHANGE

  • Remove all reference/use of nlayermx and dimphys.h
  • Made use of automatic arrays whenever arrays are needed with dimension nlayer
  • Remove lots of obsolete reference to dimensions.h
  • Converted iono.h and param_v4.h into corresponding modules

(with embedded subroutine to allocate arrays)
(no arrays allocated if thermosphere not used)

  • Deleted param.h and put contents into module param_v4_h
  • Adapted testphys1d, newstart, etc...
  • Made DATA arrays in param_read to be initialized by subroutine

fill_data_thermos in module param_v4_h

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