source: trunk/LMDZ.VENUS/libf/phyvenus/compo_hedin_mod2.F90 @ 3900

Last change on this file since 3900 was 3884, checked in by ikovalenko, 4 months ago
File size: 5.3 KB
Line 
1  module compo_hedin83_mod2
2  !!05/2013 Laura Salmi
3  !!03/2014 revision Gabriella Gilli
4  !!Calcul des vmr pour CO2, CO, O, N et N2 en s'appuyant sur les tables donnees dans l'article Hedin (1983)
5 
6  implicit none     
7  contains
8
9        subroutine compo_hedin83_init2
10        use YOMCST_mod
11        implicit none
12!#include "YOMCST.h"
13#include "hedin.h"
14
15        REAL :: alpha
16        REAL :: mu(musize),z(zsize)
17        REAL :: T(musize,zsize)
18        REAL :: ntot(musize, zsize)
19        REAL :: nco2(musize, zsize),nn2(musize, zsize)
20        REAL :: nco(musize, zsize), no(musize, zsize)
21        REAL :: nn(musize, zsize),nhe(musize, zsize)
22        REAL :: sig_co2(zsize), sig_o(zsize), sig_n2(zsize),sig_co(zsize)
23        integer :: i,j
24        REAL factor_ox3p
25
26
27! Initialisation des sza et de l'atlitude
28        mu(1)=1.
29        do i=2,musize-1
30              mu(i)=mu(i-1)-(2./(1.*musize-1.))
31        enddo
32        mu(musize)=-1.
33
34        z(1)=100.
35        do i=2,zsize
36              z(i)=z(i-1)+5.
37        enddo
38
39!Lecture des variables (tables de Hedin (1983))
40
41       open( 11, file='HIGHATM/noon.txt')
42      read (11, *)
43      do i=1,zsize
44         read (11,*) T(1,i), nco2(1,i),no(1,i), nco(1,i), nn2(1,i),nn(1,i), nhe(1,i)
45      enddo
46      close (11)
47       open( 12, file='HIGHATM/midnight.txt')
48      read (12, *)
49      do i=1,zsize
50         read (12,*) T(musize,i), nco2(musize,i),no(musize,i), nco(musize,i), nn2(musize,i), nn(musize,i), nhe(musize,i)
51      enddo
52      close (12)
53
54!Dependance en SZA
55
56        do i=2,musize-1
57          alpha=0.5*tanh(4.*(mu(i)-0.5))+0.5
58          do j=1,zsize
59                T(i,j)=alpha*T(1,j)+(1.-alpha)*T(musize,j)
60                nco2(i,j)=alpha*nco2(1,j)+(1.-alpha)*nco2(musize,j)
61                no(i,j)=alpha*no(1,j)+(1.-alpha)*no(musize,j)
62                nco(i,j)=alpha*nco(1,j)+(1.-alpha)*nco(musize,j)
63                nn2(i,j)=alpha*nn2(1,j)+(1.-alpha)*nn2(musize,j)
64                nn(i,j)=alpha*nn(1,j)+(1.-alpha)*nn(musize,j)
65                nhe(i,j)=alpha*nhe(1,j)+(1.-alpha)*nhe(musize,j)
66
67          enddo
68         enddo
69
70!! Test: effect of varying atomic oxygen abundances
71
72         factor_ox3p = 2.
73           DO i=1,musize
74             DO j=1,zsize
75               no(i,j)    =  factor_ox3p* no(i,j)
76             ENDDO
77           ENDDO
78
79
80
81
82
83
84!! Conversion en volume mixture ratio
85
86           do i=1,musize
87                  do j=1,zsize
88                  ntot(i,j)=nco2(i,j)+nn2(i,j)+nn(i,j)+nco(i,j)+no(i,j)+nhe(i,j)+2e-3*nco2(i,j) !for o2 and no si on change la proportion changer aussi dans euvheat
89                  pres_hedin(i,j)=ntot(i,j)*1e6*RKBOL*T(i,j)
90                 co2_hedin(i,j)=nco2(i,j)/ntot(i,j)
91                 co_hedin(i,j)=nco(i,j)/ntot(i,j)
92                 n2_hedin(i,j)=nn2(i,j)/ntot(i,j)
93                 n_hedin(i,j)=nn(i,j)/ntot(i,j)
94                 o_hedin(i,j)=no(i,j)/ntot(i,j)
95                 mu_hedin(i)=mu(i)
96
97          enddo
98         enddo
99
100!           print*, pres_hedin(1,:)
101!           print*, ' '
102!           print*, T(musize,:) 
103!           print*, ' '
104!            print*, T(1,:)
105!               print*, nn2(10,:)
106!               print*, ' '
107!               print*,nco2(10,:)
108!               print*, ' '
109!               print*,nco(10,:)
110!               print*, ' '
111!               print*,no(10,:)
112
113!               print*, " "
114!               print*, ntot(1,:)
115!               print*, co2_hedin(1,:)
116!               print*, mu_hedin(:)
117!               print*, " "
118!               print*, n2_hedin(1,:)
119!               print*, " "
120!               print*, o_hedin(1,:)
121!               print*, " "
122!               print*, co_hedin(1,:)
123!               print*, ' '
124!           stop
125
126       end subroutine compo_hedin83_init2
127
128
129
130SUBROUTINE compo_hedin83_mod(pression,mu0,co2vmr_gcm,covmr_gcm,ovmr_gcm,n2vmr_gcm,nvmr_gcm)
131
132
133!!Interpolation des profils de Hedin (1983) sur la grille du modele
134
135        use dimphy
136        implicit none
137        include 'hedin.h'
138        REAL, intent(in) :: pression(klon,klev), mu0(klon)
139        integer :: i,k,iz,jmu,jz,z_ok, mu_ok
140        REAL :: factp(klev)
141        REAL, intent(out) :: co2vmr_gcm(klon,klev),covmr_gcm(klon,klev)
142        REAL, intent(out) ::ovmr_gcm(klon,klev), n2vmr_gcm(klon,klev), nvmr_gcm(klon,klev)
143        REAL :: ang0, ang_hedin
144!        print*, pres_hedin(1,:)
145!       print*, ' '
146!       print*, pres_hedin(10,:)
147!       stop
148       do i=1,klon
149         ang0=acos(mu0(i))*180./3.1415
150         do jmu=1,musize
151            ang_hedin=acos(mu_hedin(jmu))*180./3.1415
152         if (ang_hedin.le.ang0 ) then   
153!          if (mu_hedin(jmu) .le. mu0(i) ) then 
154              mu_ok = jmu         
155         endif
156         enddo
157!       print*, ang_hedin, ang0, mu_ok
158!       STOP
159
160        do k=1,klev
161         z_ok=2         
162         do jz=2,zsize-1
163           if (pres_hedin(mu_ok,jz).ge.pression(i,k)) then
164                 z_ok = jz+1
165           endif     
166          enddo
167
168        if (pres_hedin(mu_ok,zsize).ge.pression(i,k)) then
169! avoid the extrapolation... Problem when p < 1.E-6 Pa...
170         factp(k) = 1.
171        else
172         factp(k) = (log10(pression(i,k))-log10(pres_hedin(mu_ok,z_ok-1)))/(log10(pres_hedin(mu_ok,z_ok))-log10(pres_hedin(mu_ok,z_ok-1)))
173        endif
174
175        ovmr_gcm(i,k) = (10.**(log10(o_hedin(mu_ok,z_ok))*factp(k)+log10(o_hedin(mu_ok,z_ok-1))*(1.-factp(k))))
176        n2vmr_gcm(i,k) = 10.**(log10(n2_hedin(mu_ok,z_ok))*factp(k)+log10(n2_hedin(mu_ok,z_ok-1))*(1.-factp(k)))
177        nvmr_gcm(i,k) = 10.**(log10(n_hedin(mu_ok,z_ok))*factp(k)+log10(n_hedin(mu_ok,z_ok-1))*(1.-factp(k)))
178        covmr_gcm(i,k) = 10.**(log10(co_hedin(mu_ok,z_ok))*factp(k)+log10(co_hedin(mu_ok,z_ok-1))*(1.-factp(k)))
179        co2vmr_gcm(i,k) =1.- (ovmr_gcm(i,k)+n2vmr_gcm(i,k)+covmr_gcm(i,k))
180!        co2vmr_gcm(i,k) =1.- (ovmr_gcm(i,k)+n2vmr_gcm(i,k)+covmr_gcm(i,k)+nvmr_gcm(i,k))
181
182        enddo   
183       enddo
184!      stop
185       
186
187END SUBROUTINE compo_hedin83_mod
188
189
190  end module compo_hedin83_mod2
191
Note: See TracBrowser for help on using the repository browser.