source: LMDZ5/trunk/libf/phylmd/tracinca_mod.F90 @ 2345

Last change on this file since 2345 was 2345, checked in by Ehouarn Millour, 9 years ago

Physics/dynamics separation:

  • move test_disvert_m to dynlonlat_phylonlat/phylmd since it is only used by ce0l and relies on dynamics.
  • put "config_inca" in tracinca_mod so physics routines can get the info from there rather than from control_mod.
  • get rid of references to "control_mod" from within the physics.

EM

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