source: LMDZ6/branches/cirrus/libf/phylmdiso/isotrac_mod.F90 @ 5210

Last change on this file since 5210 was 5203, checked in by Laurent Fairhead, 30 hours ago

Merge with trunk revision 5202 before reintegration to trunk

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