[3927] | 1 | #ifdef ISO |
---|
| 2 | #ifdef ISOTRAC |
---|
| 3 | ! $Id: $ |
---|
| 4 | |
---|
| 5 | MODULE isotrac_mod |
---|
[4143] | 6 | use infotrac_phy, ONLY: niso,ntiso,ntraceurs_zone=>nzone |
---|
[3927] | 7 | use isotopes_mod, only: ridicule |
---|
| 8 | |
---|
| 9 | IMPLICIT NONE |
---|
| 10 | SAVE |
---|
| 11 | |
---|
| 12 | ! contient toutes les variables traceurs isotopiques + les routines specifiquement |
---|
| 13 | ! traceurs isotopiques |
---|
| 14 | |
---|
| 15 | real ridicule_trac |
---|
| 16 | parameter (ridicule_trac=ridicule*1e4) |
---|
| 17 | |
---|
| 18 | integer, save :: option_traceurs |
---|
| 19 | integer, save :: ntraceurs_zone_opt ! ntraceurs_zone propre à l'option |
---|
| 20 | ! on vérifie que ça correspond bien à ntraceurs_zone d'infotrac |
---|
| 21 | integer, save :: ntraceurs_zoneOR |
---|
| 22 | !$OMP THREADPRIVATE(option_traceurs,ntraceurs_zone_opt,ntraceurs_zoneOR) |
---|
| 23 | integer, save :: initialisation_isotrac |
---|
| 24 | ! 1 pour idéalisé |
---|
| 25 | ! 0 pour lecture dans fichier |
---|
| 26 | !$OMP THREADPRIVATE(initialisation_isotrac) |
---|
| 27 | |
---|
| 28 | ! variables spécifiques aux différentes options, mais necessaires au |
---|
| 29 | ! calcul du nombre de zones de traceurs |
---|
| 30 | ! si option=3 |
---|
| 31 | integer, save :: use_bassin_atlantic |
---|
| 32 | !$OMP THREADPRIVATE(use_bassin_atlantic) |
---|
| 33 | integer, save :: use_bassin_medit |
---|
| 34 | !$OMP THREADPRIVATE(use_bassin_medit) |
---|
| 35 | integer, save :: use_bassin_indian |
---|
| 36 | !$OMP THREADPRIVATE(use_bassin_indian) |
---|
| 37 | integer, save :: use_bassin_austral |
---|
| 38 | !$OMP THREADPRIVATE(use_bassin_austral) |
---|
| 39 | integer, save :: use_bassin_pacific |
---|
| 40 | !$OMP THREADPRIVATE(use_bassin_pacific) |
---|
| 41 | integer, save :: use_bassin_merarabie |
---|
| 42 | !$OMP THREADPRIVATE(use_bassin_merarabie) |
---|
| 43 | integer, save :: use_bassin_golfebengale |
---|
| 44 | !$OMP THREADPRIVATE(use_bassin_golfebengale) |
---|
| 45 | integer, save :: use_bassin_indiansud |
---|
| 46 | !$OMP THREADPRIVATE(use_bassin_indiansud) |
---|
| 47 | integer, save :: use_bassin_tropics |
---|
| 48 | !$OMP THREADPRIVATE(use_bassin_tropics) |
---|
| 49 | integer, save :: use_bassin_midlats |
---|
| 50 | !$OMP THREADPRIVATE(use_bassin_midlats) |
---|
| 51 | integer, save :: use_bassin_hauteslats |
---|
| 52 | !$OMP THREADPRIVATE(use_bassin_hauteslats) |
---|
| 53 | integer, save :: bassin_atlantic |
---|
| 54 | !$OMP THREADPRIVATE(bassin_atlantic) |
---|
| 55 | integer, save :: bassin_medit |
---|
| 56 | !$OMP THREADPRIVATE(bassin_medit) |
---|
| 57 | integer, save :: bassin_indian |
---|
| 58 | !$OMP THREADPRIVATE(bassin_indian) |
---|
| 59 | integer, save :: bassin_austral |
---|
| 60 | !$OMP THREADPRIVATE(bassin_austral) |
---|
| 61 | integer, save :: bassin_pacific |
---|
| 62 | !$OMP THREADPRIVATE(bassin_pacific) |
---|
| 63 | integer, save :: bassin_merarabie |
---|
| 64 | !$OMP THREADPRIVATE(bassin_merarabie) |
---|
| 65 | integer, save :: bassin_golfebengale |
---|
| 66 | !$OMP THREADPRIVATE(bassin_golfebengale) |
---|
| 67 | integer, save :: bassin_indiansud |
---|
| 68 | !$OMP THREADPRIVATE(bassin_indiansud) |
---|
| 69 | integer, save :: bassin_tropics |
---|
| 70 | !$OMP THREADPRIVATE(bassin_tropics) |
---|
| 71 | integer, save :: bassin_midlats |
---|
| 72 | !$OMP THREADPRIVATE(bassin_midlats) |
---|
| 73 | integer, save :: bassin_hauteslats |
---|
| 74 | !$OMP THREADPRIVATE(bassin_hauteslats) |
---|
| 75 | ! si option=4 |
---|
| 76 | integer nzone_temp |
---|
| 77 | parameter (nzone_temp=1) |
---|
| 78 | real, save :: zone_temp1,zone_tempf,zone_tempa |
---|
| 79 | !$OMP THREADPRIVATE(zone_temp1,zone_tempf,zone_tempa) |
---|
| 80 | ! si option 14 |
---|
| 81 | integer nzone_lat |
---|
| 82 | parameter (nzone_lat=4) |
---|
| 83 | integer nzone_pres |
---|
| 84 | parameter (nzone_pres=3) |
---|
| 85 | real, save :: zone_pres1,zone_presf,zone_presa |
---|
| 86 | !$OMP THREADPRIVATE(zone_pres1,zone_presf,zone_presa) |
---|
| 87 | real, save :: dlattag,lattag_min |
---|
| 88 | !$OMP THREADPRIVATE(dlattag,lattag_min) |
---|
| 89 | |
---|
| 90 | |
---|
| 91 | ! option 1: on trace evap ocean et continent séparement |
---|
| 92 | ! option 2: on trace evap ocean, continent et evap precip |
---|
| 93 | ! option 3: on trace evap différents bassins océaniques |
---|
| 94 | ! + continents + résidu |
---|
| 95 | ! attention, choisir dans ce cas les bassins océaniques |
---|
| 96 | ! dans iso_traceurs_opt3F90.h |
---|
| 97 | ! option 4: tracage par température minimale |
---|
| 98 | ! dans ce cas, on définit des bins dans iso_traceurs_opt4.h |
---|
| 99 | ! option 5: pour AMMA: on taggue résidu/AEJ/flux mousson/Harmattan |
---|
| 100 | ! option 6: taggage des ddfts |
---|
| 101 | ! option 7: pour Sandrine: taggage de la vapeur à 700hPa pour omega500<-20 TODO |
---|
| 102 | ! option 8: pour Sandrine: taggage de la vapeur entre 950 et 800hPa, omega de 0 à 25 hPa et de l'évaoration en omega<-20. TODO |
---|
| 103 | ! option 9: taggage du condensat et de la revap precip |
---|
| 104 | ! option 10: taggage evap oce, transpiration et evaporation |
---|
| 105 | ! fractionante. A utiliser quand on couple avec ORCHIDEE |
---|
| 106 | ! option 11: comme 2, mais on trace juste revap precip et reste |
---|
| 107 | ! option 12: taggage evap oce, sol nu, canop et reste evap cont. |
---|
| 108 | ! A utiliser quand on couple avec ORCHIDEE |
---|
| 109 | ! option 13: taggage température minimale + revap precip |
---|
| 110 | ! option 14: taggage lat et altitude de dernière saturation (niveaux de pression) + evap surf |
---|
| 111 | ! otion 15: taggage irrigation |
---|
| 112 | ! option 16: taggage precip selon saisons et fonte neige: seulement pour ORCHIDEE |
---|
| 113 | ! option 17: taggage température minimum de condensation directement dans la convection et la cond LS, + evap sfc, condensat et precipitation |
---|
| 114 | ! option 18: idem 17 mais on tague qsmin au lieu de Tmin |
---|
| 115 | ! option 19: on tag vap residuelle, vap residuelle dans ddfts, sfc, cond, rev |
---|
| 116 | ! option 20: on taggue vapeur tropicale vs vapeur extratropicale |
---|
| 117 | ! option 21: taggage de 2 boites 3D: extratropiques (>35°) et UT tropicale (15-15°, > 500hPa) |
---|
| 118 | ! option 22: tagage de la vapeur proccessée dans les zones très convectives |
---|
| 119 | |
---|
| 120 | ! ces variables sont initialisées dans traceurs_init |
---|
| 121 | |
---|
| 122 | integer, ALLOCATABLE, DIMENSION(:), save :: index_iso |
---|
| 123 | !$OMP THREADPRIVATE(index_iso) |
---|
| 124 | integer, ALLOCATABLE, DIMENSION(:), save :: index_zone |
---|
| 125 | !$OMP THREADPRIVATE(index_zone) |
---|
[4143] | 126 | integer, ALLOCATABLE, DIMENSION(:,:), save :: itZonIso_loc ! il y a déjà un itZonIso dans infotrac: vérifier que c'est le même |
---|
| 127 | !$OMP THREADPRIVATE(itZonIso_loc) |
---|
[3927] | 128 | character*3, ALLOCATABLE, DIMENSION(:), save :: strtrac |
---|
| 129 | !$OMP THREADPRIVATE(strtrac) |
---|
| 130 | ! -> tout ça passe maintenant par infotrac |
---|
| 131 | |
---|
| 132 | integer, ALLOCATABLE, DIMENSION(:), save :: bassin_map |
---|
| 133 | integer, ALLOCATABLE, DIMENSION(:,:), save :: boite_map |
---|
| 134 | !$OMP THREADPRIVATE(bassin_map,boite_map) |
---|
| 135 | |
---|
| 136 | |
---|
| 137 | ! traitement recyclage et evap |
---|
| 138 | integer, save :: izone_cont ! pour le recyclage continental |
---|
| 139 | !$OMP THREADPRIVATE(izone_cont) |
---|
| 140 | integer, save :: izone_oce ! pour l'océan |
---|
| 141 | !$OMP THREADPRIVATE(izone_oce) |
---|
| 142 | integer, save :: izone_poubelle ! pour les petits résidus numériques |
---|
| 143 | !$OMP THREADPRIVATE(izone_poubelle) |
---|
| 144 | integer, save :: izone_init ! pour l'initialisation par défaut |
---|
| 145 | !$OMP THREADPRIVATE(izone_init) |
---|
| 146 | integer, save :: izone_revap ! pour l'évap des gouttes |
---|
| 147 | !$OMP THREADPRIVATE(izone_revap) |
---|
| 148 | integer, save :: option_revap |
---|
| 149 | !$OMP THREADPRIVATE(option_revap) |
---|
| 150 | integer, save :: option_tmin |
---|
| 151 | !$OMP THREADPRIVATE(option_tmin) |
---|
| 152 | integer, save :: option_cond |
---|
| 153 | !$OMP THREADPRIVATE(option_cond) |
---|
| 154 | integer, save :: izone_cond |
---|
| 155 | !$OMP THREADPRIVATE(izone_cond) |
---|
| 156 | real evap_franche |
---|
| 157 | parameter (evap_franche=1e-6) ! en kg/m2/s |
---|
| 158 | |
---|
| 159 | ! specifique à option 4: |
---|
| 160 | real, save :: zone_temp(nzone_temp-1) |
---|
| 161 | !$OMP THREADPRIVATE(zone_temp) |
---|
| 162 | ! si option 5 |
---|
| 163 | integer, save :: izone_aej |
---|
| 164 | !$OMP THREADPRIVATE(izone_aej) |
---|
| 165 | integer, save :: izone_harmattan |
---|
| 166 | !$OMP THREADPRIVATE(izone_harmattan) |
---|
| 167 | integer, save :: izone_mousson |
---|
| 168 | !$OMP THREADPRIVATE(izone_mousson) |
---|
| 169 | ! si option 6 |
---|
| 170 | integer, save :: izone_ddft |
---|
| 171 | !$OMP THREADPRIVATE(izone_ddft) |
---|
| 172 | ! si option 10 |
---|
| 173 | integer, save :: izone_contfrac |
---|
| 174 | !$OMP THREADPRIVATE(izone_contfrac) |
---|
| 175 | ! si option 12 |
---|
| 176 | integer, save :: izone_contcanop |
---|
| 177 | !$OMP THREADPRIVATE(izone_contcanop) |
---|
| 178 | ! specifique à option 13: |
---|
| 179 | real, save :: zone_pres(nzone_pres-1) |
---|
| 180 | !$OMP THREADPRIVATE(zone_pres) |
---|
| 181 | ! si option 14 |
---|
| 182 | real, save :: zone_lat(nzone_lat-1) |
---|
| 183 | !$OMP THREADPRIVATE(zone_lat) |
---|
| 184 | ! si option 15 |
---|
| 185 | integer, save :: izone_irrig |
---|
| 186 | !$OMP THREADPRIVATE(izone_irrig) |
---|
| 187 | ! si option 17 |
---|
| 188 | real, save :: seuil_tag_tmin |
---|
| 189 | !$OMP THREADPRIVATE(seuil_tag_tmin) |
---|
| 190 | real, save :: seuil_tag_tmin_ls |
---|
| 191 | !$OMP THREADPRIVATE(seuil_tag_tmin_ls) |
---|
| 192 | integer, save :: option_seuil_tag_tmin |
---|
| 193 | !$OMP THREADPRIVATE(option_seuil_tag_tmin) |
---|
| 194 | ! si option 20 |
---|
| 195 | integer, save :: izone_trop,izone_extra |
---|
| 196 | real, save :: lim_tag20 |
---|
| 197 | !$OMP THREADPRIVATE(izone_trop,izone_extra,lim_tag20) |
---|
| 198 | ! si option 21: on garde izone_trop,izone_extra |
---|
| 199 | ! si opt 22 |
---|
| 200 | integer, save :: izone_conv_BT,izone_conv_UT |
---|
| 201 | real, save :: lim_precip_tag22 |
---|
| 202 | !$OMP THREADPRIVATE(izone_conv_BT,izone_conv_UT,lim_precip_tag22) |
---|
| 203 | |
---|
| 204 | |
---|
| 205 | CONTAINS |
---|
| 206 | |
---|
| 207 | subroutine iso_traceurs_init() |
---|
| 208 | |
---|
| 209 | use IOIPSL ! getin |
---|
[4143] | 210 | USE infotrac_phy, ONLY: itZonIso |
---|
| 211 | USE isotopes_mod, ONLY: iso_eau,ntracisoOR,initialisation_iso |
---|
[3927] | 212 | USE dimphy, only: klon,klev |
---|
| 213 | |
---|
| 214 | implicit none |
---|
| 215 | |
---|
| 216 | |
---|
| 217 | ! définition de quelles zones et quelles isotopes représentent |
---|
| 218 | ! les traceurs |
---|
| 219 | |
---|
| 220 | ! inputs, outputs |
---|
| 221 | ! ! c'est les variables dans traceurs.h qui sont modifiées |
---|
| 222 | |
---|
| 223 | ! locals |
---|
| 224 | integer itrac,izone,ixt,k |
---|
| 225 | integer izone_pres,izone_lat |
---|
| 226 | character*2 strz,strz_preslat |
---|
| 227 | character*1 strz_pres,strz_lat |
---|
| 228 | integer ntraceurs_zone_opt |
---|
| 229 | |
---|
| 230 | ! vérifier que on a bien l'eau comme traceurs |
---|
| 231 | if (iso_eau.eq.0) then |
---|
| 232 | write(*,*) 'traceurs_init 18: isotrac ne marche que si ', & |
---|
| 233 | & 'on met l''eau comme isotope' |
---|
| 234 | stop |
---|
| 235 | endif |
---|
| 236 | |
---|
| 237 | ! initialiser |
---|
| 238 | option_traceurs=0 |
---|
| 239 | initialisation_isotrac=0 |
---|
| 240 | |
---|
| 241 | ! allouer |
---|
[4143] | 242 | allocate (index_iso(ntiso)) |
---|
| 243 | allocate (index_zone(ntiso)) |
---|
| 244 | allocate (itZonIso_loc(ntraceurs_zone,niso)) |
---|
[3927] | 245 | allocate (strtrac(ntraceurs_zone)) |
---|
| 246 | allocate (bassin_map(klon)) |
---|
| 247 | allocate (boite_map(klon,klev)) |
---|
| 248 | |
---|
| 249 | if (initialisation_iso.eq.0) then |
---|
| 250 | call getin('initialisation_isotrac',initialisation_isotrac) |
---|
| 251 | write(*,*) 'initialisation_isotrac=',initialisation_isotrac |
---|
| 252 | endif !if (initialisation_iso.eq.0) then |
---|
| 253 | |
---|
| 254 | ! lire l'option de traçage |
---|
| 255 | call getin('option_traceurs',option_traceurs) |
---|
| 256 | write(*,*) 'option_traceurs=',option_traceurs |
---|
| 257 | |
---|
| 258 | ! cas général: pas de traceurs dans ORCHIDEE |
---|
| 259 | ntracisoOR=niso |
---|
| 260 | |
---|
| 261 | ! partie à éditer ! pour définir les différentes zones |
---|
| 262 | if (option_traceurs.eq.1) then |
---|
| 263 | ! on trace continents/ocean |
---|
| 264 | |
---|
| 265 | ntraceurs_zone_opt=2 |
---|
| 266 | izone_cont=1 |
---|
| 267 | izone_oce=2 |
---|
| 268 | izone_poubelle=2 ! zone où on met les flux non physiques, de |
---|
| 269 | ! réajustement |
---|
| 270 | izone_init=2 ! zone d'initialisation par défaut |
---|
| 271 | option_revap=0 |
---|
| 272 | option_tmin=0 |
---|
| 273 | izone_revap=0 |
---|
| 274 | option_cond=0 |
---|
| 275 | |
---|
| 276 | strtrac(izone_cont)='con' |
---|
| 277 | strtrac(izone_oce)='oce' |
---|
| 278 | |
---|
| 279 | elseif (option_traceurs.eq.2) then |
---|
| 280 | ! on trace continent/ ocean/reevap des gouttes |
---|
| 281 | |
---|
| 282 | ntraceurs_zone_opt=3 |
---|
| 283 | izone_cont=1 |
---|
| 284 | izone_oce=2 |
---|
| 285 | izone_poubelle=2 ! zone où on met les flux non physiques, de |
---|
| 286 | ! réajustement |
---|
| 287 | izone_init=2 ! zone d'initialisation par défaut |
---|
| 288 | option_revap=1 |
---|
| 289 | option_tmin=0 |
---|
| 290 | izone_revap=3 |
---|
| 291 | option_cond=0 |
---|
| 292 | |
---|
| 293 | strtrac(izone_cont)='con' |
---|
| 294 | strtrac(izone_oce)='oce' |
---|
| 295 | strtrac(izone_revap)='rev' |
---|
| 296 | |
---|
| 297 | |
---|
| 298 | else if (option_traceurs.eq.3) then |
---|
| 299 | ! on trace des bassins océaniques + un résidu. On ne trace |
---|
| 300 | ! pas l'évap des gouttes à part |
---|
| 301 | ! le résidu est la dernère dimension |
---|
| 302 | |
---|
| 303 | ! lire les use_bassin |
---|
| 304 | call getin('use_bassin_atlantic',use_bassin_atlantic) |
---|
| 305 | call getin('use_bassin_medit',use_bassin_medit) |
---|
| 306 | call getin('use_bassin_indian',use_bassin_indian) |
---|
| 307 | call getin('use_bassin_austral',use_bassin_austral) |
---|
| 308 | call getin('use_bassin_pacific',use_bassin_pacific) |
---|
| 309 | call getin('use_bassin_merarabie',use_bassin_merarabie) |
---|
| 310 | call getin('use_bassin_golfebengale',use_bassin_golfebengale) |
---|
| 311 | call getin('use_bassin_indiansud',use_bassin_indiansud) |
---|
| 312 | call getin('use_bassin_tropics',use_bassin_tropics) |
---|
| 313 | call getin('use_bassin_midlats',use_bassin_midlats) |
---|
| 314 | call getin('use_bassin_hauteslats',use_bassin_hauteslats) |
---|
| 315 | |
---|
| 316 | write(*,*) 'use_bassin_atlantic=' ,use_bassin_atlantic |
---|
| 317 | write(*,*) 'use_bassin_medit=' ,use_bassin_medit |
---|
| 318 | write(*,*) 'use_bassin_indian=' ,use_bassin_indian |
---|
| 319 | write(*,*) 'use_bassin_austral=' ,use_bassin_austral |
---|
| 320 | write(*,*) 'use_bassin_merarabie=' ,use_bassin_merarabie |
---|
| 321 | write(*,*) 'use_bassin_golfebengale=' ,use_bassin_golfebengale |
---|
| 322 | write(*,*) 'use_bassin_indiansud=' ,use_bassin_indiansud |
---|
| 323 | write(*,*) 'use_bassin_tropics=' ,use_bassin_tropics |
---|
| 324 | write(*,*) 'use_bassin_midlats=' ,use_bassin_midlats |
---|
| 325 | write(*,*) 'use_bassin_hauteslats=' ,use_bassin_hauteslats |
---|
| 326 | |
---|
| 327 | |
---|
| 328 | ntraceurs_zone_opt=2 & |
---|
| 329 | & +use_bassin_atlantic & |
---|
| 330 | & +use_bassin_medit & |
---|
| 331 | & +use_bassin_indian & |
---|
| 332 | & +use_bassin_austral & |
---|
| 333 | & +use_bassin_pacific & |
---|
| 334 | & +use_bassin_merarabie & |
---|
| 335 | & +use_bassin_golfebengale & |
---|
| 336 | & +use_bassin_indiansud & |
---|
| 337 | & +use_bassin_tropics & |
---|
| 338 | & +use_bassin_midlats & |
---|
| 339 | & +use_bassin_hauteslats |
---|
| 340 | |
---|
| 341 | izone_cont=ntraceurs_zone |
---|
| 342 | izone_oce=0 ! pas de sens car séparée en bassins |
---|
| 343 | izone_poubelle=ntraceurs_zone-1 ! zone où on met les flux non physiques, de |
---|
| 344 | ! réajustement |
---|
| 345 | izone_init=ntraceurs_zone-1 ! zone d'initialisation par défaut |
---|
| 346 | option_revap=0 ! on ne trace pas les gouttes |
---|
| 347 | option_tmin=0 |
---|
| 348 | izone_revap=0 ! pas de sens car on taggue pas les gouttes séparemment |
---|
| 349 | option_cond=0 |
---|
| 350 | |
---|
| 351 | ! si on a use_bassin_indian, on n'a pas le découpage détaillé |
---|
| 352 | ! de l'indian: |
---|
| 353 | #ifdef ISOVERIF |
---|
| 354 | if (use_bassin_indian.eq.1) then |
---|
| 355 | ! call iso_verif_egalite(float(use_bassin_merarabie), & |
---|
| 356 | ! & 0.0,'iso_traceurs_init 73: revoir def des bassins') |
---|
| 357 | if ((use_bassin_merarabie.ne.0).or. & |
---|
| 358 | & (use_bassin_indiansud.ne.0).or. & |
---|
| 359 | & (use_bassin_golfebengale.ne.0)) then |
---|
| 360 | write(*,*) 'traceurs_init 73' |
---|
| 361 | stop |
---|
| 362 | endif |
---|
| 363 | ! call iso_verif_egalite(float(use_bassin_golfebengale), & |
---|
| 364 | ! & 0.0,'iso_traceurs_init 73: revoir def des bassins') |
---|
| 365 | ! call iso_verif_egalite(float(use_bassin_indiansud), & |
---|
| 366 | ! & 0.0,'iso_traceurs_init 73: revoir def des bassins') |
---|
| 367 | endif |
---|
| 368 | #endif |
---|
| 369 | |
---|
| 370 | bassin_atlantic= max(use_bassin_atlantic,1) |
---|
| 371 | bassin_medit=max(use_bassin_atlantic & |
---|
| 372 | & +use_bassin_medit,1) |
---|
| 373 | bassin_indian=max(use_bassin_atlantic & |
---|
| 374 | & +use_bassin_medit & |
---|
| 375 | & +use_bassin_indian,1) |
---|
| 376 | bassin_austral=max(use_bassin_atlantic & |
---|
| 377 | & +use_bassin_medit & |
---|
| 378 | & +use_bassin_indian & |
---|
| 379 | & +use_bassin_austral,1) |
---|
| 380 | bassin_pacific=max(use_bassin_atlantic & |
---|
| 381 | & +use_bassin_medit & |
---|
| 382 | & +use_bassin_indian & |
---|
| 383 | & +use_bassin_austral & |
---|
| 384 | & +use_bassin_pacific,1) |
---|
| 385 | bassin_merarabie=max(use_bassin_atlantic & |
---|
| 386 | & +use_bassin_medit & |
---|
| 387 | & +use_bassin_indian & |
---|
| 388 | & +use_bassin_austral & |
---|
| 389 | & +use_bassin_pacific & |
---|
| 390 | & +use_bassin_merarabie,1) |
---|
| 391 | bassin_golfebengale=max(use_bassin_atlantic& |
---|
| 392 | & +use_bassin_medit & |
---|
| 393 | & +use_bassin_indian & |
---|
| 394 | & +use_bassin_austral & |
---|
| 395 | & +use_bassin_pacific & |
---|
| 396 | & +use_bassin_merarabie & |
---|
| 397 | & +use_bassin_golfebengale,1) |
---|
| 398 | bassin_indiansud=max(use_bassin_atlantic & |
---|
| 399 | & +use_bassin_medit & |
---|
| 400 | & +use_bassin_indian & |
---|
| 401 | & +use_bassin_austral & |
---|
| 402 | & +use_bassin_pacific & |
---|
| 403 | & +use_bassin_merarabie & |
---|
| 404 | & +use_bassin_golfebengale & |
---|
| 405 | & +use_bassin_indiansud,1) |
---|
| 406 | bassin_tropics=max(use_bassin_atlantic & |
---|
| 407 | & +use_bassin_medit & |
---|
| 408 | & +use_bassin_indian & |
---|
| 409 | & +use_bassin_austral & |
---|
| 410 | & +use_bassin_pacific & |
---|
| 411 | & +use_bassin_merarabie & |
---|
| 412 | & +use_bassin_golfebengale & |
---|
| 413 | & +use_bassin_indiansud, & |
---|
| 414 | & +use_bassin_tropics,1) |
---|
| 415 | bassin_midlats=max(use_bassin_atlantic & |
---|
| 416 | & +use_bassin_medit & |
---|
| 417 | & +use_bassin_indian & |
---|
| 418 | & +use_bassin_austral & |
---|
| 419 | & +use_bassin_pacific & |
---|
| 420 | & +use_bassin_merarabie & |
---|
| 421 | & +use_bassin_golfebengale & |
---|
| 422 | & +use_bassin_indiansud & |
---|
| 423 | & +use_bassin_tropics & |
---|
| 424 | & +use_bassin_midlats,1) |
---|
| 425 | bassin_hauteslats=max(use_bassin_atlantic & |
---|
| 426 | & +use_bassin_medit & |
---|
| 427 | & +use_bassin_indian & |
---|
| 428 | & +use_bassin_austral & |
---|
| 429 | & +use_bassin_pacific & |
---|
| 430 | & +use_bassin_merarabie & |
---|
| 431 | & +use_bassin_golfebengale & |
---|
| 432 | & +use_bassin_indiansud & |
---|
| 433 | & +use_bassin_tropics & |
---|
| 434 | & +use_bassin_midlats & |
---|
| 435 | & +use_bassin_hauteslats,1) |
---|
| 436 | |
---|
| 437 | write(*,*) 'bassin_atlantic=' ,bassin_atlantic |
---|
| 438 | write(*,*) 'bassin_medit=' ,bassin_medit |
---|
| 439 | write(*,*) 'bassin_indian=' ,bassin_indian |
---|
| 440 | write(*,*) 'bassin_austral=' ,bassin_austral |
---|
| 441 | write(*,*) 'bassin_merarabie=' ,bassin_merarabie |
---|
| 442 | write(*,*) 'bassin_golfebengale=' ,bassin_golfebengale |
---|
| 443 | write(*,*) 'bassin_indiansud=' ,bassin_indiansud |
---|
| 444 | write(*,*) 'bassin_tropics=' ,bassin_tropics |
---|
| 445 | write(*,*) 'bassin_midlats=' ,bassin_midlats |
---|
| 446 | write(*,*) 'bassin_hauteslats=' ,bassin_hauteslats |
---|
| 447 | |
---|
| 448 | if (use_bassin_atlantic.eq.1) then |
---|
| 449 | strtrac(bassin_atlantic)='atl' |
---|
| 450 | endif |
---|
| 451 | if (use_bassin_medit.eq.1) then |
---|
| 452 | strtrac(bassin_medit)='med' |
---|
| 453 | endif |
---|
| 454 | if (use_bassin_indian.eq.1) then |
---|
| 455 | strtrac(bassin_indian)='ind' |
---|
| 456 | endif |
---|
| 457 | if (use_bassin_austral.eq.1) then |
---|
| 458 | strtrac(bassin_austral)='aus' |
---|
| 459 | endif |
---|
| 460 | if (use_bassin_pacific.eq.1) then |
---|
| 461 | strtrac(bassin_pacific)='pac' |
---|
| 462 | endif |
---|
| 463 | if (use_bassin_merarabie.eq.1) then |
---|
| 464 | strtrac(bassin_merarabie)='ara' |
---|
| 465 | endif |
---|
| 466 | if (use_bassin_golfebengale.eq.1) then |
---|
| 467 | strtrac(bassin_golfebengale)='ben' |
---|
| 468 | endif |
---|
| 469 | if (use_bassin_indiansud.eq.1) then |
---|
| 470 | strtrac(bassin_indiansud)='ins' |
---|
| 471 | endif |
---|
| 472 | if (use_bassin_tropics.eq.1) then |
---|
| 473 | strtrac(bassin_tropics)='tro' |
---|
| 474 | endif |
---|
| 475 | if (use_bassin_midlats.eq.1) then |
---|
| 476 | strtrac(bassin_midlats)='mid' |
---|
| 477 | endif |
---|
| 478 | if (use_bassin_hauteslats.eq.1) then |
---|
| 479 | strtrac(bassin_hauteslats)='hau' |
---|
| 480 | endif |
---|
| 481 | strtrac(ntraceurs_zone-1)='res' |
---|
| 482 | strtrac(ntraceurs_zone)='con' |
---|
| 483 | |
---|
| 484 | else if (option_traceurs.eq.4) then |
---|
| 485 | ! on trace les température minimales vécues |
---|
| 486 | ! comme dans article sur LdG sauf pas de revap |
---|
| 487 | |
---|
| 488 | zone_temp1=293.0 ! en K |
---|
| 489 | ! zone_tempf=223.0 ! en K |
---|
| 490 | zone_tempf=243.0 ! en K |
---|
| 491 | ! courbure de la relation entre l'indice et la température: 0 pour linéaire, <0 pour plus de détal en bas |
---|
| 492 | |
---|
| 493 | ! zone 1: >= zone_temp1 |
---|
| 494 | ! zone 2 à 4: intermédiaire, |
---|
| 495 | ! zone 5: <zone_tempf |
---|
| 496 | |
---|
| 497 | ntraceurs_zone_opt=nzone_temp+1 |
---|
| 498 | |
---|
| 499 | zone_tempa=-4.0 ! en K |
---|
| 500 | izone_cont=ntraceurs_zone |
---|
| 501 | izone_oce=ntraceurs_zone |
---|
| 502 | izone_poubelle=ntraceurs_zone |
---|
| 503 | izone_init=ntraceurs_zone ! zone d'initialisation par défaut |
---|
| 504 | option_revap=0 |
---|
| 505 | option_tmin=0 |
---|
| 506 | izone_revap=0 |
---|
| 507 | option_cond=0 |
---|
| 508 | do izone=1,nzone_temp |
---|
| 509 | write(strz,'(i2.2)') izone |
---|
| 510 | strtrac(izone)='t'//strz |
---|
| 511 | write(*,*) 'izone,strz,strtrac=',izone,strz,strtrac(izone) |
---|
| 512 | enddo |
---|
| 513 | strtrac(izone_poubelle)='pou' |
---|
| 514 | |
---|
| 515 | ! initialisation des zones de tempéarture |
---|
| 516 | do izone=1,nzone_temp-1 |
---|
| 517 | zone_temp(izone)=zone_temp1+float(izone-1) & |
---|
| 518 | & *(zone_tempa*float(izone-nzone_temp+1) & |
---|
| 519 | & +(zone_tempf-zone_temp1)/float(nzone_temp-2)) |
---|
| 520 | enddo |
---|
| 521 | write(*,*) 'iso_trac_init 183: zone_temp=',zone_temp |
---|
| 522 | |
---|
| 523 | elseif (option_traceurs.eq.5) then |
---|
| 524 | ! on trace AEJ/flux de mousson/Harmattan |
---|
| 525 | ! write(*,*) 'iso_traceurs_init 129' |
---|
| 526 | |
---|
| 527 | ntraceurs_zone_opt=4 |
---|
| 528 | izone_cont=1 |
---|
| 529 | izone_oce=1 |
---|
| 530 | izone_poubelle=1 ! zone où on met les flux non physiques, de |
---|
| 531 | ! réajustement |
---|
| 532 | izone_init=1 ! zone d'initialisation par défaut |
---|
| 533 | option_revap=0 |
---|
| 534 | option_tmin=0 |
---|
| 535 | izone_revap=0 |
---|
| 536 | izone_aej=2 |
---|
| 537 | izone_mousson=3 |
---|
| 538 | izone_harmattan=4 |
---|
| 539 | option_cond=0 |
---|
| 540 | |
---|
| 541 | strtrac(izone_poubelle)='res' |
---|
| 542 | strtrac(izone_aej)='aej' |
---|
| 543 | strtrac(izone_mousson)='mou' |
---|
| 544 | strtrac(izone_harmattan)='sah' |
---|
| 545 | |
---|
| 546 | elseif (option_traceurs.eq.6) then |
---|
| 547 | ! on trace les ddfts |
---|
| 548 | |
---|
| 549 | ntraceurs_zone_opt=2 |
---|
| 550 | izone_cont=1 |
---|
| 551 | izone_oce=1 |
---|
| 552 | izone_poubelle=1 ! zone où on met les flux non physiques, de |
---|
| 553 | ! réajustement |
---|
| 554 | izone_init=1 ! zone d'initialisation par défaut |
---|
| 555 | option_revap=0 |
---|
| 556 | option_tmin=0 |
---|
| 557 | izone_revap=0 |
---|
| 558 | izone_ddft=2 |
---|
| 559 | option_cond=0 |
---|
| 560 | |
---|
| 561 | strtrac(izone_poubelle)='res' |
---|
| 562 | strtrac(izone_ddft)='dft' |
---|
| 563 | |
---|
| 564 | elseif (option_traceurs.eq.9) then |
---|
| 565 | ! on trace le condensat |
---|
| 566 | |
---|
| 567 | ntraceurs_zone_opt=3 |
---|
| 568 | izone_cont=1 |
---|
| 569 | izone_oce=1 |
---|
| 570 | izone_poubelle=1 ! zone où on met les flux non physiques, de |
---|
| 571 | ! réajustement |
---|
| 572 | izone_init=1 ! zone d'initialisation par défaut |
---|
| 573 | option_revap=1 |
---|
| 574 | option_tmin=0 |
---|
| 575 | izone_revap=2 |
---|
| 576 | izone_cond=3 |
---|
| 577 | option_cond=1 |
---|
| 578 | |
---|
| 579 | ! 1 par défaut pour colorier à la fois condensat LS et |
---|
| 580 | ! condensat convectif. Mais on peut mettre 2 si on ne veut que |
---|
| 581 | ! collorier que le condensat convectif. |
---|
| 582 | call getin('option_cond',option_cond) |
---|
| 583 | write(*,*) 'option_cond=',option_cond |
---|
| 584 | |
---|
| 585 | strtrac(izone_poubelle)='res' |
---|
| 586 | strtrac(izone_cond)='con' |
---|
| 587 | strtrac(izone_revap)='rev' |
---|
| 588 | |
---|
| 589 | elseif (option_traceurs.eq.10) then |
---|
| 590 | ! on trace l'évap venant de ocean/continent no frac/continent frac |
---|
| 591 | ! utilse seulement si couplé avec ORCHIDEE |
---|
| 592 | #ifdef CPP_VEGET |
---|
| 593 | #else |
---|
| 594 | write(*,*) 'iso_traceurs_init 219: option_traceurs=10 ', & |
---|
| 595 | & 'inutile si on ne couple pas avec ORCHIDEE' |
---|
| 596 | stop |
---|
| 597 | #endif |
---|
| 598 | |
---|
| 599 | ntraceurs_zone_opt=3 |
---|
| 600 | izone_cont=1 ! sous-entendu non fractionnant |
---|
| 601 | izone_oce=2 |
---|
| 602 | izone_poubelle=2 ! zone où on met les flux non physiques, de |
---|
| 603 | ! réajustement |
---|
| 604 | izone_init=2 ! zone d'initialisation par défaut |
---|
| 605 | option_revap=0 |
---|
| 606 | option_tmin=0 |
---|
| 607 | izone_revap=0 |
---|
| 608 | izone_contfrac=3 |
---|
| 609 | izone_contcanop=3 |
---|
| 610 | izone_irrig=0 |
---|
| 611 | option_cond=0 |
---|
| 612 | |
---|
| 613 | strtrac(izone_oce)='oce' |
---|
| 614 | strtrac(izone_cont)='con' |
---|
| 615 | strtrac(izone_contfrac)='enu' ! evap sol nu |
---|
| 616 | |
---|
| 617 | elseif (option_traceurs.eq.11) then |
---|
| 618 | ! on trace reevap des gouttes et le reste |
---|
| 619 | |
---|
| 620 | ntraceurs_zone_opt=2 |
---|
| 621 | izone_cont=1 |
---|
| 622 | izone_oce=1 |
---|
| 623 | izone_poubelle=1 ! zone où on met les flux non physiques, de |
---|
| 624 | ! réajustement |
---|
| 625 | izone_init=1 ! zone d'initialisation par défaut |
---|
| 626 | option_revap=1 |
---|
| 627 | option_tmin=0 |
---|
| 628 | izone_revap=2 |
---|
| 629 | izone_irrig=0 |
---|
| 630 | option_cond=0 |
---|
| 631 | |
---|
| 632 | strtrac(izone_poubelle)='res' |
---|
| 633 | strtrac(izone_revap)='rev' |
---|
| 634 | |
---|
| 635 | elseif (option_traceurs.eq.12) then |
---|
| 636 | ! on trace evap du sol nu, evap de la canopée, reste de l'evap cont et |
---|
| 637 | ! evap oce |
---|
| 638 | #ifdef CPP_VEGET |
---|
| 639 | #else |
---|
| 640 | write(*,*) 'iso_traceurs_init 257: option_traceurs=10 ', & |
---|
| 641 | & 'inutile si on ne couple pas avec ORCHIDEE' |
---|
| 642 | stop |
---|
| 643 | #endif |
---|
| 644 | |
---|
| 645 | ntraceurs_zone_opt=2 |
---|
| 646 | izone_cont=1 |
---|
| 647 | izone_oce=2 |
---|
| 648 | izone_poubelle=2 ! zone où on met les flux non physiques, de |
---|
| 649 | ! réajustement |
---|
| 650 | izone_init=2 ! zone d'initialisation par défaut |
---|
| 651 | option_revap=0 |
---|
| 652 | option_tmin=0 |
---|
| 653 | izone_revap=0 |
---|
| 654 | izone_contfrac=3 |
---|
| 655 | izone_contcanop=4 |
---|
| 656 | izone_irrig=0 |
---|
| 657 | option_cond=0 |
---|
| 658 | |
---|
| 659 | strtrac(izone_oce)='oce' |
---|
| 660 | strtrac(izone_cont)='con' |
---|
| 661 | strtrac(izone_contfrac)='enu' ! evap sol nu |
---|
| 662 | strtrac(izone_contcanop)='eca' ! evap canop |
---|
| 663 | |
---|
| 664 | else if (option_traceurs.eq.13) then |
---|
| 665 | ! on trace les température minimales vécues + la revap |
---|
| 666 | ! comme dans article sur LdG |
---|
| 667 | |
---|
| 668 | zone_temp1=293.0 ! en K |
---|
| 669 | ! parameter (zone_tempf=223.0) ! en K |
---|
| 670 | zone_tempf=243.0 ! en K |
---|
| 671 | zone_tempa=-4.0 ! courbure de la relation entre l'indice et la température: 0 pour linéaire, <0 pour plus de détal en bas |
---|
| 672 | |
---|
| 673 | ! zone 1: >= zone_temp1 |
---|
| 674 | ! zone 2 à 4: intermédiaire, |
---|
| 675 | ! zone 5: <zone_tempf |
---|
| 676 | |
---|
| 677 | ntraceurs_zone_opt=nzone_temp+1 |
---|
| 678 | |
---|
| 679 | izone_cont=1 |
---|
| 680 | izone_oce=1 |
---|
| 681 | izone_poubelle=1 |
---|
| 682 | izone_init=1 ! zone d'initialisation par défaut |
---|
| 683 | option_revap=1 |
---|
| 684 | option_tmin=0 |
---|
| 685 | izone_revap=ntraceurs_zone |
---|
| 686 | izone_irrig=0 |
---|
| 687 | option_cond=0 |
---|
| 688 | do izone=1,nzone_temp |
---|
| 689 | write(strz,'(i2.2)') izone |
---|
| 690 | strtrac(izone)='t'//strz |
---|
| 691 | write(*,*) 'izone,strz,strtrac=',izone,strz,strtrac(izone) |
---|
| 692 | enddo |
---|
| 693 | strtrac(izone_revap)='rev' |
---|
| 694 | |
---|
| 695 | ! initialisation des zones de tempéarture |
---|
| 696 | do izone=1,nzone_temp-1 |
---|
| 697 | zone_temp(izone)=zone_temp1+float(izone-1) & |
---|
| 698 | & *(zone_tempa*float(izone-nzone_temp+1) & |
---|
| 699 | & +(zone_tempf-zone_temp1)/float(nzone_temp-2)) |
---|
| 700 | enddo |
---|
| 701 | write(*,*) 'zone_temp=',zone_temp |
---|
| 702 | |
---|
| 703 | else if (option_traceurs.eq.14) then |
---|
| 704 | ! on trace les pres et lat de dernière saturation définies |
---|
| 705 | ! comme rh>90% |
---|
| 706 | |
---|
| 707 | zone_pres1=600.0*100.0 ! en Pa |
---|
| 708 | zone_presf=300.0*100.0 ! en Pa |
---|
| 709 | zone_presa=0.0 ! courbure de la relation entre l'indice et la température: 0 pour linéaire, <0 pour plus de détal en bas |
---|
| 710 | |
---|
| 711 | lattag_min=10.0 ! en degrès |
---|
| 712 | dlattag=15.0 |
---|
| 713 | |
---|
| 714 | ! zone 1: >= zone_pres1 |
---|
| 715 | ! zone 2 à 4: intermédiaire, |
---|
| 716 | ! zone 5: <zone_presf |
---|
| 717 | |
---|
| 718 | ntraceurs_zone_opt=nzone_pres*nzone_lat+1 |
---|
| 719 | izone_cont=ntraceurs_zone |
---|
| 720 | izone_oce=ntraceurs_zone |
---|
| 721 | izone_poubelle=ntraceurs_zone |
---|
| 722 | izone_init=ntraceurs_zone ! zone d'initialisation par défaut |
---|
| 723 | option_revap=0 |
---|
| 724 | option_tmin=0 |
---|
| 725 | izone_revap=0 |
---|
| 726 | izone_irrig=0 |
---|
| 727 | option_cond=0 |
---|
| 728 | do izone_pres=1,nzone_pres |
---|
| 729 | do izone_lat=1,nzone_lat |
---|
| 730 | write(strz_pres,'(i1.1)') izone_pres |
---|
| 731 | write(strz_lat,'(i1.1)') izone_lat |
---|
| 732 | strz_preslat=strz_pres//strz_lat |
---|
| 733 | izone=izone_lat+(izone_pres-1)*nzone_lat |
---|
| 734 | strtrac(izone)='t'//strz_preslat |
---|
| 735 | write(*,*) 'izone_pres,izone_lat,strtrac=', & |
---|
| 736 | & izone_pres,izone_lat,izone,strtrac(izone) |
---|
| 737 | enddo !do izone_lat=1,nzone_lat |
---|
| 738 | enddo !do izone_pres=1,nzone_pres |
---|
| 739 | strtrac(ntraceurs_zone)='sfc' |
---|
| 740 | |
---|
| 741 | ! initialisation des zones de tempéarture |
---|
| 742 | do izone=1,nzone_pres-1 |
---|
| 743 | zone_pres(izone)=zone_pres1+float(izone-1) & |
---|
| 744 | & *(zone_presa*float(izone-nzone_pres+1) & |
---|
| 745 | & +(zone_presf-zone_pres1)/float(nzone_pres-2)) |
---|
| 746 | enddo !do izone=1,nzone_pres-1 |
---|
| 747 | write(*,*) 'traceurs_init 332: zone_pres=',zone_pres |
---|
| 748 | ! stop |
---|
| 749 | ! |
---|
| 750 | elseif (option_traceurs.eq.15) then |
---|
| 751 | ! on trace l'irrigation dans ORCHIDEE |
---|
| 752 | #ifdef CPP_VEGET |
---|
| 753 | #else |
---|
| 754 | write(*,*) 'iso_traceurs_init 257: option_traceurs=15 ', & |
---|
| 755 | & 'inutile si on ne couple pas avec ORCHIDEE' |
---|
| 756 | stop |
---|
| 757 | #endif |
---|
| 758 | |
---|
| 759 | ntraceurs_zone_opt=1 |
---|
| 760 | izone_cont=1 |
---|
| 761 | izone_oce=1 |
---|
| 762 | izone_poubelle=1 ! zone où on met les flux non physiques, de |
---|
| 763 | ! réajustement |
---|
| 764 | izone_init=1 ! zone d'initialisation par défaut |
---|
| 765 | option_revap=0 |
---|
| 766 | option_tmin=0 |
---|
| 767 | izone_revap=0 |
---|
| 768 | izone_contfrac=0 |
---|
| 769 | izone_contcanop=0 |
---|
| 770 | izone_irrig=2 |
---|
| 771 | option_cond=0 |
---|
| 772 | |
---|
| 773 | strtrac(izone_poubelle)='res' |
---|
| 774 | strtrac(izone_irrig)='irrig' |
---|
| 775 | |
---|
| 776 | ! dans ce cas particulier, il y a des traceurs dans ORCHIDEE |
---|
[4143] | 777 | ntracisoOR=ntiso |
---|
[3927] | 778 | |
---|
| 779 | else if ((option_traceurs.eq.17).or. & |
---|
| 780 | & (option_traceurs.eq.18)) then |
---|
| 781 | ! on trace les température minimales vécues |
---|
| 782 | ! comme dans article sur LdG sauf pas de revap |
---|
| 783 | |
---|
| 784 | zone_temp1=12.0e-3 ! en kg/kg |
---|
| 785 | zone_tempf=0.2e-3 ! en kg/kg |
---|
| 786 | zone_tempa=1.2e-3 ! courbure de la relation entre l'indice et la température: 0 pour linéaire, <0 pour plus de détail en bas |
---|
| 787 | |
---|
| 788 | ! parameter (zone_temp1=14.0e-3) ! en kg/kg |
---|
| 789 | ! parameter (zone_tempf=0.2e-3) ! en kg/kg |
---|
| 790 | ! parameter (zone_tempa=0.5e-3) |
---|
| 791 | |
---|
| 792 | ! parameter (zone_temp1=10.0e-3) ! en kg/kg |
---|
| 793 | ! parameter (zone_tempf=0.5e-3) ! en kg/kg |
---|
| 794 | ! parameter (zone_tempa=0.5e-3) |
---|
| 795 | |
---|
| 796 | ! zone 1: >= zone_temp1 |
---|
| 797 | ! zone 2 à 4: intermédiaire, |
---|
| 798 | ! zone 5: <zone_tempf |
---|
| 799 | |
---|
| 800 | ntraceurs_zone_opt=nzone_temp+3 |
---|
| 801 | |
---|
| 802 | izone_cont=nzone_temp+1 |
---|
| 803 | izone_oce=nzone_temp+1 |
---|
| 804 | izone_poubelle=nzone_temp+1 |
---|
| 805 | izone_init=nzone_temp+1 ! zone d'initialisation par défaut |
---|
| 806 | option_revap=1 |
---|
| 807 | option_tmin=1 |
---|
| 808 | option_cond=1 |
---|
| 809 | |
---|
| 810 | izone_revap=nzone_temp+3 |
---|
| 811 | izone_cond=nzone_temp+2 |
---|
| 812 | do izone=1,nzone_temp |
---|
| 813 | write(strz,'(i2.2)') izone |
---|
| 814 | strtrac(izone)='t'//strz |
---|
| 815 | write(*,*) 'izone,strz,strtrac=',izone,strz,strtrac(izone) |
---|
| 816 | enddo !do izone=1,nzone_temp |
---|
| 817 | strtrac(izone_poubelle)='sfc' |
---|
| 818 | strtrac(izone_cond)='con' |
---|
| 819 | strtrac(izone_revap)='rev' |
---|
| 820 | |
---|
| 821 | ! initialisation des zones de tempéarture |
---|
| 822 | do izone=1,nzone_temp-1 |
---|
| 823 | zone_temp(izone)=zone_temp1+float(izone-1) & |
---|
| 824 | & *(zone_tempa*float(izone-nzone_temp+1) & |
---|
| 825 | & +(zone_tempf-zone_temp1)/float(nzone_temp-2)) |
---|
| 826 | enddo |
---|
| 827 | write(*,*) 'zone_temp1,zone_tempf,zone_tempa=', & |
---|
| 828 | & zone_temp1,zone_tempf,zone_tempa |
---|
| 829 | write(*,*) 'zone_temp=',zone_temp |
---|
| 830 | ! stop |
---|
| 831 | |
---|
| 832 | else if (option_traceurs.eq.19) then |
---|
| 833 | |
---|
| 834 | zone_temp1=12.0e-3 ! en kg/kg |
---|
| 835 | zone_tempf=0.2e-3 ! en kg/kg |
---|
| 836 | zone_tempa=1.2e-3 ! courbure de la relation entre l'indice et la température: 0 pour linéaire, <0 pour plus de détail en bas |
---|
| 837 | |
---|
| 838 | ! parameter (zone_temp1=14.0e-3) ! en kg/kg |
---|
| 839 | ! parameter (zone_tempf=0.2e-3) ! en kg/kg |
---|
| 840 | ! parameter (zone_tempa=0.5e-3) |
---|
| 841 | |
---|
| 842 | ! parameter (zone_temp1=10.0e-3) ! en kg/kg |
---|
| 843 | ! parameter (zone_tempf=0.5e-3) ! en kg/kg |
---|
| 844 | ! parameter (zone_tempa=0.5e-3) |
---|
| 845 | |
---|
| 846 | ! zone 1: >= zone_temp1 |
---|
| 847 | ! zone 2 à 4: intermédiaire, |
---|
| 848 | ! zone 5: <zone_tempf |
---|
| 849 | |
---|
| 850 | ntraceurs_zone_opt=nzone_temp+4 |
---|
| 851 | |
---|
| 852 | izone_cont=nzone_temp+1 |
---|
| 853 | izone_oce=nzone_temp+1 |
---|
| 854 | izone_poubelle=nzone_temp+1 |
---|
| 855 | if (option_seuil_tag_tmin.eq.1) then |
---|
| 856 | izone_init=nzone_temp+1 ! zone d'initialisation par défaut |
---|
| 857 | else |
---|
| 858 | izone_init=nzone_temp |
---|
| 859 | endif |
---|
| 860 | option_revap=1 |
---|
| 861 | izone_revap=nzone_temp+3 |
---|
| 862 | izone_cond=nzone_temp+2 |
---|
| 863 | izone_ddft=nzone_temp+4 |
---|
| 864 | option_tmin=1 |
---|
| 865 | option_cond=1 |
---|
| 866 | do izone=1,nzone_temp |
---|
| 867 | write(strz,'(i2.2)') izone |
---|
| 868 | strtrac(izone)='t'//strz |
---|
| 869 | write(*,*) 'izone,strz,strtrac=',izone,strz,strtrac(izone) |
---|
| 870 | enddo !do izone=1,nzone_temp |
---|
| 871 | strtrac(izone_poubelle)='sfc' |
---|
| 872 | strtrac(izone_cond)='con' |
---|
| 873 | strtrac(izone_revap)='rev' |
---|
| 874 | strtrac(izone_ddft)='dft' |
---|
| 875 | |
---|
| 876 | elseif (option_traceurs.eq.20) then |
---|
| 877 | ! on vapeur tropical/extractropicale/recyclage extractropical |
---|
| 878 | ! pour comprendre controles humidité et isotopes subtropicaux. |
---|
| 879 | |
---|
| 880 | lim_tag20=35.0 |
---|
| 881 | call getin('lim_tag20',lim_tag20) |
---|
| 882 | write(*,*) 'lim_tag20=',lim_tag20 |
---|
| 883 | |
---|
| 884 | ntraceurs_zone_opt=3 |
---|
| 885 | izone_cont=1 |
---|
| 886 | izone_oce=1 |
---|
| 887 | izone_poubelle=2 ! zone où on met les flux non physiques, de |
---|
| 888 | ! réajustement |
---|
| 889 | izone_init=2 ! zone d'initialisation par défaut |
---|
| 890 | option_revap=0 |
---|
| 891 | option_tmin=0 |
---|
| 892 | izone_revap=0 |
---|
| 893 | izone_trop=2 |
---|
| 894 | izone_extra=3 |
---|
| 895 | |
---|
| 896 | strtrac(izone_trop)='tro' ! vapeur tropicale |
---|
| 897 | strtrac(izone_extra)='ext' ! vapeur extractropicale evaporée |
---|
| 898 | ! dans les tropiques |
---|
| 899 | strtrac(izone_cont)='rec' ! recyclage |
---|
| 900 | |
---|
| 901 | elseif (option_traceurs.eq.21) then |
---|
| 902 | ! on trace 2 boites 3D: UT tropicale et extratropiques |
---|
| 903 | ! fonctionnement similaire à option 5 pour taggage des zones |
---|
| 904 | ! AMMA |
---|
| 905 | ! write(*,*) 'iso_traceurs_init 129' |
---|
| 906 | |
---|
| 907 | ntraceurs_zone_opt=3 |
---|
| 908 | izone_cont=1 |
---|
| 909 | izone_oce=1 |
---|
| 910 | izone_poubelle=1 ! zone où on met les flux non physiques, de |
---|
| 911 | ! réajustement |
---|
| 912 | izone_init=1 ! zone d'initialisation par défaut |
---|
| 913 | option_revap=0 |
---|
| 914 | option_tmin=0 |
---|
| 915 | izone_revap=0 |
---|
| 916 | izone_trop=2 |
---|
| 917 | izone_extra=3 |
---|
| 918 | option_cond=0 |
---|
| 919 | |
---|
| 920 | strtrac(izone_poubelle)='res' |
---|
| 921 | strtrac(izone_trop)='tro' |
---|
| 922 | strtrac(izone_extra)='ext' |
---|
| 923 | |
---|
| 924 | elseif (option_traceurs.eq.22) then |
---|
| 925 | ! on trace la vapeur qui a été processée dans zones de |
---|
| 926 | ! convections à 3 niveaux: BT, MT et UT |
---|
| 927 | |
---|
| 928 | lim_precip_tag22=20.0 |
---|
| 929 | call getin('lim_precip_tag22',lim_precip_tag22) |
---|
| 930 | write(*,*) 'lim_precip_tag22=',lim_precip_tag22 |
---|
| 931 | |
---|
| 932 | ntraceurs_zone_opt=3 |
---|
| 933 | izone_cont=1 |
---|
| 934 | izone_oce=1 |
---|
| 935 | izone_poubelle=1 ! zone où on met les flux non physiques, de |
---|
| 936 | ! réajustement |
---|
| 937 | izone_init=1 ! zone d'initialisation par défaut |
---|
| 938 | option_revap=0 |
---|
| 939 | option_tmin=0 |
---|
| 940 | izone_revap=0 |
---|
| 941 | izone_conv_BT=2 |
---|
| 942 | izone_conv_UT=3 |
---|
| 943 | option_cond=0 |
---|
| 944 | |
---|
| 945 | strtrac(izone_poubelle)='res' |
---|
| 946 | strtrac(izone_conv_BT)='cbt' |
---|
| 947 | strtrac(izone_conv_UT)='cut' |
---|
| 948 | |
---|
| 949 | else |
---|
| 950 | write(*,*) 'traceurs_init 36: option pas encore prévue' |
---|
| 951 | stop |
---|
| 952 | endif |
---|
| 953 | |
---|
| 954 | |
---|
| 955 | if (ntraceurs_zone_opt.ne.ntraceurs_zone) then |
---|
| 956 | write(*,*) 'ntraceurs_zone_opt,ntraceurs_zone=', & |
---|
| 957 | & ntraceurs_zone_opt,ntraceurs_zone |
---|
| 958 | call abort_physic ('isotrac_mod','ntraceurs_zone incoherent',1) |
---|
| 959 | endif |
---|
| 960 | |
---|
| 961 | |
---|
| 962 | ! seuil sur le taux de condensation |
---|
| 963 | if (option_tmin.eq.1) then |
---|
| 964 | seuil_tag_tmin=0.01 |
---|
| 965 | call getin('seuil_tag_tmin',seuil_tag_tmin) |
---|
| 966 | write(*,*) 'seuil_tag_tmin=',seuil_tag_tmin |
---|
| 967 | |
---|
| 968 | seuil_tag_tmin_ls=seuil_tag_tmin |
---|
| 969 | call getin('seuil_tag_tmin_ls',seuil_tag_tmin_ls) |
---|
| 970 | write(*,*) 'seuil_tag_tmin_ls=',seuil_tag_tmin_ls |
---|
| 971 | |
---|
| 972 | option_seuil_tag_tmin=1 |
---|
| 973 | call getin('option_seuil_tag_tmin',option_seuil_tag_tmin) |
---|
| 974 | write(*,*) 'option_seuil_tag_tmin=',option_seuil_tag_tmin |
---|
| 975 | endif |
---|
| 976 | |
---|
| 977 | |
---|
| 978 | do ixt=1,niso |
---|
| 979 | index_zone(ixt)=0 |
---|
| 980 | index_iso(ixt)=ixt |
---|
| 981 | enddo |
---|
| 982 | itrac=niso |
---|
| 983 | do izone=1,ntraceurs_zone |
---|
| 984 | do ixt=1,niso |
---|
| 985 | itrac=itrac+1 |
---|
| 986 | index_zone(itrac)=izone |
---|
| 987 | index_iso(itrac)=ixt |
---|
[4143] | 988 | itZonIso_loc(izone,ixt)=itrac |
---|
| 989 | if (itZonIso(izone,ixt).ne.itZonIso_loc(izone,ixt)) then |
---|
[3927] | 990 | write(*,*) 'isotrac 989: izone,ixt,itrac=',izone,ixt,itrac |
---|
| 991 | CALL abort_physic ('isotrac','isotrac 989',1) |
---|
| 992 | endif |
---|
| 993 | enddo |
---|
| 994 | enddo |
---|
| 995 | #ifdef ISOVERIF |
---|
[4143] | 996 | ! call iso_verif_egalite(float(itrac),float(ntiso), & |
---|
[3927] | 997 | ! & 'traceurs_init 50') |
---|
[4143] | 998 | if (itrac.ne.ntiso) then |
---|
[3927] | 999 | write(*,*) 'traceurs_init 50' |
---|
| 1000 | stop |
---|
| 1001 | endif |
---|
| 1002 | |
---|
| 1003 | write(*,*) 'traceurs_init 65: bilan de l''init:' |
---|
[4143] | 1004 | write(*,*) 'index_zone=',index_zone(1:ntiso) |
---|
| 1005 | write(*,*) 'index_iso=',index_iso(1:ntiso) |
---|
| 1006 | write(*,*) 'itZonIso=',itZonIso(1:ntraceurs_zone,1:niso) |
---|
[3927] | 1007 | do izone=1,ntraceurs_zone |
---|
| 1008 | write(*,*) 'strtrac(',izone,')=',strtrac(izone) |
---|
| 1009 | enddo !do izone=1,ntraceurs_zone |
---|
| 1010 | write(*,*) 'ntracisoOR=',ntracisoOR |
---|
| 1011 | #endif |
---|
| 1012 | |
---|
| 1013 | end subroutine iso_traceurs_init |
---|
| 1014 | |
---|
| 1015 | |
---|
| 1016 | END MODULE isotrac_mod |
---|
| 1017 | #endif |
---|
| 1018 | #endif |
---|