source: LMDZ6/branches/blowing_snow/libf/phylmd/tracinca_mod.F90 @ 5018

Last change on this file since 5018 was 4412, checked in by evignon, 21 months ago

travail de l'atelier nuages du 30/01/23: on renomme cldliq (ou radliq) en radocond
car le nom est tres trompeur + on ajoute des commentaires dans lscp_mod

  • 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: 7.7 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
14                     ! config_inca='aeNP' => INCA with aerosols NP (?)
15CONTAINS
16
17  SUBROUTINE tracinca_init(aerosol,lessivage)
18    ! This subroutine initialize some control varaibles.
19
20    USE infotrac_phy, ONLY: nbtr, type_trac
21    IMPLICIT NONE
22   
23    ! Output variables
24    LOGICAL,DIMENSION(nbtr), INTENT(OUT) :: aerosol
25    LOGICAL,INTENT(OUT) :: lessivage
26   
27    ! Initialization
28    lessivage  =.FALSE.
29    aerosol(:) = .FALSE.
30
31    !--- COHERENCE TEST BETWEEN "type_trac" AND "config_inca"
32    IF(ANY(type_trac == ['inca','inco']) .AND. ALL(config_inca /= ['aero','aeNP','chem'])) CALL abort_gcm('tracinca_init', &
33       'INCA enabled, but unknown config_inca = "'//TRIM(config_inca)//'". Please modify "run.def"', 1)
34
35    !--- PROBLEM IF "config_inca" DIFFERS FROM "none" AND INCA HAS NOT BEEN ACTIVATED
36    IF(ALL(type_trac /= ['inca','inco'])  .AND.    config_inca /= 'none')                  CALL abort_gcm('tracinca_init', &
37       'INCA disabled, but config_inca = "'//TRIM(config_inca)//'" should be "none". Please modify "run.def"', 1)
38
39  END SUBROUTINE tracinca_init
40
41  SUBROUTINE tracinca(                                &
42       nstep,    julien,   gmtime,         lafin,     &
43       pdtphys,  t_seri,   paprs,          pplay,     &
44       pmfu,     upwd,     ftsol,  pctsrf, pphis,     &
45       pphi,     albsol,   sh,             ch, rh,    &
46       cldfra,   rneb,     diafra,         cldliq,    &
47       itop_con, ibas_con, pmflxr,         pmflxs,    &
48       prfl,     psfl,     aerosol_couple, flxmass_w, &
49       tau_aero, piz_aero, cg_aero,        ccm,       &
50       rfname,                                        &
51       tr_seri,  source)     
52
53!========================================================
54!    -- CHIMIE INCA --
55!========================================================
56
57    USE dimphy
58    USE infotrac_phy, ONLY: nbtr
59    USE vampir
60    USE indice_sol_mod
61    USE geometry_mod, ONLY: cell_area
62    USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat
63    USE aero_mod, ONLY : naero_grp
64    IMPLICIT NONE
65   
66!==========================================================================
67!                   -- DESCRIPTION DES ARGUMENTS --
68!==========================================================================
69
70
71! EN ENTREE ...
72!
73!Configuration grille,temps:
74    INTEGER,INTENT(IN) :: nstep      ! Appel physique
75    INTEGER,INTENT(IN) :: julien     ! Jour julien
76    REAL,INTENT(IN)    :: gmtime
77    REAL,INTENT(IN)    :: pdtphys    ! Pas d'integration pour la physique (seconde)
78    LOGICAL,INTENT(IN) :: lafin      ! le flag de la fin de la physique
79   
80
81!Physique:
82!--------
83    REAL,DIMENSION(klon,klev),INTENT(IN)   :: t_seri  ! Temperature
84    REAL,DIMENSION(klon,klev),INTENT(IN)   :: sh      ! humidite specifique
85    REAL,DIMENSION(klon,klev),INTENT(IN)   :: ch      ! eau liquide
86    REAL,DIMENSION(klon,klev),INTENT(IN)   :: rh      ! humidite relative
87    REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs   ! pression pour chaque inter-couche (en Pa)
88    REAL,DIMENSION(klon,klev),INTENT(IN)   :: pplay   ! pression pour le mileu de chaque couche (en Pa)
89    REAL,DIMENSION(klon,klev),INTENT(IN)   :: pphi    ! geopotentiel
90    REAL,DIMENSION(klon),INTENT(IN)        :: pphis
91    REAL,DIMENSION(klon,klev),INTENT(IN)   :: cldliq  ! eau condensee pour le radiatif
92    REAL,DIMENSION(klon,klev),INTENT(IN)   :: cldfra  ! fraction nuageuse (tous les nuages)
93    REAL,DIMENSION(klon,klev),INTENT(IN)   :: diafra  ! fraction nuageuse (convection ou stratus artificiels)
94    REAL,DIMENSION(klon,klev),INTENT(IN)   :: rneb    ! fraction nuageuse (grande echelle)
95    INTEGER,DIMENSION(klon),INTENT(IN)     :: itop_con
96    INTEGER,DIMENSION(klon),INTENT(IN)     :: ibas_con
97    REAL,DIMENSION(klon),INTENT(IN)        :: albsol  ! albedo surface
98!
99!Convection:
100!----------
101    REAL,DIMENSION(klon,klev),INTENT(IN) :: pmfu  ! flux de masse dans le panache montant - Tiedtke
102    REAL,DIMENSION(klon,klev),INTENT(IN) :: upwd  ! flux de masse dans le panache montant - Emanuel
103
104!...Tiedke     
105    REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: pmflxr, pmflxs ! Flux precipitant de pluie, neige aux interfaces [convection]
106    REAL,DIMENSION(klon,klev+1),INTENT(IN)   :: prfl, psfl ! Flux precipitant de pluie, neige aux interfaces [large-scale]
107
108    LOGICAL,INTENT(IN)                       :: aerosol_couple
109    REAL,DIMENSION(klon,klev),INTENT(IN)     :: flxmass_w
110    REAL,DIMENSION(klon,klev,naero_grp,2),INTENT(IN) :: tau_aero
111    REAL,DIMENSION(klon,klev,naero_grp,2),INTENT(IN) :: piz_aero
112    REAL,DIMENSION(klon,klev,naero_grp,2),INTENT(IN) :: cg_aero
113    CHARACTER(len=4),DIMENSION(naero_grp),INTENT(IN) :: rfname
114    REAL,DIMENSION(klon,klev,2),INTENT(IN)   :: ccm
115
116! Arguments necessaires pour les sources et puits de traceur:
117    REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: ftsol  ! Temperature du sol (surf)(Kelvin)
118    REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: pctsrf ! Pourcentage de sol f(nature du sol)
119
120
121  ! InOutput argument
122    REAL,DIMENSION(klon,klev,nbtr),INTENT(INOUT) :: tr_seri ! Concentration Traceur [U/KgA] 
123
124  ! Output arguments
125    REAL,DIMENSION(klon,nbtr), INTENT(OUT)        :: source  ! a voir lorsque le flux de surface est prescrit
126
127!=======================================================================================
128!                        -- VARIABLES LOCALES TRACEURS --
129!=======================================================================================
130
131    INTEGER :: k
132    REAL,DIMENSION(klon,klev) :: pdel
133    REAL,DIMENSION(klon,klev) :: zpmfu  ! flux de masse dans le panache montant
134    REAL    :: calday
135    INTEGER :: ncsec
136
137    CALL VTe(VTphysiq)
138    CALL VTb(VTinca)
139   
140    calday = REAL(julien) + gmtime
141    ncsec  = NINT (86400.*gmtime)
142     
143    DO k = 1, klev
144       pdel(:,k) = paprs(:,k) - paprs (:,k+1)
145    END DO
146 
147#ifdef INCA
148    IF (config_inca == 'aero' .OR. config_inca == 'chem') THEN
149       zpmfu(:,:)=pmfu(:,:)       
150    ELSE IF (config_inca == 'aeNP') THEN
151       zpmfu(:,:)=upwd(:,:)
152    ENDIF
153
154    CALL aerosolmain(                    &
155         aerosol_couple,tr_seri,pdtphys, &
156         pplay,pdel,prfl,pmflxr,psfl,    &
157         pmflxs,zpmfu,itop_con,ibas_con,  &
158         pphi,cell_area,nstep,rneb,t_seri, &     
159         rh,tau_aero,piz_aero,cg_aero,   &
160         rfname,ccm,lafin)
161#endif
162
163
164#ifdef INCA
165    CALL chemmain (tr_seri, &   !mmr
166         nstep,      & !nstep
167         calday,     & !calday
168         julien,     & !ncdate
169         ncsec,      & !ncsec
170         1,          & !lat
171         pdtphys,    & !delt
172         paprs(1,1), & !ps
173         pplay,      & !pmid
174         pdel,       & !pdel
175         cell_area,  &
176         pctsrf(1,1),& !oro
177         ftsol,      & !tsurf
178         albsol,     & !albs
179         pphi,       & !zma
180         pphis,      & !phis
181         cldfra,     & !cldfr
182         rneb,       & !cldfr_st
183         diafra,     & !cldfr_cv
184         itop_con,   & !cldtop
185         ibas_con,   & !cldbot
186         cldliq,     & !cwat
187         prfl,       & !flxrst
188         pmflxr,     & !flxrcv
189         psfl,       & !flxsst
190         pmflxs,     & !flxscv
191         zpmfu,      & !flxupd   !--now depends on whether AP or NP
192         flxmass_w,  & !flxmass_w
193         t_seri,     & !tfld
194         sh,         & !sh
195         ch,         & !ql
196         rh,         & !rh
197         nbp_lon,    & !nx
198         nbp_lat,    & !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.