source: trunk/LMDZ.MARS/libf/phymars/NLTEdlvr09_TCOOL.F @ 481

Last change on this file since 481 was 414, checked in by aslmd, 14 years ago

LMDZ.MARS : NEW NLTE MODEL FROM GRANADA AMIGOS

23/11/11 == FGG + MALV

New parameterization of the NLTE 15 micron cooling. The old parameterization is kept as an option, including or not variable atomic oxygen concentration. A new flag is introduced in callphys.def, nltemodel, to select which parameterization wants to be used (new one, old one with variable [O], or old one with fixed [O], see below). Includes many new subroutines and commons in phymars. Some existing routines are also modified:

-physiq.F. Call to the new subroutine NLTE_leedat in first call. Call to nltecool modified to allow for variable atomic oxygen. Depending on the value of nltemodel, the new subroutine NLTEdlvr09_TCOOL is called instead of nltecool.

-inifis.F. Reading of nltemodel is added.

-callkeys.h Declaration of nltemodel is added.

The following lines should be added to callphys.def (ideally after setting callnlte):

# NLTE 15um scheme to use.
# 0-> Old scheme, static oxygen
# 1-> Old scheme, dynamic oxygen
# 2-> New scheme
nltemodel = 2

A new directory, NLTEDAT, has to be included in datagcm.

Improvements into NLTE NIR heating parameterization to take into account variability with O/CO2 ratio and SZA. A new subroutine, NIR_leedat.F, and a new common, NIRdata.h, are included. A new flag, nircorr, is added in callphys.def, to include or not these corrections. The following files are modified:

-nirco2abs.F: nq and pq are added in the arguments. The corrections factors are interpolated to the GCM grid and included in the clculation. A new subroutine, interpnir, is added at the end of the file.

-physiq.F: Call to NIR_leedat added at first call. Modified call to nirco2abs

-inifis: Reading new flag nircorr.

-callkeys.h: Declaration of nircorr.

The following lines have to be added to callphys.def (ideally after callnirco2):

# NIR NLTE correction for variable SZA and O/CO2?
# matters only if callnirco2=T
# 0-> no correction
# 1-> include correction
nircorr=1

A new data file, NIRcorrection_feb2011.dat, has to be included in datagcm.

Small changes to the molecular diffusion scheme to fix the number of species considered, to avoid problems when compiling with more than 15 tracers (for example, when CH4 is included). Modified subroutines: aeronomars/moldiff.F and aeronomars/moldiffcoeff.F

