source: trunk/LMDZ.MARS/libf/phymars/lwmain.F @ 1880

Last change on this file since 1880 was 1772, checked in by aslmd, 7 years ago

LMDZ.MARS yomlw 1. add the possibility to deallocate common modules with subroutine (as in previous commit) 2. moved xi initialization to yomlw

File size: 7.2 KB
Line 
1       subroutine lwmain (ig0,icount,kdlon,kflev
2     .                   ,dp,dt0,emis
3     .                   ,plev,tlev,tlay,aerosol,coolrate
4     .                   ,fluxground,fluxtop
5     .                   ,netrad
6     &                   ,QIRsQREF3d,omegaIR3d,gIR3d
7     &                   ,co2ice)
8
9c----------------------------------------------------------------------
10c     LWMAIN     organizes the LTE longwave calculations
11c     for layer 1 to layer "nlaylte" (stored in  "yomlw_h")
12c----------------------------------------------------------------------
13
14      use dimradmars_mod, only: ndlo2, nflev, nir, ndlon, nuco2
15      use dimradmars_mod, only: naerkind
16      use yomlw_h, only: nlaylte, xi
17      implicit none
18 
19#include "callkeys.h"
20#include "comg1d.h"
21
22c----------------------------------------------------------------------
23c         0.1   arguments
24c               ---------
25c                                                            inputs:
26c                                                            -------
27      integer ig0
28      integer icount
29      integer kdlon            ! part of ngrid
30      integer kflev            ! part of nlayer
31
32      real dp (ndlo2,kflev)         ! layer pressure thickness (Pa)
33      real dt0 (ndlo2)              ! surface temperature discontinuity (K)
34      real emis (ndlo2)             ! surface emissivity
35      real plev (ndlo2,kflev+1)     ! level pressure (Pa)
36      real tlev (ndlo2,kflev+1)     ! level temperature (K)
37      real tlay (ndlo2,kflev)       ! layer temperature (K)
38      real aerosol(ndlo2,kflev,naerkind)      !  aerosol extinction optical
39c                         depth at reference wavelength "longrefvis" set
40c                         in dimradmars_mod , in each layer, for one of
41c                         the "naerkind" kind of aerosol optical properties.
42
43
44c                                                            outputs:
45c                                                            --------
46      real coolrate(ndlo2,kflev)      ! cooling rate (K/s)
47      real fluxground(ndlo2)          ! downward ground flux (W/m2)
48      real fluxtop(ndlo2)             ! outgoing upward flux (W/m2) ("OLR")
49      real netrad (ndlo2,kflev)       ! radiative budget (W/m2)
50c     Aerosol optical properties
51      REAL :: QIRsQREF3d(ndlo2,kflev,nir,naerkind)
52      REAL :: omegaIR3d(ndlo2,kflev,nir,naerkind)
53      REAL :: gIR3d(ndlo2,kflev,nir,naerkind)
54
55c----------------------------------------------------------------------
56c         0.2   local arrays
57c               ------------
58
59      real aer_t (ndlon,nuco2,nflev+1)  ! transmission (aer)
60      real co2_u (ndlon,nuco2,nflev+1)  ! absorber amounts (co2)
61      real co2_up (ndlon,nuco2,nflev+1) ! idem scaled by the pressure (co2)
62
63      real bsurf (ndlon,nir)            ! surface spectral planck function
64      real btop (ndlon,nir)             ! top spectral planck function
65      real blev (ndlon,nir,nflev+1)     ! level   spectral planck function
66      real blay (ndlon,nir,nflev)       ! layer   spectral planck function
67      real dblay (ndlon,nir,nflev)      ! layer gradient spectral planck function
68      real dbsublay (ndlon,nir,2*nflev) ! layer gradient spectral planck function
69                                        ! in sub layers
70
71      real tautotal(ndlon,nflev,nir)  ! \   Total single scattering
72      real omegtotal(ndlon,nflev,nir) !  >  properties (Addition of the
73      real gtotal(ndlon,nflev,nir)    ! /   NAERKIND aerosols prop.)
74
75      real newcoolrate(ndlon,nflev) ! cooling rate (K/s) / with implicite scheme
76
77      REAL co2ice(ndlo2)           ! co2 ice surface layer (kg.m-2)
78      REAL emis_gaz(ndlo2)         ! emissivity for gaz computations
79
80      integer jk,jkk,ja,jl
81
82
83c----------------------------------------------------------------------
84c         0.3   Initialisation
85c               --------------
86
87      DO jl=1 , kdlon
88         IF(co2ice(jl) .GT. 20.e-3) THEN
89             emis_gaz(jl)=1.
90         ELSE
91             emis_gaz(jl)=emis(jl)
92         ENDIF
93      ENDDO
94
95c----------------------------------------------------------------------
96c         1.0   planck function
97c               ---------------
98
99      call lwb ( kdlon, kflev, tlev, tlay, dt0
100     .         , bsurf, btop, blay, blev, dblay, dbsublay)
101
102c----------------------------------------------------------------------
103c         2.0   absorber amounts
104c               ----------------
105
106      call lwu ( kdlon, kflev
107     .         , dp, plev, tlay, aerosol
108     &         , QIRsQREF3d,omegaIR3d,gIR3d
109     .         , aer_t, co2_u, co2_up
110     .         , tautotal,omegtotal,gtotal)
111
112c----------------------------------------------------------------------
113c         3.0   transmission functions / exchange coefficiants
114c               ----------------------------------------------
115
116c                                                                distants
117c                                                                --------
118                    if( mod(icount-1,ilwd).eq.0) then
119
120c     print*, 'CALL of DISTANTS'
121      call lwxd ( ig0, kdlon, kflev, emis_gaz
122     .          , aer_t, co2_u, co2_up)
123
124                    endif
125c                                                              neighbours
126c                                                              ----------
127                    if( mod(icount-1,ilwn).eq.0) then
128
129c     print*, 'CALL of NEIGHBOURS'
130      call lwxn ( ig0, kdlon, kflev
131     .          , dp
132     .          , aer_t, co2_u, co2_up)
133
134                    endif
135c                                                              boundaries
136c                                                              ----------
137                    if( mod(icount-1,ilwb).eq.0) then
138
139c     print*, 'CALL of BOUNDARIES'
140      call lwxb ( ig0, kdlon, kflev, emis_gaz
141     .          , aer_t, co2_u, co2_up)
142
143                    endif
144
145c----------------------------------------------------------------------
146c         4.0   cooling rate
147c               ------------
148
149      call lwflux ( ig0, kdlon, kflev, dp
150     .            , bsurf, btop, blev, blay, dbsublay
151     .            , tlay, tlev, dt0      ! pour sortie dans g2d uniquement
152     .            , emis
153     .            , tautotal,omegtotal,gtotal
154     .            , coolrate, fluxground, fluxtop
155     .            , netrad)
156
157c     do jk = 1, nlaylte
158c       print*,coolrate(1,jk)
159c     enddo
160     
161c       do jkk = 0 , nlaylte+1
162c         do jk = 0 , nlaylte+1
163c           do ja = 1 , nuco2
164c             do jl = 1 , ngrid
165c      if (xi (jl,ja,jk,jkk) .LT. 0
166c    .       .OR. xi (jl,ja,jk,jkk) .GT. 1 ) then
167c                 print*,'xi bande',ja,jk,jkk,xi (jl,ja,jk,jkk)
168c      endif
169c             enddo
170c           enddo
171c         enddo
172c       enddo
173
174c----------------------------------------------------------------------
175c
176c          5.    shema semi-implicite  (lwi)
177c                ---------------------------
178c
179c
180      call lwi (ig0,kdlon,kflev,netrad,dblay,dp
181     .          , newcoolrate)
182c
183c  Verif que   (X sol,space) + somme(X i,sol) = 1
184c
185      do jkk = 1 , nlaylte
186        do jl = 1 , kdlon
187c     print*,'NEW et OLD coolrate :',jkk,newcoolrate(jl,jkk)
188c    .  ,coolrate(jl,jkk)
189      coolrate(jl,jkk) = newcoolrate(jl,jkk)
190        enddo
191      enddo
192c
193c----------------------------------------------------------------------
194
195      return
196      end
Note: See TracBrowser for help on using the repository browser.