source: LMDZ6/branches/Amaury_dev/libf/phylmdiso/isotrac_mod.F90 @ 5186

Last change on this file since 5186 was 5158, checked in by abarral, 3 months ago

Add missing klon on strataer_emiss_mod.F90
Correct various missing explicit declarations
Replace tabs by spaces (tabs are not part of the fortran charset)
Continue cleaning modules
Removed unused arguments and variables

  • Property svn:executable set to *
File size: 32.6 KB
Line 
1#ifdef ISO
2#ifdef ISOTRAC
3
4MODULE isotrac_mod
5  USE infotrac_phy,      ONLY: niso, ntiso, nzone
6  USE lmdz_readTracFiles, ONLY: delPhase
7  USE isotopes_mod,      ONLY: ridicule, get_in
8  USE lmdz_abort_physic, ONLY: abort_physic
9
10  IMPLICIT NONE
11  SAVE
12
13!=== CONTENT: ALL THE ISOTOPIC TRACERS RELATED VARIABLES ===
14
15! option 1: on trace evap ocean et continent separement 
16! option 2: on trace evap ocean, continent et evap precip
17! option 3: on trace evap differents bassins oceaniques
18!       + continents + residu
19!       attention, choisir dans ce cas les bassins oceaniques
20!       dans iso_traceurs_opt3F90.h
21! option 4: tracage par temperature minimale
22!       dans ce cas, on definit des bins dans iso_traceurs_opt4.h
23! option 5: pour AMMA: on taggue residu/AEJ/flux mousson/Harmattan
24! option 6: taggage des ddfts
25! option 7: pour Sandrine: taggage de la vapeur a 700hPa pour omega500<-20 TODO
26! option 8: pour Sandrine: taggage de la vapeur entre 950 et 800hPa, omega de 0 a 25 hPa et de l'evaoration en omega<-20. TODO
27! option 9: taggage du condensat et de la revap precip
28! option 10: taggage evap oce, transpiration et evaporation
29! fractionante. A utiliser quand on couple avec ORCHIDEE
30! option 11: comme 2, mais on trace juste revap precip et reste
31! option 12: taggage evap oce, sol nu, canop et reste evap cont.
32! A utiliser quand on couple avec ORCHIDEE
33! option 13: taggage temperature minimale + revap precip
34! option 14: taggage lat et altitude de derniere saturation (niveaux de pression) + evap surf
35! otion 15: taggage irrigation
36! option 16: taggage precip selon saisons et fonte neige: seulement pour ORCHIDEE
37! option 17: taggage temperature minimum de condensation directement dans la convection et la cond LS, + evap sfc, condensat et precipitation
38! option 18: idem 17 mais on tague qsmin au lieu de Tmin
39! option 19: on tag vap residuelle, vap residuelle dans ddfts, sfc, cond, rev
40! option 20: on taggue vapeur tropicale vs vapeur extratropicale
41! option 21: taggage de 2 boites 3D: extratropiques (>35°) et UT tropicale (15-15°, > 500hPa)
42! option 22: tagage de la vapeur proccessee dans les zones tres convectives
43               
44   !--- nzone_opt (value of nzone for the selected option) must be equal to nzone as defined in onfotrac
45   REAL, PARAMETER :: ridicule_trac = ridicule * 1e4
46   INTEGER, SAVE :: option_traceurs, nzone_opt, nzoneOR
47!$OMP THREADPRIVATE(option_traceurs,nzone_opt,nzoneOR)
48   INTEGER, SAVE :: initialisation_isotrac
49!$OMP THREADPRIVATE(initialisation_isotrac)     
50                ! 1 pour idealise
51                ! 0 pour lecture dans fichier
52
53   !=== VARIABLES SPECIFIC TO THE SELECTED OPTION, BUT NEEDED FOR THE COMPUTATION OF THE NUMBER OF ZONES ; TO BE INITIALIZED IN traceurs_init
54
55   !--- option 3
56   LOGICAL, SAVE :: use_bassin_Austral, use_bassin_Atlantic, use_bassin_MidLats, use_bassin_SouthIndian, use_bassin_MerArabie
57!$OMP THREADPRIVATE(use_bassin_Austral, use_bassin_Atlantic, use_bassin_MidLats, use_bassin_SouthIndian, use_bassin_MerArabie)
58   INTEGER, SAVE ::     bassin_Austral,     bassin_Atlantic,     bassin_MidLats,     bassin_SouthIndian,     bassin_MerArabie
59!$OMP THREADPRIVATE(    bassin_Austral,     bassin_Atlantic,     bassin_MidLats,     bassin_SouthIndian,     bassin_MerArabie)
60   LOGICAL, SAVE :: use_bassin_Pacific, use_bassin_Indian,   use_bassin_Tropics, use_bassin_BengalGolf,  use_bassin_HighLats, use_bassin_Medit
61!$OMP THREADPRIVATE(use_bassin_Pacific, use_bassin_Indian,   use_bassin_Tropics, use_bassin_BengalGolf,  use_bassin_HighLats, use_bassin_Medit)
62   INTEGER, SAVE ::     bassin_Pacific,     bassin_Indian,       bassin_Tropics,     bassin_BengalGolf,      bassin_HighLats,     bassin_Medit
63!$OMP THREADPRIVATE(    bassin_Pacific,     bassin_Indian,       bassin_Tropics,     bassin_BengalGolf,      bassin_HighLats,     bassin_Medit)
64
65   !--- option 4
66   INTEGER, PARAMETER :: nzone_temp = 1
67   REAL,   SAVE ::  zone_temp1, zone_tempf, zone_tempa 
68!$OMP THREADPRIVATE(zone_temp1, zone_tempf, zone_tempa)
69   REAL,   SAVE ::  zone_temp(nzone_temp-1)
70!$OMP THREADPRIVATE(zone_temp)
71
72   !--- option 5
73   INTEGER, SAVE :: izone_aej, izone_harmattan, izone_mousson
74!$OMP THREADPRIVATE(izone_aej, izone_harmattan, izone_mousson)
75
76   !--- option 6
77   INTEGER, SAVE :: izone_ddft
78!$OMP THREADPRIVATE(izone_ddft)
79
80   !--- option 10
81   INTEGER, SAVE :: izone_contfrac
82!$OMP THREADPRIVATE(izone_contfrac)
83
84   !--- option 12
85   INTEGER, SAVE :: izone_contcanop
86!$OMP THREADPRIVATE(izone_contcanop)
87
88   !--- option 13
89   INTEGER, PARAMETER :: nzone_pres = 3
90   REAL, SAVE ::  zone_pres(nzone_pres-1)
91!$OMP THREADPRIVATE(zone_pres)
92
93   !--- option 14
94   INTEGER, PARAMETER :: nzone_lat = 4
95   REAL,    SAVE :: zone_pres1, zone_presf, zone_presa
96!$OMP THREADPRIVATE(zone_pres1, zone_presf, zone_presa)
97   REAL,    SAVE :: dlattag, lattag_min, zone_lat(nzone_lat-1)
98!$OMP THREADPRIVATE(dlattag, lattag_min, zone_lat)
99
100   !--- option 15
101   INTEGER, SAVE :: izone_irrig
102!$OMP THREADPRIVATE(izone_irrig)
103
104   !--- option 17
105   REAL,    SAVE :: seuil_tag_tmin, seuil_tag_tmin_ls
106!$OMP THREADPRIVATE(seuil_tag_tmin, seuil_tag_tmin_ls)
107  INTEGER,  SAVE :: option_seuil_tag_tmin
108!$OMP THREADPRIVATE(option_seuil_tag_tmin)
109
110   !--- option 20
111   INTEGER, SAVE :: izone_trop, izone_extra
112!$OMP THREADPRIVATE(izone_trop, izone_extra)
113   REAL,    SAVE :: lim_tag20
114!$OMP THREADPRIVATE(lim_tag20)
115
116   !--- option 21: on garde izone_trop, izone_extra 
117
118   !--- option 22
119   INTEGER, SAVE :: izone_conv_BT, izone_conv_UT
120!$OMP THREADPRIVATE(izone_conv_BT, izone_conv_UT)
121   REAL,    SAVE :: lim_precip_tag22
122!$OMP THREADPRIVATE(lim_precip_tag22)
123
124       
125  INTEGER, ALLOCATABLE, SAVE :: index_iso(:), index_zone(:), itZonIso_loc(:,:)
126!$OMP THREADPRIVATE(            index_iso,    index_zone,    itZonIso_loc)
127  CHARACTER(LEN=3), ALLOCATABLE :: strtrac(:)
128!$OMP THREADPRIVATE(               strtrac)
129  INTEGER, ALLOCATABLE, SAVE :: bassin_map(:), boite_map(:,:)
130!$OMP THREADPRIVATE(            bassin_map,    boite_map)
131
132   !=== RECYCLING AND EVAPORATION TREATMENT
133   INTEGER, SAVE :: izone_cont, izone_oce        !--- For land and ocean recycling
134!$OMP THREADPRIVATE(izone_cont, izone_oce)
135   INTEGER, SAVE :: izone_poubelle               !--- For small numerical residues
136!$OMP THREADPRIVATE(izone_poubelle)
137   INTEGER, SAVE :: izone_init                   !--- For default initialization
138!$OMP THREADPRIVATE(izone_init)
139   INTEGER, SAVE :: izone_revap                  !--- For droplets evaporation
140!$OMP THREADPRIVATE(izone_revap)
141   INTEGER, SAVE :: option_revap, option_tmin, option_cond, izone_cond
142!$OMP THREADPRIVATE(option_revap, option_tmin, option_cond, izone_cond)
143   REAL, PARAMETER :: evap_franche = 1e-6        !--- In kg/m2/s
144
145CONTAINS
146
147   SUBROUTINE iso_traceurs_init()
148
149   USE infotrac_phy, ONLY: itZonIso, isoName, isoZone
150   USE isotopes_mod, ONLY: iso_eau, ntracisoOR, initialisation_iso
151   USE dimphy,       ONLY: klon, klev
152   USE  lmdz_strings, ONLY: int2str, strStack, strTail, strHead, strIdx, fmsg
153
154   IMPLICIT NONE
155   ! Define which zones and isotopes correspond to isotopic tagging tracers
156   ! Modify traceurs.h variables
157   INTEGER :: izone, ixt, k
158   INTEGER :: izone_pres, izone_lat
159   INTEGER :: nzone_opt
160
161   IF(fmsg("traceurs_init 18: isotrac ne marche que si on met l'eau comme isotope", 'iso_traceurs_init', iso_eau==0)) STOP
162
163   !--- Initialize
164   option_traceurs = 0
165   initialisation_isotrac = 0
166
167   !--- Allocate
168   ALLOCATE(index_iso (ntiso))
169   ALLOCATE(index_zone(ntiso))
170   ALLOCATE(itZonIso_loc(nzone,niso))
171   ALLOCATE(strtrac(nzone))
172   ALLOCATE(bassin_map(klon))
173   ALLOCATE( boite_map(klon,klev))
174
175   IF(initialisation_iso == 0) CALL get_in('initialisation_isotrac', initialisation_isotrac)
176
177   !--- Read tracing option
178   CALL get_in('option_traceurs', option_traceurs)
179
180   !--- Genral case: no traceurs in ORCHIDEE
181   ntracisoOR=niso
182
183   ! partie a editer ! pour definir les differentes zones
184   SELECT CASE(option_traceurs)
185      !========================================================================================================================
186      CASE(1)      !=== TRACING LAND/OCEAN
187      !========================================================================================================================
188         nzone_opt=2
189         izone_cont=1
190         izone_oce=2
191         izone_poubelle=2    ! zone ou on met les flux non physiques, de reajustement
192         izone_init=2        ! zone d'initialisation par defaut         
193         option_revap=0
194         option_tmin=0
195         izone_revap=0
196         option_cond=0
197         strtrac(izone_cont) = 'con'
198         strtrac(izone_oce)  = 'oce'
199      !========================================================================================================================
200      CASE(2)      !=== TRACING LAND/OCEAN/DROPLETS REEVAPORATION
201      !========================================================================================================================
202         nzone_opt=3
203         izone_cont=1
204         izone_oce=2
205         izone_poubelle=2    ! zone ou on met les flux non physiques, de reajustement
206         izone_init=2        ! zone d'initialisation par defaut         
207         option_revap=1
208         option_tmin=0
209         izone_revap=3
210         option_cond=0
211         strtrac(izone_cont) = 'con'
212         strtrac(izone_oce)  = 'oce'
213         strtrac(izone_revap)= 'rev'
214      !========================================================================================================================
215      CASE(3)      !=== TRACING OCEANS BASINS + RESIDUE (LAST DIMENSION). NO DROPLETS EVAPORATION TRACING.
216      !========================================================================================================================
217         ! lire les use_bassin
218         CALL get_in('use_bassin_Atlantic',   use_bassin_Atlantic)
219         CALL get_in('use_bassin_Medit',      use_bassin_Medit)
220         CALL get_in('use_bassin_Indian',     use_bassin_Indian)
221         CALL get_in('use_bassin_Austral',    use_bassin_Austral)
222         CALL get_in('use_bassin_Pacific',    use_bassin_Pacific)
223         CALL get_in('use_bassin_MerArabie',  use_bassin_MerArabie)
224         CALL get_in('use_bassin_BengalGolf', use_bassin_BengalGolf)
225         CALL get_in('use_bassin_SouthIndian',use_bassin_SouthIndian)
226         CALL get_in('use_bassin_Tropics',    use_bassin_Tropics)
227         CALL get_in('use_bassin_Midlats',    use_bassin_Midlats)
228         CALL get_in('use_bassin_HighLats',   use_bassin_HighLats)
229         nzone_opt  =  2  +  COUNT([use_bassin_Atlantic, use_bassin_Medit,     use_bassin_Indian,     &
230            use_bassin_Austral,     use_bassin_Pacific,  use_bassin_MerArabie, use_bassin_BengalGolf, &
231            use_bassin_SouthIndian, use_bassin_Tropics,  use_bassin_Midlats,   use_bassin_HighLats])
232         izone_cont=nzone
233         izone_oce=0             ! pas de sens car separee en bassins         
234         izone_poubelle=nzone-1  ! zone ou on met les flux non physiques, de reajustement
235         izone_init=nzone-1      ! zone d'initialisation par defaut
236         option_revap=0          ! on ne trace pas les gouttes
237         option_tmin=0
238         izone_revap=0           ! pas de sens car on taggue pas les gouttes separemment 
239         option_cond=0
240#ifdef ISOVERIF
241         IF(use_bassin_Indian) THEN   !=== NON COMPATIBLE WITH A DETAILED INDIAN CUTTING
242            IF(use_bassin_MerArabie .OR. use_bassin_SouthIndian .OR. use_bassin_BengalGolf) THEN
243               WRITE(*,*) 'traceurs_init 73'; STOP
244            END IF
245!           CALL iso_verif_egalite(float(use_bassin_MerArabie),   0.0, 'iso_traceurs_init 73: revoir def des bassins')
246!           CALL iso_verif_egalite(float(use_bassin_BengalGolf),  0.0, 'iso_traceurs_init 73: revoir def des bassins')
247!           CALL iso_verif_egalite(float(use_bassin_SouthIndian), 0.0, 'iso_traceurs_init 73: revoir def des bassins')
248         END IF
249#endif   
250         bassin_Atlantic   = 1
251         bassin_Medit      = bassin_Atlantic    + COUNT([use_bassin_Medit]);       WRITE(*,*) 'bassin_Atlantic    =' ,bassin_Atlantic
252         bassin_Indian     = bassin_Medit       + COUNT([use_bassin_Indian]);      WRITE(*,*) 'bassin_Medit       =' ,bassin_Medit
253         bassin_Austral    = bassin_Indian      + COUNT([use_bassin_Austral]);     WRITE(*,*) 'bassin_Indian      =' ,bassin_Indian
254         bassin_Pacific    = bassin_Austral     + COUNT([use_bassin_Pacific]);     WRITE(*,*) 'bassin_Austral     =' ,bassin_Austral
255         bassin_MerArabie  = bassin_Pacific     + COUNT([use_bassin_MerArabie]);   WRITE(*,*) 'bassin_MerArabie   =' ,bassin_MerArabie
256         bassin_BengalGolf = bassin_MerArabie   + COUNT([use_bassin_BengalGolf]);  WRITE(*,*) 'bassin_BengalGolf  =' ,bassin_BengalGolf
257         bassin_SouthIndian= bassin_BengalGolf  + COUNT([use_bassin_SouthIndian]); WRITE(*,*) 'bassin_SouthIndian =' ,bassin_SouthIndian
258         bassin_Tropics    = bassin_SouthIndian + COUNT([use_bassin_Tropics]);     WRITE(*,*) 'bassin_Tropics     =' ,bassin_Tropics
259         bassin_MidLats    = bassin_Tropics     + COUNT([use_bassin_MidLats]);     WRITE(*,*) 'bassin_MidLats     =' ,bassin_MidLats
260         bassin_HighLats   = bassin_MidLats     + COUNT([use_bassin_HighLats]);    WRITE(*,*) 'bassin_HighLats    =' ,bassin_HighLats
261         IF(use_bassin_atlantic   ) strtrac(bassin_atlantic)   = 'atl'
262         IF(use_bassin_medit      ) strtrac(bassin_medit)      = 'med'
263         IF(use_bassin_indian     ) strtrac(bassin_indian)     = 'ind'
264         IF(use_bassin_austral    ) strtrac(bassin_austral)    = 'aus'
265         IF(use_bassin_pacific    ) strtrac(bassin_pacific)    = 'pac'
266         IF(use_bassin_merarabie  ) strtrac(bassin_merarabie)  = 'ara'
267         IF(use_bassin_BengalGolf ) strtrac(bassin_BengalGolf) = 'ben'
268         IF(use_bassin_SouthIndian) strtrac(bassin_SouthIndian)= 'ins'
269         IF(use_bassin_tropics    ) strtrac(bassin_tropics)    = 'tro'
270         IF(use_bassin_midlats    ) strtrac(bassin_midlats)    = 'mid'
271         IF(use_bassin_HighLats   ) strtrac(bassin_HighLats)   = 'hau'
272         strtrac(nzone-1)='res'
273         strtrac(nzone)='con'
274      !========================================================================================================================
275      CASE(4)      !=== TRACING MINIMAL EXPERIENCED TEMPERATURE AS IN THE ARTICLE ON LfG, EXCEPT NO REVAPORATION
276      !========================================================================================================================
277         zone_temp1 = 293.0  ! en K
278!        zone_tempf = 223.0  ! en K
279         zone_tempf = 243.0  ! en K
280        ! courbure de la relation entre l'indice et la temperature: 0 pour lineaire, <0 pour plus de detal en bas
281        ! zone 1: >= zone_temp1
282        ! zone 2 a 4: intermediaire,
283        ! zone 5: <zone_tempf
284         nzone_opt=nzone_temp+1
285         zone_tempa=-4.0     ! en K
286         izone_cont=nzone
287         izone_oce=nzone 
288         izone_poubelle=nzone
289         izone_init=nzone    ! zone d'initialisation par defaut
290         option_revap=0
291         option_tmin=0 
292         izone_revap=0
293         option_cond=0
294         DO izone=1,nzone_temp
295            strtrac(izone) = 't'//TRIM(int2str(izone))
296            WRITE(*,*) 'izone, strtrac=', izone, strtrac(izone)
297         END DO
298         strtrac(izone_poubelle)='pou'
299         ! Initialization of temperatures zones
300         DO izone=1,nzone_temp-1
301            zone_temp(izone) = zone_temp1+float(izone-1)            &
302                            * (zone_tempa*float(izone-nzone_temp+1) &
303                            + (zone_tempf-zone_temp1)/float(nzone_temp-2))
304         END DO
305         WRITE(*,*) 'iso_trac_init 183: zone_temp=', zone_temp
306      !========================================================================================================================
307      CASE(5)      !=== TRACING AEJ/MOONSOON FLUX/Harmattan
308      !========================================================================================================================
309!        WRITE*,*) 'iso_traceurs_init 129'
310         nzone_opt=4
311         izone_cont=1
312         izone_oce=1
313         izone_poubelle=1    ! zone ou on met les flux non physiques, de reajustement
314         izone_init=1        ! zone d'initialisation par defaut         
315         option_revap=0
316         option_tmin=0
317         izone_revap=0
318         izone_aej=2
319         izone_mousson=3
320         izone_harmattan=4
321         option_cond=0
322         strtrac(izone_poubelle) = 'res'
323         strtrac(izone_aej)      = 'aej'
324         strtrac(izone_mousson)  = 'mou'
325         strtrac(izone_harmattan)= 'sah'
326      !========================================================================================================================
327      CASE(6)      !=== TRACING DDFTS
328      !========================================================================================================================
329         nzone_opt=2
330         izone_cont=1
331         izone_oce=1
332         izone_poubelle=1    ! zone ou on met les flux non physiques, de reajustement
333         izone_init=1        ! zone d'initialisation par defaut         
334         option_revap=0
335         option_tmin=0
336         izone_revap=0
337         izone_ddft=2
338         option_cond=0
339         strtrac(izone_poubelle)='res'
340         strtrac(izone_ddft)='dft'
341      !========================================================================================================================
342      CASE(9)      !=== TRACING CONDENSATION
343      !========================================================================================================================
344         nzone_opt=3
345         izone_cont=1
346         izone_oce=1
347         izone_poubelle=1    ! zone ou on met les flux non physiques, de reajustement
348         izone_init=1        ! zone d'initialisation par defaut         
349         option_revap=1
350         option_tmin=0
351         izone_revap=2
352         izone_cond=3
353         option_cond=1
354         ! 1 par defaut pour colorier a la fois condensat LS et condensat convectif.
355         ! Mais on peut mettre 2 si on ne veut que colorier que le condensat convectif.
356         CALL get_in('option_cond',option_cond)
357         strtrac(izone_poubelle)='res'
358         strtrac(izone_cond)='con'
359         strtrac(izone_revap)='rev'
360      !========================================================================================================================
361      CASE(10)     !=== TRACING EVAPORATION FROM OCEAN/LAND, NON FRAC/LAND FRAC ; ONLY WHEN COUPLED WITH ORCHIDEE
362      !========================================================================================================================
363#ifndef CPP_VEGET
364         WRITE(*,*) 'iso_traceurs_init 219: option_traceurs=10 inutile si on ne couple pas avec ORCHIDEE'; STOP
365#endif         
366         nzone_opt=3
367         izone_cont=1        ! sous-entendu non fractionnant
368         izone_oce=2
369         izone_poubelle=2    ! zone ou on met les flux non physiques, de reajustement
370         izone_init=2        ! zone d'initialisation par defaut
371         option_revap=0
372         option_tmin=0
373         izone_revap=0
374         izone_contfrac=3
375         izone_contcanop=3
376         izone_irrig=0
377         option_cond=0
378         strtrac(izone_oce)='oce'
379         strtrac(izone_cont)='con' 
380         strtrac(izone_contfrac)='enu'  ! evap sol nu
381      !========================================================================================================================
382      CASE(11)     !=== TRACING DROPLETS REEVAPORATION + REST
383      !========================================================================================================================
384         nzone_opt=2
385         izone_cont=1
386         izone_oce=1
387         izone_poubelle=1    ! zone ou on met les flux non physiques, de reajustement
388         izone_init=1        ! zone d'initialisation par defaut
389         option_revap=1
390         option_tmin=0
391         izone_revap=2
392         izone_irrig=0
393         option_cond=0
394         strtrac(izone_poubelle)='res'
395         strtrac(izone_revap)='rev'
396      !========================================================================================================================
397      CASE(12)     !=== TRACING NAKED GROUND EVAPORATION, CANOPY EVAPORATION, REST OF LAND EVAPORATION AND OCEAN EVAPORATION
398      !========================================================================================================================
399#ifndef CPP_VEGET
400         WRITE(*,*) 'iso_traceurs_init 257: option_traceurs=10 inutile si on ne couple pas avec ORCHIDEE'; STOP
401#endif           
402         nzone_opt=2
403         izone_cont=1
404         izone_oce=2
405         izone_poubelle=2    ! zone ou on met les flux non physiques, de reajustement
406         izone_init=2        ! zone d'initialisation par defaut
407         option_revap=0
408         option_tmin=0
409         izone_revap=0
410         izone_contfrac=3
411         izone_contcanop=4
412         izone_irrig=0   
413         option_cond=0
414         strtrac(izone_oce)='oce'
415         strtrac(izone_cont)='con'
416         strtrac(izone_contfrac)='enu' ! evap sol nu
417         strtrac(izone_contcanop)='eca'! evap canop
418      !========================================================================================================================
419      CASE(13)     !=== TRACING MINIMUM EXPERIENCED TEMPERATIRES + REEVAPORATION AS IN THE ARTICLE ON LdG
420      !========================================================================================================================
421         zone_temp1=293.0    ! en K       
422!        zone_tempf=223.0    ! en K
423         zone_tempf=243.0    ! en K
424         zone_tempa=-4.0     ! courbure de la relation entre l'indice et la temperature: 0 pour lineaire, <0 pour plus de detal en bas
425         ! zone 1: >= zone_temp1
426         ! zone 2 a 4: intermediaire,
427         ! zone 5: <zone_tempf
428         nzone_opt=nzone_temp+1
429         izone_cont=1
430         izone_oce=1 
431         izone_poubelle=1
432         izone_init=1        ! zone d'initialisation par defaut
433         option_revap=1   
434         option_tmin=0
435         izone_revap=nzone
436         izone_irrig=0
437         option_cond=0
438         DO izone=1,nzone_temp
439            strtrac(izone) = 't'//TRIM(int2str(izone))
440            WRITE(*,*) 'izone, strtrac = ', izone, strtrac(izone)
441         END DO
442         strtrac(izone_revap)='rev'
443         ! initialisation des zones de tempearture
444         DO izone=1,nzone_temp-1
445            zone_temp(izone) = zone_temp1+float(izone-1) &
446                             *(zone_tempa*float(izone-nzone_temp+1) &
447                             +(zone_tempf-zone_temp1)/float(nzone_temp-2))
448         END DO
449         WRITE(*,*) 'zone_temp=',zone_temp
450      !========================================================================================================================
451      CASE(14)     !=== TRACING PRES AND LAT OF LAST SATURATION DEFINED AS rh>90%
452      !========================================================================================================================
453         zone_pres1=600.0*100.0   ! en Pa       
454         zone_presf=300.0*100.0   ! en Pa
455         zone_presa=0.0           ! courbure de la relation entre l'indice et la temperature: 0 pour lineaire
456         lattag_min=10.0          ! en degres
457         dlattag=15.0
458         ! zone 1: >= zone_pres1
459         ! zone 2 a 4: intermediaire,
460         ! zone 5: <zone_presf
461         nzone_opt=nzone_pres*nzone_lat+1         
462         izone_cont=nzone
463         izone_oce=nzone
464         izone_poubelle=nzone
465         izone_init=nzone         ! zone d'initialisation par defaut
466         option_revap=0 
467         option_tmin=0
468         izone_revap=0
469         izone_irrig=0
470         option_cond=0
471         DO izone_pres=1,nzone_pres
472            DO izone_lat=1,nzone_lat
473               izone=izone_lat+(izone_pres-1)*nzone_lat
474               strtrac(izone) = 't'//TRIM(int2str(izone_pres))//TRIM(int2str(izone_lat))
475               WRITE(*,*) 'izone_pres, izone_lat, izone, strtrac = ',izone_pres, izone_lat, izone, strtrac(izone)
476            END DO
477         END DO
478         strtrac(nzone)='sfc'
479         ! initialisation des zones de temperature
480         DO izone=1,nzone_pres-1
481            zone_pres(izone) = zone_pres1+float(izone-1) &
482                             *(zone_presa*float(izone-nzone_pres+1) &
483                             +(zone_presf-zone_pres1)/float(nzone_pres-2))
484         END DO
485         WRITE(*,*) 'traceurs_init 332: zone_pres=',zone_pres
486      !========================================================================================================================
487      CASE(15)     !=== TRACING IRRIGATION IN ORCHIDEE
488      !========================================================================================================================
489#ifndef CPP_VEGET
490         WRITE(*,*) 'iso_traceurs_init 257: option_traceurs=15 inutile si on ne couple pas avec ORCHIDEE'; STOP
491#endif
492         nzone_opt=1
493         izone_cont=1
494         izone_oce=1
495         izone_poubelle=1    ! zone ou on met les flux non physiques, de reajustement
496         izone_init=1        ! zone d'initialisation par defaut
497         option_revap=0
498         option_tmin=0
499         izone_revap=0
500         izone_contfrac=0
501         izone_contcanop=0
502         izone_irrig=2
503         option_cond=0
504         strtrac(izone_poubelle)='res'
505         strtrac(izone_irrig)='irrig'
506         ! dans ce cas particulier, il y a des traceurs dans ORCHIDEE
507         ntracisoOR=ntiso
508      !========================================================================================================================
509      CASE(17,18)  !=== TRACING MINIMAL EXPERIENCES TEMPERATURES AS IN THE ARTICLE ABOUT LdG, BUT NO EVAPORATION
510      !========================================================================================================================
511         zone_temp1=12.0e-3  ! en kg/kg       
512         zone_tempf=0.2e-3   ! en kg/kg
513         zone_tempa=1.2e-3   ! courbure de la relation entre l'indice et la temperature: 0 pour lineaire
514!     zone_temp1=14.0e-3  ! en kg/kg
515!        zone_tempf=0.2e-3   ! en kg/kg
516!     zone_tempa=0.5e-3
517!        zone_temp1=10.0e-3  ! en kg/kg
518!        zone_tempf=0.5e-3   ! en kg/kg
519!     zone_tempa=0.5e-3
520         ! zone 1: >= zone_temp1
521         ! zone 2 a 4: intermediaire,
522         ! zone 5: <zone_tempf
523         nzone_opt=nzone_temp+3
524         izone_cont=nzone_temp+1
525         izone_oce=nzone_temp+1
526         izone_poubelle=nzone_temp+1
527         izone_init=nzone_temp+1 ! zone d'initialisation par defaut
528         option_revap=1 
529         option_tmin=1
530         option_cond=1
531         izone_revap=nzone_temp+3
532         izone_cond=nzone_temp+2
533         DO izone=1,nzone_temp
534            strtrac(izone) = 't'//TRIM(int2str(izone))
535            WRITE(*,*) 'izone, strtrac = ', izone, strtrac(izone)
536         END DO !do izone=1,nzone_temp
537         strtrac(izone_poubelle)='sfc'
538         strtrac(izone_cond)='con'
539         strtrac(izone_revap)='rev'
540         ! initialisation des zones de tempearture
541         DO izone=1,nzone_temp-1
542            zone_temp(izone) = zone_temp1+float(izone-1) &
543                             *(zone_tempa*float(izone-nzone_temp+1) &
544                             +(zone_tempf-zone_temp1)/float(nzone_temp-2))
545         END DO
546         WRITE(*,*) 'zone_temp1,zone_tempf,zone_tempa=',zone_temp1,zone_tempf,zone_tempa
547         WRITE(*,*) 'zone_temp=',zone_temp
548!        STOP         
549      !========================================================================================================================
550      CASE(19)     !=== TRACING TROPICAL AND EXTRATROPICAL VAPOUR
551      !========================================================================================================================
552         zone_temp1=12.0e-3  ! en kg/kg       
553         zone_tempf=0.2e-3   ! en kg/kg
554         zone_tempa=1.2e-3   ! courbure de la relation entre l'indice et la temperature: 0 pour lineaire, <0 pour plus de detail en bas
555!        zone_temp1=14.0e-3  ! en kg/kg       
556!        zone_tempf=0.2e-3   ! en kg/kg
557!        zone_tempa=0.5e-3
558!        zone_temp1=10.0e-3  ! en kg/kg       
559!        zone_tempf=0.5e-3   ! en kg/kg
560!        zone_tempa=0.5e-3
561         ! zone 1: >= zone_temp1
562         ! zone 2 a 4: intermediaire,
563         ! zone 5: <zone_tempf
564         nzone_opt=nzone_temp+4
565         izone_cont=nzone_temp+1
566         izone_oce=nzone_temp+1
567         izone_poubelle=nzone_temp+1
568         IF(option_seuil_tag_tmin == 1) THEN
569            izone_init=nzone_temp+1 ! zone d'initialisation par defaut
570         ELSE
571            izone_init=nzone_temp
572         END IF
573         option_revap=1   
574         izone_revap=nzone_temp+3
575         izone_cond=nzone_temp+2
576         izone_ddft=nzone_temp+4
577         option_tmin=1         
578         option_cond=1
579         DO izone=1,nzone_temp
580            strtrac(izone) = 't'//TRIM(int2str(izone))
581            WRITE(*,*) 'izone, strtrac = ', izone, strtrac(izone)
582         END DO
583         strtrac(izone_poubelle)='sfc'
584         strtrac(izone_cond)='con'
585         strtrac(izone_revap)='rev'
586         strtrac(izone_ddft)='dft'
587      !========================================================================================================================
588      CASE(20)     !=== TRACING TROPICAL/EXTRATROPICAL/EXTRATROPICAL RECYCLING TO STUDY HUMIDITY AND SUBTROPICAL ISOTOPES CONTROL
589      !========================================================================================================================
590         CALL get_in('lim_tag20', lim_tag20, 35.0)
591         nzone_opt=3
592         izone_cont=1
593         izone_oce=1
594         izone_poubelle=2    ! zone ou on met les flux non physiques, de reajustement
595         izone_init=2        ! zone d'initialisation par defaut
596         option_revap=0
597         option_tmin=0
598         izone_revap=0
599         izone_trop=2
600         izone_extra=3
601         strtrac(izone_trop)='tro'     ! tropical vapour
602         strtrac(izone_extra)='ext'    ! extratropical vapour evaporated in the tropics
603         strtrac(izone_cont)='rec'     ! recycling
604      !========================================================================================================================
605      CASE(21)     !=== TRACING TWO 3D BOXES: TROPICAL UT AND EXTRATROPICS ; SIMILAR TO 5 FOR AMMA ZONES TAGGING
606      !========================================================================================================================
607!        WRITE(*,*) 'iso_traceurs_init 129'
608         nzone_opt=3
609         izone_cont=1
610         izone_oce=1
611         izone_poubelle=1    ! zone ou on met les flux non physiques, de reajustement
612         izone_init=1        ! zone d'initialisation par defaut
613         option_revap=0
614         option_tmin=0
615         izone_revap=0
616         izone_trop=2
617         izone_extra=3
618         option_cond=0
619         strtrac(izone_poubelle)='res'
620         strtrac(izone_trop)='tro'
621         strtrac(izone_extra)='ext'
622      !========================================================================================================================
623      CASE(22)     !=== TRACING WATER VAPOUR PROCESSED IN THE 3-LEVELS SCONVECTION ZONES BT, MT AND UT
624      !========================================================================================================================
625         CALL get_in('lim_precip_tag22', lim_precip_tag22, 20.0)
626         nzone_opt=3
627         izone_cont=1
628         izone_oce=1
629         izone_poubelle=1    ! zone ou on met les flux non physiques, de reajustement
630         izone_init=1        ! zone d'initialisation par defaut
631         option_revap=0
632         option_tmin=0
633         izone_revap=0
634         izone_conv_BT=2
635         izone_conv_UT=3
636         option_cond=0
637         strtrac(izone_poubelle)='res'
638         strtrac(izone_conv_BT)='cbt'
639         strtrac(izone_conv_UT)='cut'
640      CASE DEFAULT
641         WRITE(*,*) 'traceurs_init 36: option pas encore prevue'
642         CALL abort_physic ('isotrac_mod 641','option pas encore prevue',1)
643   END SELECT
644
645   IF(nzone_opt /= nzone) THEN
646      WRITE(*,*) 'nzone_opt, nzone=', nzone_opt, nzone
647      CALL abort_physic ('isotrac_mod','nzone incoherent',1)
648   END IF
649
650   !--- Condensation rate threshold
651   IF(option_tmin == 1) THEN
652      seuil_tag_tmin = 0.01
653      CALL get_in('seuil_tag_tmin',        seuil_tag_tmin,        0.01)
654      CALL get_in('seuil_tag_tmin_ls',     seuil_tag_tmin_ls,     seuil_tag_tmin)
655      CALL get_in('option_seuil_tag_tmin', option_seuil_tag_tmin, 1)
656   END IF
657
658   index_zone = [(strIdx(isoZone, strTail(isoName(ixt) ,'_',.TRUE.)), ixt=1, ntiso)]
659   index_iso  = [(strIdx(isoName, strHead(isoName(ixt) ,'_',.TRUE.)), ixt=1, ntiso)]
660   itZonIso_loc = itZonIso(:,:)
661#ifdef ISOVERIF
662   WRITE(*,*) 'traceurs_init 65: bilan de l''init:'
663   WRITE(*,*) 'index_zone = '//TRIM(strStack(int2str(index_zone(1:ntiso))))
664   WRITE(*,*) 'index_iso  = '//TRIM(strStack(int2str(index_iso (1:ntiso))))
665   DO izone=1,nzone
666      WRITE(*,*)'itZonIso('//TRIM(int2str(izone))//',:) = '//strStack(int2str(itZonIso(izone,:)))
667   END DO
668   DO izone=1,nzone
669      WRITE(*,*)'strtrac('//TRIM(int2str(izone))//',:) = '//TRIM(strtrac(izone))
670   END DO
671   WRITE(*,*) 'ntracisoOR=',ntracisoOR
672#endif 
673
674END SUBROUTINE iso_traceurs_init
675
676END MODULE isotrac_mod
677#endif
678#endif
Note: See TracBrowser for help on using the repository browser.