File size: 4.6 KB
Line 
1c***********************************************************************
2                                                           
3        subroutine NLTEdlvr09_TCOOL (ngridgcm,n_gcm, 
4     @          p_gcm, t_gcm, z_gcm,
5     @          co2vmr_gcm, n2vmr_gcm, covmr_gcm, o3pvmr_gcm, 
6     @          q15umco2_gcm )
7
8c       jul 2011 malv+fgg                             
9c***********************************************************************
10                                                           
11        implicit none                                 
12         
13        include "dimensions.h"
14        include "dimphys.h"
15        include 'nltedefs.h'
16        include 'nlte_atm.h'       
17        include 'nlte_results.h' 
18        include 'tcr_15um.h'
19        include 'nlte_matrix.h'     
20        include 'nlte_data.h'
21        include "chimiedata.h"
22        include "conc.h"
23
24c Arguments
25        integer n_gcm,ngridgcm
26        real p_gcm(ngridgcm,n_gcm), t_gcm(ngridgcm,n_gcm)
27        real co2vmr_gcm(ngridgcm,n_gcm), n2vmr_gcm(ngridgcm,n_gcm)
28        real covmr_gcm(ngridgcm,n_gcm), o3pvmr_gcm(ngridgcm,n_gcm)
29        real q15umco2_gcm(ngridgcm,n_gcm)
30        real z_gcm(ngridgcm,n_gcm)
31                                                             
32c local variables and constants                 
33        integer         iz, i, j, k, l, ig,istyle
34                                                           
35        real*8          q15umco2_nl(nl)                       
36        real*8          zld(nl), zgcmd(n_gcm)                     
37        real*8          auxdgcm(n_gcm)                       
38
39
40        real p_ig(n_gcm),z_ig(n_gcm)
41        real t_ig(n_gcm)
42        real co2_ig(n_gcm),n2_ig(n_gcm),co_ig(n_gcm),o3p_ig(n_gcm)
43        real mmean_ig(n_gcm),cpnew_ig(n_gcm)
44       
45
46c**********************************************************************
47
48        do ig=1,ngridgcm
49           do l=1,n_gcm
50              p_ig(l)=p_gcm(ig,l)
51              t_ig(l)=t_gcm(ig,l)
52              co2_ig(l)=co2vmr_gcm(ig,l)
53              n2_ig(l)=n2vmr_gcm(ig,l)
54              o3p_ig(l)=o3pvmr_gcm(ig,l)
55              co_ig(l)=covmr_gcm(ig,l)
56              z_ig(l)=z_gcm(ig,l)/1000.
57              mmean_ig(l)=mmean(ig,l)
58              cpnew_ig(l)=cpnew(ig,l)
59           enddo
60
61           call NLTEdlvr09_ZGRID (n_gcm, 
62     @          p_ig, t_ig, z_ig,
63     @          co2_ig,n2_ig,co_ig,
64     $          o3p_ig , mmean_ig, cpnew_ig)
65
66c And sets zero to all Curtis Matrixes and Escape Transmissions
67           call leetvt
68           call zero3m (c110,cup110,cdw110, nl)
69           call zero2v (taugr110,vc110, nl)
70           if (itt_cza.eq.24) then
71              call mzescape ( ig,taustar11,tauinf110,tauii110,
72     @                        1, 1,irw_mztf,imu )
73              istyle=2
74              call mzescape_normaliz ( taustar11, istyle )   
75           else
76              call mztud (ig, c110,cup110,cdw110, vc110,taugr110,           
77     @               1, 1, irw_mztf, imu, 0,0,0 )
78           endif
79           call mztvc (ig,vc210, 1, 2, irw_mztf, imu, 0,0,0 )
80           call mztvc (ig,vc310, 1, 3, irw_mztf, imu, 0,0,0 )
81           call mztvc (ig,vc410, 1, 4, irw_mztf, imu, 0,0,0 )
82           call mzescape_fb (ig)       
83           input_cza = 0 
84           call NLTEdlvr09_CZALU(ig)
85
86           if (itt_cza.ne.24) then
87              call mzescape_fh (ig)       
88              input_cza = 1 
89              call NLTEdlvr09_CZALU(ig)
90           endif
91
92
93c total cooling rate                                               
94c smoothing and
95c interpolation back to original Pgrid
96c
97          do i = 1, nl                                   
98             q15umco2_nl(i) = hr110(i) + hr210(i) + hr310(i) + hr410(i)
99     @            + hr121(i)
100          enddo             
101         
102          do i=1,nl                                     
103             zld(i) = - dble ( alog(pl(i)) )                     
104          enddo                                         
105          do i=1,n_gcm                                     
106             zgcmd(i) = - dble( alog(p_gcm(ig,i)) ) 
107          enddo                   
108          call zerov( auxdgcm, n_gcm )
109          call interdp_limits                           
110     @    (     auxdgcm,    zgcmd, n_gcm,   jlowerboundary,jtopboundary,
111     @         q15umco2_nl,      zld,    nl,   1,nl,   1 )       
112          call suaviza ( auxdgcm, n_gcm, 1, zgcmd )     
113                                               
114          do i=1,n_gcm                                     
115             q15umco2_gcm(ig,i) = sngl( auxdgcm(i) )                       
116          enddo
117         
118       enddo
119       
120       
121c end subroutine                                   
122        return
123        end                                           
Note: See TracBrowser for help on using the repository browser.