source: LMDZ6/trunk/libf/phylmdiso/isotrac_mod.F90 @ 5756

Last change on this file since 5756 was 5754, checked in by dcugnet, 5 months ago

Make the ioipsl_getin_p routine more flexible: optional default value
and optional flag to print or not the effective value of the key
=> get rid of the get_in routine

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