source: dynamico_lmdz/aquaplanet/LMDZ5/libf/phylmd/tracinca_mod.F90 @ 3831

Last change on this file since 3831 was 3831, checked in by ymipsl, 9 years ago

module reorganisation for a cleaner dyn-phys interface
YM

File size: 7.1 KB
Line 
1!$Id $
2!
3MODULE tracinca_mod
4!
5! This module prepares and calls the INCA main subroutines.
6
7!
8  CHARACTER(len=4),SAVE :: config_inca
9!$OMP THREADPRIVATE(config_inca)
10 
11CONTAINS
12
13  SUBROUTINE tracinca_init(aerosol,lessivage)
14    ! This subroutine initialize some control varaibles.
15
16    USE infotrac_phy
17    USE mod_phys_lmdz_para
18    USE ioipsl, ONLY : getin
19    IMPLICIT NONE
20   
21    ! Output variables
22    LOGICAL,DIMENSION(nbtr), INTENT(OUT) :: aerosol
23    LOGICAL,INTENT(OUT) :: lessivage
24   
25    !Config  Key  = config_inca
26    !Config  Desc = Choix de configuration de INCA
27    !Config  Def  = none
28    !Config  Help = Choix de configuration de INCA :
29    !Config         'none' = sans INCA
30    !Config         'chem' = INCA avec calcul de chemie
31    !Config         'aero' = INCA avec calcul des aerosols
32    config_inca = 'none'
33    IF (is_master) CALL getin('config_inca',config_inca)
34    CALL bcast(config_inca)
35     
36    ! Initialization
37    lessivage  =.FALSE.
38    aerosol(:) = .FALSE.
39       
40  END SUBROUTINE tracinca_init
41
42  SUBROUTINE tracinca(                                &
43       nstep,    julien,   gmtime,         lafin,     &
44       pdtphys,  t_seri,   paprs,          pplay,     &
45       pmfu,     upwd,     ftsol,  pctsrf, pphis,     &
46       pphi,     albsol,   sh,             rh,        &
47       cldfra,   rneb,     diafra,         cldliq,    &
48       itop_con, ibas_con, pmflxr,         pmflxs,    &
49       prfl,     psfl,     aerosol_couple, flxmass_w, &
50       tau_aero, piz_aero, cg_aero,        ccm,       &
51       rfname,                                        &
52       tr_seri,  source)     
53
54!========================================================
55!    -- CHIMIE INCA --
56!========================================================
57
58    USE dimphy
59    USE infotrac_phy
60    USE vampir
61    USE geometry_mod, ONLY : cell_area
62    USE indice_sol_mod
63
64   
65    IMPLICIT NONE
66   
67
68!==========================================================================
69!                   -- DESCRIPTION DES ARGUMENTS --
70!==========================================================================
71
72
73! EN ENTREE ...
74!
75!Configuration grille,temps:
76    INTEGER,INTENT(IN) :: nstep      ! Appel physique
77    INTEGER,INTENT(IN) :: julien     ! Jour julien
78    REAL,INTENT(IN)    :: gmtime
79    REAL,INTENT(IN)    :: pdtphys    ! Pas d'integration pour la physique (seconde)
80    LOGICAL,INTENT(IN) :: lafin      ! le flag de la fin de la physique
81   
82
83!Physique:
84!--------
85    REAL,DIMENSION(klon,klev),INTENT(IN)   :: t_seri  ! Temperature
86    REAL,DIMENSION(klon,klev),INTENT(IN)   :: sh      ! humidite specifique
87    REAL,DIMENSION(klon,klev),INTENT(IN)   :: rh      ! humidite relative
88    REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs   ! pression pour chaque inter-couche (en Pa)
89    REAL,DIMENSION(klon,klev),INTENT(IN)   :: pplay   ! pression pour le mileu de chaque couche (en Pa)
90    REAL,DIMENSION(klon,klev),INTENT(IN)   :: pphi    ! geopotentiel
91    REAL,DIMENSION(klon),INTENT(IN)        :: pphis
92    REAL,DIMENSION(klon,klev),INTENT(IN)   :: cldliq  ! eau liquide nuageuse
93    REAL,DIMENSION(klon,klev),INTENT(IN)   :: cldfra  ! fraction nuageuse (tous les nuages)
94    REAL,DIMENSION(klon,klev),INTENT(IN)   :: diafra  ! fraction nuageuse (convection ou stratus artificiels)
95    REAL,DIMENSION(klon,klev),INTENT(IN)   :: rneb    ! fraction nuageuse (grande echelle)
96    INTEGER,DIMENSION(klon),INTENT(IN)     :: itop_con
97    INTEGER,DIMENSION(klon),INTENT(IN)     :: ibas_con
98    REAL,DIMENSION(klon),INTENT(IN)        :: albsol  ! albedo surface
99!
100!Convection:
101!----------
102    REAL,DIMENSION(klon,klev),INTENT(IN) :: pmfu  ! flux de masse dans le panache montant - Tiedtke
103    REAL,DIMENSION(klon,klev),INTENT(IN) :: upwd  ! flux de masse dans le panache montant - Emanuel
104
105!...Tiedke     
106    REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: pmflxr, pmflxs ! Flux precipitant de pluie, neige aux interfaces [convection]
107    REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: prfl, psfl ! Flux precipitant de pluie, neige aux interfaces [large-scale]
108
109    LOGICAL,INTENT(IN)                       :: aerosol_couple
110    REAL,DIMENSION(klon,klev),INTENT(IN)     :: flxmass_w
111    REAL,DIMENSION(klon,klev,9,2),INTENT(IN) :: tau_aero
112    REAL,DIMENSION(klon,klev,9,2),INTENT(IN) :: piz_aero
113    REAL,DIMENSION(klon,klev,9,2),INTENT(IN) :: cg_aero
114    CHARACTER(len=4),DIMENSION(9),INTENT(IN) :: rfname
115    REAL,DIMENSION(klon,klev,2),INTENT(IN)   :: ccm
116
117! Arguments necessaires pour les sources et puits de traceur:
118    REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: ftsol  ! Temperature du sol (surf)(Kelvin)
119    REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: pctsrf ! Pourcentage de sol f(nature du sol)
120
121
122  ! InOutput argument
123    REAL,DIMENSION(klon,klev,nbtr),INTENT(INOUT) :: tr_seri ! Concentration Traceur [U/KgA] 
124
125  ! Output arguments
126    REAL,DIMENSION(klon,nbtr), INTENT(OUT)        :: source  ! a voir lorsque le flux de surface est prescrit
127
128!=======================================================================================
129!                        -- VARIABLES LOCALES TRACEURS --
130!=======================================================================================
131
132    INTEGER :: k
133    REAL,DIMENSION(klon,klev) :: pdel
134    REAL,DIMENSION(klon,klev) :: zpmfu  ! flux de masse dans le panache montant
135    REAL    :: calday
136    INTEGER :: ncsec
137
138    CALL VTe(VTphysiq)
139    CALL VTb(VTinca)
140   
141    calday = REAL(julien) + gmtime
142    ncsec  = NINT (86400.*gmtime)
143     
144    DO k = 1, klev
145       pdel(:,k) = paprs(:,k) - paprs (:,k+1)
146    END DO
147 
148#ifdef INCA
149    IF (config_inca == 'aero') THEN
150       zpmfu(:,:)=pmfu(:,:)       
151    ELSE IF (config_inca == 'aeNP') THEN
152       zpmfu(:,:)=upwd(:,:)
153    ENDIF
154
155    CALL aerosolmain(                    &
156         aerosol_couple,tr_seri,pdtphys, &
157         pplay,pdel,prfl,pmflxr,psfl,    &
158         pmflxs,zpmfu,itop_con,ibas_con,  &
159         pphi,cell_area,nstep,rneb,t_seri, &     
160         rh,tau_aero,piz_aero,cg_aero,   &
161         rfname,ccm,lafin, config_inca)
162#endif
163
164
165#ifdef INCA
166    CALL chemmain (tr_seri, &   !mmr
167         nstep,      & !nstep
168         calday,     & !calday
169         julien,     & !ncdate
170         ncsec,      & !ncsec
171         1,          & !lat
172         pdtphys,    & !delt
173         paprs(1,1), & !ps
174         pplay,      & !pmid
175         pdel,       & !pdel
176         cell_area,    &
177         pctsrf(1,1),& !oro
178         ftsol,      & !tsurf
179         albsol,     & !albs
180         pphi,       & !zma
181         pphis,      & !phis
182         cldfra,     & !cldfr
183         rneb,       & !cldfr_st
184         diafra,     & !cldfr_cv
185         itop_con,   & !cldtop
186         ibas_con,   & !cldbot
187         cldliq,     & !cwat
188         prfl,       & !flxrst
189         pmflxr,     & !flxrcv
190         psfl,       & !flxsst
191         pmflxs,     & !flxscv
192         zpmfu,      & !flxupd   !--now depends on whether AP or NP
193         flxmass_w,  & !flxmass_w
194         t_seri,     & !tfld
195         sh,         & !sh
196         rh,         & !rh
197         iip1,       & !nx
198         jjp1,       & !ny
199         source )
200#endif
201   
202    CALL VTe(VTinca)
203    CALL VTb(VTphysiq)
204   
205   
206  END SUBROUTINE tracinca
207
208
209END MODULE tracinca_mod
Note: See TracBrowser for help on using the repository browser.