source: trunk/LMDZ.VENUS/libf/phyvenus/phytrac_emiss.F @ 1521

Last change on this file since 1521 was 1519, checked in by slebonnois, 9 years ago

SL: volcanisme et traceurs sur Venus

File size: 6.2 KB
Line 
1!
2! $Header: /home/cvsroot/LMDZ4/libf/phylmd/phytrac.F,v 1.16 2006/03/24 15:06:23 lmdzadmin Exp $
3!
4c
5c
6      SUBROUTINE phytrac_emiss (timesimu,
7     I                    debutphy,
8     I                    lafin,
9     I                    nqmax,
10     I                    nlon,
11     I                    nlev,
12     I                    pdtphys,
13     I                    paprs,
14     I                    xlat,xlon,
15     O                    tr_seri)
16
17c======================================================================
18c Auteur(s) FH
19c Objet: Moniteur general des tendances traceurs
20c
21cAA Remarques en vrac:
22cAA--------------------
23cAA 1/ le call phytrac se fait avec nqmax
24c
25c SL: Janvier 2014
26c Version developed for surface emission
27c Maybe could be used just to compute the 'source' variable from physiq
28c
29c======================================================================
30      USE ioipsl
31      USE infotrac
32      USE control_mod
33      use dimphy
34      USE comgeomphy
35      USE chemparam_mod,only:M_tr
36      IMPLICIT none
37#include "YOMCST.h"
38#include "dimensions.h"
39#include "clesphys.h"
40#include "paramet.h"
41c======================================================================
42
43c Arguments:
44
45c   EN ENTREE:
46c   ==========
47
48      real timesimu   ! duree depuis debut simu (s)
49      logical debutphy       ! le flag de l'initialisation de la physique
50      logical lafin          ! le flag de la fin de la physique
51      integer nqmax ! nombre de traceurs auxquels on applique la physique
52      integer nlon  ! nombre de points horizontaux
53      integer nlev  ! nombre de couches verticales
54      real pdtphys  ! pas d'integration pour la physique (seconde)
55      real paprs(nlon,nlev+1)  ! pression pour chaque inter-couche (en Pa)
56      REAL xlat(nlon)       ! latitudes pour chaque point
57      REAL xlon(nlon)       ! longitudes pour chaque point
58
59c   EN ENTREE/SORTIE:
60c   =================
61
62      real tr_seri(nlon,nlev,nqmax) ! traceur 
63
64cAA ----------------------------
65cAA  VARIABLES LOCALES TRACEURS
66cAA ----------------------------
67
68c pour emission volcan
69      real :: deltatr(klon,klev,nqtot)
70
71      integer,parameter :: nblat=5,nblon=4,nbz=3
72      integer,parameter :: Nemiss=1     ! duree emission (Ed)
73      integer,save :: Nheight(nbz)      ! layer emission
74      real,save :: so2_quantity         ! quantity so2 (kg)
75      real,save :: lat_volcan(nblat),lon_volcan(nblon)
76      real,save :: area_emiss(nblat,nblon)
77      integer,save :: ig_volcan(nblat,nblon)
78
79      INTEGER i, k, it
80      integer ilat,ilon,iz
81      real    deltalat,deltalon
82c======================================================================
83
84c EMISSION TRACEURS
85
86c---------
87c debutphy
88c---------     
89      if (debutphy) then
90
91        print*,"DEBUT PHYTRAC"
92        print*,"PHYTRAC: EMISSION"
93
94        ALLOCATE(M_tr(nqtot))
95        M_tr(:)=64.                 ! SO2
96       
97C=========================================================================
98c Caracteristiques des traceurs emis:
99C=========================================================================
100
101c nombre total de traceur
102         if (nbz*nblat*nblon .gt. nqtot) then
103            print*, nbz*nblat*nblon, nqtot
104            write(*,*) "Attention, pas assez de traceurs"
105            write(*,*) "le dernier sera bien le dernier"
106         endif
107
108c quantite en kg
109         so2_quantity = 20.*10.**9.
110
111c height (in layer index)
112         Nheight(1) =  6  ! ~ 1 km
113         Nheight(2) = 16  ! ~ 25 km
114         Nheight(3) = 24  ! ~ 50 km
115
116c localisation volcan
117         lat_volcan(1) =  70.
118         lat_volcan(2) =  35.
119         lat_volcan(3) =   0.
120         lat_volcan(4) = -35.
121         lat_volcan(5) = -70.
122         lon_volcan(1) = -125.
123         lon_volcan(2) =  -35.
124         lon_volcan(3) =   55.
125         lon_volcan(4) =  145.
126         
127         ig_volcan(ilat,ilon)= 0
128         deltalat = 180./jjm
129         deltalon = 360./iim
130
131         do i=1,nlon
132          do ilat=1,nblat
133           do ilon=1,nblon
134            if ((xlat(i).ge.lat_volcan(ilat))
135     &     .and.((xlat(i)-deltalat).lt.lat_volcan(ilat))
136     &     .and.(xlon(i).le.lon_volcan(ilon))
137     &     .and.((xlon(i)+deltalon).gt.lon_volcan(ilon)) ) then
138             ig_volcan(ilat,ilon)= i
139             area_emiss(ilat,ilon) = airephy(i)
140             print*,"Lat,lon=",ilat,ilon," OK"
141            end if
142           end do
143          end do
144         end do
145
146c Reinit des traceurs si necessaire
147         if (reinit_trac) then
148           tr_seri(:,:,:)=0.
149         endif
150         
151C=========================================================================
152C=========================================================================
153      ENDIF  ! fin debutphy
154c-------------
155c fin debutphy
156c-------------
157
158c======================================================================
159c Emission d'un traceur pendant un certain temps
160c necessite raz_date=1 dans run.def
161c et reinit_trac=y
162c======================================================================
163       deltatr(:,:,:) = 0.
164
165c source appliquee pendant Nemiss Ed
166       if (timesimu .lt. 86400*Nemiss) then
167
168c emet les traceurs qui sont presents sur la grille
169        do ilat  = 1,nblat
170        do ilon  = 1,nblon
171         if (ig_volcan(ilat,ilon).ne.0) then
172         
173          do iz = 1,nbz
174           it=min( (iz-1)*nblat*nblon+(ilat-1)*nblon+ilon , nqtot )         
175           i=ig_volcan(ilat,ilon)
176           
177c injection dans une seule cellule:
178c source en kg/kg/s
179c            deltatr(i,Nheight(iz),it) = so2_quantity/(86400.*Nemiss) ! kg/s
180c     $ *RG/( area_emiss(ilat,ilon)
181c     $      *(paprs(i,Nheight(iz))-paprs(i,Nheight(iz)+1)) )    ! /kg (masse cellule)
182     
183c            tr_seri(i,Nheight(iz),it) = tr_seri(i,Nheight(iz),it)
184c     $      + deltatr(i,Nheight(iz),it)*pdtphys
185
186c injection dans toute la colonne (a faire):
187            do k=1,Nheight(iz)
188             deltatr(i,k,it) = so2_quantity/(86400.*Nemiss) ! kg/s
189     $  *RG/( area_emiss(ilat,ilon)
190     $       *(paprs(i,1)-paprs(i,Nheight(iz)+1)) )    ! /kg (masse colonne)
191     
192             tr_seri(i,k,it) = tr_seri(i,k,it)+deltatr(i,k,it)*pdtphys
193            end do
194           
195          end do
196         
197         endif  ! ig_volcan!=0
198        end do
199        end do
200
201       end if  ! duree emission
202       
203c======================================================================
204c======================================================================
205
206      RETURN
207      END
Note: See TracBrowser for help on using the repository browser.