1 | #ifdef ISO |
---|
2 | ! $Id: $ |
---|
3 | |
---|
4 | MODULE isotopes_mod |
---|
5 | USE infotrac_phy, ONLY: ntraciso,niso,indnum_fn_num,ok_isotrac,use_iso, & |
---|
6 | & niso_possibles |
---|
7 | IMPLICIT NONE |
---|
8 | SAVE |
---|
9 | |
---|
10 | ! contient toutes les variables isotopiques et leur initialisation |
---|
11 | ! les routines specifiquement isotopiques sont dans |
---|
12 | ! isotopes_routines_mod pour éviter dépendance circulaire avec |
---|
13 | ! isotopes_verif_mod. |
---|
14 | |
---|
15 | |
---|
16 | ! indices des isotopes |
---|
17 | integer, save :: iso_eau,iso_HDO,iso_O18,iso_O17,iso_HTO ! indices de 1 à niso: les isos n'existant pas sont mis à 0 |
---|
18 | !$OMP THREADPRIVATE(iso_eau,iso_HDO,iso_O18,iso_O17,iso_HTO) |
---|
19 | |
---|
20 | integer :: iso_eau_possible,iso_HDO_possible,iso_O18_possible,iso_O17_possible,iso_HTO_possible ! indices de 1 à niso_possibles: ils correspondent aux tableaux définis dans infotrac: |
---|
21 | ! tnom_iso=(/'eau','HDO','O18','O17','HTO'/) |
---|
22 | ! ce sont ces indices qui doivent être utilisés avec use_iso, puisque use_iso est défini comme DIMENSION(niso_possibles) |
---|
23 | parameter (iso_eau_possible=1) |
---|
24 | parameter (iso_HDO_possible=2) |
---|
25 | parameter (iso_O18_possible=3) |
---|
26 | parameter (iso_O17_possible=4) |
---|
27 | parameter (iso_HTO_possible=5) |
---|
28 | |
---|
29 | integer, save :: ntracisoOR |
---|
30 | !$OMP THREADPRIVATE(ntracisoOR) |
---|
31 | |
---|
32 | ! variables indépendantes des isotopes |
---|
33 | |
---|
34 | real, save :: pxtmelt,pxtice,pxtmin,pxtmax |
---|
35 | !$OMP THREADPRIVATE(pxtmelt,pxtice,pxtmin,pxtmax) |
---|
36 | real, save :: tdifexp, tv0cin, thumxt1 |
---|
37 | !$OMP THREADPRIVATE(tdifexp, tv0cin, thumxt1) |
---|
38 | integer, save :: ntot |
---|
39 | !$OMP THREADPRIVATE(ntot) |
---|
40 | real, save :: h_land_ice |
---|
41 | !$OMP THREADPRIVATE(h_land_ice) |
---|
42 | real, save :: P_veg |
---|
43 | !$OMP THREADPRIVATE(P_veg) |
---|
44 | real, save :: musi,lambda_sursat |
---|
45 | !$OMP THREADPRIVATE(lambda_sursat) |
---|
46 | real, save :: Kd |
---|
47 | !$OMP THREADPRIVATE(Kd) |
---|
48 | real, save :: rh_cste_surf_cond,T_cste_surf_cond |
---|
49 | !$OMP THREADPRIVATE(rh_cste_surf_cond,T_cste_surf_cond) |
---|
50 | |
---|
51 | logical, save :: bidouille_anti_divergence |
---|
52 | ! si true, rappel régulier de xteau vers q, pour éviter dérives lentes |
---|
53 | !$OMP THREADPRIVATE(bidouille_anti_divergence) |
---|
54 | logical, save :: essai_convergence |
---|
55 | ! si false, on fait rigoureusement comme dans LMDZ sans isotopes, |
---|
56 | ! meme si c'est génant pour les isotopes |
---|
57 | !$OMP THREADPRIVATE(essai_convergence) |
---|
58 | integer, save :: initialisation_iso |
---|
59 | ! 0: dans fichier |
---|
60 | ! 1: R=0 |
---|
61 | ! 2: R selon distill rayleigh |
---|
62 | ! 3: R=Rsmow |
---|
63 | !$OMP THREADPRIVATE(initialisation_iso) |
---|
64 | integer, save :: modif_SST ! 0 par defaut, 1 si on veut modifier la sst |
---|
65 | ! 2 et 3: profils de SST |
---|
66 | !$OMP THREADPRIVATE(modif_SST) |
---|
67 | real, save :: deltaTtest ! modif de la SST, uniforme. |
---|
68 | !$OMP THREADPRIVATE(deltaTtest) |
---|
69 | integer, save :: modif_sic ! on met des trous dans glace de mer |
---|
70 | !$OMP THREADPRIVATE(modif_sic) |
---|
71 | real, save :: deltasic ! fraction de trous minimale |
---|
72 | !$OMP THREADPRIVATE(deltasic) |
---|
73 | real, save :: deltaTtestpoles |
---|
74 | !$OMP THREADPRIVATE(deltaTtestpoles) |
---|
75 | real, save :: sstlatcrit |
---|
76 | !$OMP THREADPRIVATE(sstlatcrit) |
---|
77 | real, save :: dsstlatcrit |
---|
78 | !$OMP THREADPRIVATE(dsstlatcrit) |
---|
79 | real, save :: deltaO18_oce |
---|
80 | !$OMP THREADPRIVATE(deltaO18_oce) |
---|
81 | integer, save :: albedo_prescrit ! 0 par defaut |
---|
82 | ! 1 si on veut garder albedo constant |
---|
83 | !$OMP THREADPRIVATE(albedo_prescrit) |
---|
84 | real, save :: lon_min_albedo,lon_max_albedo |
---|
85 | !$OMP THREADPRIVATE(lon_min_albedo,lon_max_albedo) |
---|
86 | real, save :: lat_min_albedo,lat_max_albedo |
---|
87 | !$OMP THREADPRIVATE(lat_min_albedo,lat_max_albedo) |
---|
88 | real, save :: deltaP_BL,tdifexp_sol |
---|
89 | !$OMP THREADPRIVATE(deltaP_BL,tdifexp_sol) |
---|
90 | integer, save :: ruissellement_pluie,alphak_stewart |
---|
91 | !$OMP THREADPRIVATE(ruissellement_pluie,alphak_stewart) |
---|
92 | integer, save :: calendrier_guide |
---|
93 | !$OMP THREADPRIVATE(calendrier_guide) |
---|
94 | integer, save :: cste_surf_cond |
---|
95 | !$OMP THREADPRIVATE(cste_surf_cond) |
---|
96 | real, save :: mixlen |
---|
97 | !$OMP THREADPRIVATE(mixlen) |
---|
98 | integer, save :: evap_cont_cste |
---|
99 | !$OMP THREADPRIVATE(evap_cont_cste) |
---|
100 | real, save :: deltaO18_evap_cont,d_evap_cont |
---|
101 | !$OMP THREADPRIVATE(deltaO18_evap_cont,d_evap_cont) |
---|
102 | integer, save :: nudge_qsol,region_nudge_qsol |
---|
103 | !$OMP THREADPRIVATE(nudge_qsol,region_nudge_qsol) |
---|
104 | integer, save :: nlevmaxO17 |
---|
105 | !$OMP THREADPRIVATE(nlevmaxO17) |
---|
106 | integer, save :: no_pce |
---|
107 | ! real, save :: slope_limiterxy,slope_limiterz |
---|
108 | !$OMP THREADPRIVATE(no_pce) |
---|
109 | real, save :: A_satlim |
---|
110 | !$OMP THREADPRIVATE(A_satlim) |
---|
111 | integer, save :: ok_restrict_A_satlim,modif_ratqs |
---|
112 | !$OMP THREADPRIVATE(ok_restrict_A_satlim,modif_ratqs) |
---|
113 | real, save :: Pcrit_ratqs,ratqsbasnew |
---|
114 | !$OMP THREADPRIVATE(Pcrit_ratqs,ratqsbasnew) |
---|
115 | real, save :: fac_modif_evaoce |
---|
116 | !$OMP THREADPRIVATE(fac_modif_evaoce) |
---|
117 | integer, save :: ok_bidouille_wake |
---|
118 | !$OMP THREADPRIVATE(ok_bidouille_wake) |
---|
119 | logical :: cond_temp_env |
---|
120 | !$OMP THREADPRIVATE(cond_temp_env) |
---|
121 | |
---|
122 | |
---|
123 | ! variables tableaux fn de niso |
---|
124 | real, ALLOCATABLE, DIMENSION(:), save :: tnat, toce, tcorr |
---|
125 | !$OMP THREADPRIVATE(tnat, toce, tcorr) |
---|
126 | real, ALLOCATABLE, DIMENSION(:), save :: tdifrel |
---|
127 | !$OMP THREADPRIVATE(tdifrel) |
---|
128 | real, ALLOCATABLE, DIMENSION(:), save :: talph1, talph2, talph3 |
---|
129 | !$OMP THREADPRIVATE(talph1, talph2, talph3) |
---|
130 | real, ALLOCATABLE, DIMENSION(:), save :: talps1, talps2 |
---|
131 | !$OMP THREADPRIVATE(talps1, talps2) |
---|
132 | real, ALLOCATABLE, DIMENSION(:), save :: tkcin0, tkcin1, tkcin2 |
---|
133 | !$OMP THREADPRIVATE(tkcin0, tkcin1, tkcin2) |
---|
134 | real, ALLOCATABLE, DIMENSION(:), save :: alpha_liq_sol |
---|
135 | !$OMP THREADPRIVATE(alpha_liq_sol) |
---|
136 | real, ALLOCATABLE, DIMENSION(:), save :: Rdefault, Rmethox |
---|
137 | !$OMP THREADPRIVATE(Rdefault, Rmethox) |
---|
138 | character*3, ALLOCATABLE, DIMENSION(:), save :: striso |
---|
139 | !$OMP THREADPRIVATE(striso) |
---|
140 | real, save :: fac_coeff_eq17_liq, fac_coeff_eq17_ice |
---|
141 | !$OMP THREADPRIVATE(fac_coeff_eq17_liq, fac_coeff_eq17_ice) |
---|
142 | |
---|
143 | real ridicule ! valeur maximale pour qu'une variable de type |
---|
144 | ! rapoport de mélange puisse être considérée comme négligeable. Si |
---|
145 | ! négligeable, alors on ne verifie pas si sa compo iso esta bérrante. |
---|
146 | parameter (ridicule=1e-12) |
---|
147 | ! parameter (ridicule=1) |
---|
148 | ! |
---|
149 | real ridicule_rain ! valeur limite de ridicule pour les flux de pluies (rain, zrfl...) |
---|
150 | parameter (ridicule_rain=1e-8) ! en kg/s <-> 1e-3mm/day |
---|
151 | |
---|
152 | real ridicule_evap ! valeur limite de ridicule pour les evap |
---|
153 | parameter (ridicule_evap=ridicule_rain*1e-2) ! en kg/s <-> 1e-3mm/day |
---|
154 | |
---|
155 | real ridicule_qsol ! valeur limite de ridicule pour les qsol |
---|
156 | parameter (ridicule_qsol=ridicule_rain) ! en kg <-> 1e-8kg |
---|
157 | |
---|
158 | real ridicule_snow ! valeur limite de ridicule pour les snow |
---|
159 | parameter (ridicule_snow=ridicule_qsol) ! en kg/s <-> 1e-8kg |
---|
160 | |
---|
161 | real expb_max |
---|
162 | parameter (expb_max=30.0) |
---|
163 | |
---|
164 | ! spécifique au tritium: |
---|
165 | |
---|
166 | |
---|
167 | logical, save :: ok_prod_nucl_tritium ! si oui, production de tritium par essais nucleaires |
---|
168 | !$OMP THREADPRIVATE(ok_prod_nucl_tritium) |
---|
169 | integer nessai |
---|
170 | parameter (nessai=486) |
---|
171 | integer, save :: day_nucl(nessai) |
---|
172 | !$OMP THREADPRIVATE(day_nucl) |
---|
173 | integer, save :: month_nucl(nessai) |
---|
174 | !$OMP THREADPRIVATE(month_nucl) |
---|
175 | integer, save :: year_nucl(nessai) |
---|
176 | !$OMP THREADPRIVATE(year_nucl) |
---|
177 | real, save :: lat_nucl(nessai) |
---|
178 | !$OMP THREADPRIVATE(lat_nucl) |
---|
179 | real, save :: lon_nucl(nessai) |
---|
180 | !$OMP THREADPRIVATE(lon_nucl) |
---|
181 | real, save :: zmin_nucl(nessai) |
---|
182 | !$OMP THREADPRIVATE(zmin_nucl) |
---|
183 | real, save :: zmax_nucl(nessai) |
---|
184 | !$OMP THREADPRIVATE(zmax_nucl) |
---|
185 | real, save :: HTO_nucl(nessai) |
---|
186 | !$OMP THREADPRIVATE(HTO_nucl) |
---|
187 | |
---|
188 | |
---|
189 | CONTAINS |
---|
190 | |
---|
191 | SUBROUTINE iso_init() |
---|
192 | use IOIPSL ! getin |
---|
193 | implicit none |
---|
194 | |
---|
195 | ! -- local variables: |
---|
196 | |
---|
197 | integer ixt |
---|
198 | ! référence O18 |
---|
199 | real fac_enrichoce18 |
---|
200 | real alpha_liq_sol_O18, & |
---|
201 | & talph1_O18,talph2_O18,talph3_O18, & |
---|
202 | & talps1_O18,talps2_O18, & |
---|
203 | & tkcin0_O18,tkcin1_O18,tkcin2_O18, & |
---|
204 | & tdifrel_O18 |
---|
205 | |
---|
206 | ! cas de l'O17 |
---|
207 | real fac_kcin |
---|
208 | real pente_MWL |
---|
209 | integer ierr |
---|
210 | |
---|
211 | logical ok_nocinsat, ok_nocinsfc !sensi test |
---|
212 | parameter (ok_nocinsfc=.FALSE.) ! if T: no kinetic effect in sfc evap |
---|
213 | parameter (ok_nocinsat=.FALSE.) ! if T: no sursaturation effect for ice |
---|
214 | logical Rdefault_smow |
---|
215 | parameter (Rdefault_smow=.FALSE.) ! si T: Rdefault=smow; si F: nul |
---|
216 | ! pour le tritium |
---|
217 | integer iessai |
---|
218 | |
---|
219 | ! allocations mémoire |
---|
220 | |
---|
221 | allocate (tnat(niso)) |
---|
222 | allocate (toce(niso)) |
---|
223 | allocate (tcorr(niso)) |
---|
224 | allocate (tdifrel(niso)) |
---|
225 | allocate (talph1(niso)) |
---|
226 | allocate (talph2(niso)) |
---|
227 | allocate (talph3(niso)) |
---|
228 | allocate (talps1(niso)) |
---|
229 | allocate (talps2(niso)) |
---|
230 | allocate (tkcin0(niso)) |
---|
231 | allocate (tkcin1(niso)) |
---|
232 | allocate (tkcin2(niso)) |
---|
233 | allocate (alpha_liq_sol(niso)) |
---|
234 | allocate (Rdefault(niso)) |
---|
235 | allocate (Rmethox(niso)) |
---|
236 | allocate (striso(niso)) |
---|
237 | |
---|
238 | |
---|
239 | !-------------------------------------------------------------- |
---|
240 | ! General: |
---|
241 | !-------------------------------------------------------------- |
---|
242 | |
---|
243 | ! -- verif du nombre d'isotopes: |
---|
244 | write(*,*) 'iso_init 64: niso=',niso |
---|
245 | |
---|
246 | ! init de ntracisoOR: on écrasera en cas de ok_isotrac si complications avec |
---|
247 | ! ORCHIDEE |
---|
248 | ntracisoOR=ntraciso |
---|
249 | |
---|
250 | ! -- Type of water isotopes: |
---|
251 | |
---|
252 | iso_eau=indnum_fn_num(1) |
---|
253 | iso_HDO=indnum_fn_num(2) |
---|
254 | iso_O18=indnum_fn_num(3) |
---|
255 | iso_O17=indnum_fn_num(4) |
---|
256 | iso_HTO=indnum_fn_num(5) |
---|
257 | write(*,*) 'iso_init 59: iso_eau=',iso_eau |
---|
258 | write(*,*) 'iso_HDO=',iso_HDO |
---|
259 | write(*,*) 'iso_O18=',iso_O18 |
---|
260 | write(*,*) 'iso_O17=',iso_O17 |
---|
261 | write(*,*) 'iso_HTO=',iso_HTO |
---|
262 | write(*,*) 'iso_init 251: use_iso=',use_iso |
---|
263 | |
---|
264 | ! initialisation |
---|
265 | lambda_sursat=0.004 |
---|
266 | thumxt1=0.75*1.2 |
---|
267 | ntot=20 |
---|
268 | h_land_ice=20. ! à comparer aux 3000mm de snow_max |
---|
269 | P_veg=1.0 |
---|
270 | bidouille_anti_divergence=.false. |
---|
271 | essai_convergence=.false. |
---|
272 | initialisation_iso=0 |
---|
273 | modif_sst=0 |
---|
274 | modif_sic=0 |
---|
275 | deltaTtest=0.0 |
---|
276 | deltasic=0.1 |
---|
277 | deltaTtestpoles=0.0 |
---|
278 | sstlatcrit=30.0 |
---|
279 | deltaO18_oce=0.0 |
---|
280 | albedo_prescrit=0 |
---|
281 | lon_min_albedo=-200 |
---|
282 | lon_max_albedo=200 |
---|
283 | lat_min_albedo=-100 |
---|
284 | lat_max_albedo=100 |
---|
285 | deltaP_BL=10.0 |
---|
286 | ruissellement_pluie=0 |
---|
287 | alphak_stewart=1 |
---|
288 | tdifexp_sol=0.67 |
---|
289 | calendrier_guide=0 |
---|
290 | cste_surf_cond=0 |
---|
291 | mixlen=35.0 |
---|
292 | evap_cont_cste=0.0 |
---|
293 | deltaO18_evap_cont=0.0 |
---|
294 | d_evap_cont=0.0 |
---|
295 | nudge_qsol=0 |
---|
296 | region_nudge_qsol=1 |
---|
297 | nlevmaxO17=50 |
---|
298 | no_pce=0 |
---|
299 | A_satlim=1.0 |
---|
300 | ok_restrict_A_satlim=0 |
---|
301 | ! slope_limiterxy=2.0 |
---|
302 | ! slope_limiterz=2.0 |
---|
303 | modif_ratqs=0 |
---|
304 | Pcrit_ratqs=500.0 |
---|
305 | ratqsbasnew=0.05 |
---|
306 | |
---|
307 | fac_modif_evaoce=1.0 |
---|
308 | ok_bidouille_wake=0 |
---|
309 | cond_temp_env=.false. |
---|
310 | ! si oui, la temperature de cond est celle de l'environnement, |
---|
311 | ! pour eviter bugs quand temperature dans ascendances convs est |
---|
312 | ! mal calculee |
---|
313 | ok_prod_nucl_tritium=.false. |
---|
314 | |
---|
315 | ! lecture des paramètres isotopiques: |
---|
316 | call getin('lambda',lambda_sursat) |
---|
317 | call getin('thumxt1',thumxt1) |
---|
318 | call getin('ntot',ntot) |
---|
319 | call getin('h_land_ice',h_land_ice) |
---|
320 | call getin('P_veg',P_veg) |
---|
321 | call getin('bidouille_anti_divergence',bidouille_anti_divergence) |
---|
322 | call getin('essai_convergence',essai_convergence) |
---|
323 | call getin('initialisation_iso',initialisation_iso) |
---|
324 | !if (ok_isotrac) then |
---|
325 | !if (initialisation_iso.eq.0) then |
---|
326 | ! call getin('initialisation_isotrac',initialisation_isotrac) |
---|
327 | !endif !if (initialisation_iso.eq.0) then |
---|
328 | !endif !if (ok_isotrac) then |
---|
329 | call getin('modif_sst',modif_sst) |
---|
330 | if (modif_sst.ge.1) then |
---|
331 | call getin('deltaTtest',deltaTtest) |
---|
332 | if (modif_sst.ge.2) then |
---|
333 | call getin('deltaTtestpoles',deltaTtestpoles) |
---|
334 | call getin('sstlatcrit',sstlatcrit) |
---|
335 | #ifdef ISOVERIF |
---|
336 | !call iso_verif_positif(sstlatcrit,'iso_init 107') |
---|
337 | if (sstlatcrit.lt.0.0) then |
---|
338 | write(*,*) 'iso_init 270: sstlatcrit=',sstlatcrit |
---|
339 | stop |
---|
340 | endif |
---|
341 | #endif |
---|
342 | if (modif_sst.ge.3) then |
---|
343 | call getin('dsstlatcrit',dsstlatcrit) |
---|
344 | #ifdef ISOVERIF |
---|
345 | !call iso_verif_positif(dsstlatcrit,'iso_init 110') |
---|
346 | if (sstlatcrit.lt.0.0) then |
---|
347 | write(*,*) 'iso_init 279: dsstlatcrit=',dsstlatcrit |
---|
348 | stop |
---|
349 | endif |
---|
350 | #endif |
---|
351 | endif !if (modif_sst.ge.3) then |
---|
352 | endif !if (modif_sst.ge.2) then |
---|
353 | endif ! if (modif_sst.ge.1) then |
---|
354 | call getin('modif_sic',modif_sic) |
---|
355 | if (modif_sic.ge.1) then |
---|
356 | call getin('deltasic',deltasic) |
---|
357 | endif !if (modif_sic.ge.1) then |
---|
358 | |
---|
359 | call getin('albedo_prescrit',albedo_prescrit) |
---|
360 | call getin('lon_min_albedo',lon_min_albedo) |
---|
361 | call getin('lon_max_albedo',lon_max_albedo) |
---|
362 | call getin('lat_min_albedo',lat_min_albedo) |
---|
363 | call getin('lat_max_albedo',lat_max_albedo) |
---|
364 | call getin('deltaO18_oce',deltaO18_oce) |
---|
365 | call getin('deltaP_BL',deltaP_BL) |
---|
366 | call getin('ruissellement_pluie',ruissellement_pluie) |
---|
367 | call getin('alphak_stewart',alphak_stewart) |
---|
368 | call getin('tdifexp_sol',tdifexp_sol) |
---|
369 | call getin('calendrier_guide',calendrier_guide) |
---|
370 | call getin('cste_surf_cond',cste_surf_cond) |
---|
371 | call getin('mixlen',mixlen) |
---|
372 | call getin('evap_cont_cste',evap_cont_cste) |
---|
373 | call getin('deltaO18_evap_cont',deltaO18_evap_cont) |
---|
374 | call getin('d_evap_cont',d_evap_cont) |
---|
375 | call getin('nudge_qsol',nudge_qsol) |
---|
376 | call getin('region_nudge_qsol',region_nudge_qsol) |
---|
377 | call getin('no_pce',no_pce) |
---|
378 | call getin('A_satlim',A_satlim) |
---|
379 | call getin('ok_restrict_A_satlim',ok_restrict_A_satlim) |
---|
380 | #ifdef ISOVERIF |
---|
381 | !call iso_verif_positif(1.0-A_satlim,'iso_init 158') |
---|
382 | if (A_satlim.gt.1.0) then |
---|
383 | write(*,*) 'iso_init 315: A_satlim=',A_satlim |
---|
384 | stop |
---|
385 | endif |
---|
386 | #endif |
---|
387 | ! call getin('slope_limiterxy',slope_limiterxy) |
---|
388 | ! call getin('slope_limiterz',slope_limiterz) |
---|
389 | call getin('modif_ratqs',modif_ratqs) |
---|
390 | call getin('Pcrit_ratqs',Pcrit_ratqs) |
---|
391 | call getin('ratqsbasnew',ratqsbasnew) |
---|
392 | call getin('fac_modif_evaoce',fac_modif_evaoce) |
---|
393 | call getin('ok_bidouille_wake',ok_bidouille_wake) |
---|
394 | call getin('cond_temp_env',cond_temp_env) |
---|
395 | if (use_iso(iso_HTO_possible)) then |
---|
396 | ok_prod_nucl_tritium=.true. |
---|
397 | call getin('ok_prod_nucl_tritium',ok_prod_nucl_tritium) |
---|
398 | endif |
---|
399 | |
---|
400 | write(*,*) 'lambda,thumxt1=',lambda_sursat,thumxt1 |
---|
401 | write(*,*) 'bidouille_anti_divergence=',bidouille_anti_divergence |
---|
402 | write(*,*) 'essai_convergence=',essai_convergence |
---|
403 | write(*,*) 'initialisation_iso=',initialisation_iso |
---|
404 | write(*,*) 'modif_sst=',modif_sst |
---|
405 | if (modif_sst.ge.1) then |
---|
406 | write(*,*) 'deltaTtest=',deltaTtest |
---|
407 | if (modif_sst.ge.2) then |
---|
408 | write(*,*) 'deltaTtestpoles,sstlatcrit=', & |
---|
409 | & deltaTtestpoles,sstlatcrit |
---|
410 | if (modif_sst.ge.3) then |
---|
411 | write(*,*) 'dsstlatcrit=',dsstlatcrit |
---|
412 | endif !if (modif_sst.ge.3) then |
---|
413 | endif !if (modif_sst.ge.2) then |
---|
414 | endif !if (modif_sst.ge.1) then |
---|
415 | write(*,*) 'modif_sic=',modif_sic |
---|
416 | if (modif_sic.ge.1) then |
---|
417 | write(*,*) 'deltasic=',deltasic |
---|
418 | endif !if (modif_sic.ge.1) then |
---|
419 | write(*,*) 'deltaO18_oce=',deltaO18_oce |
---|
420 | write(*,*) 'albedo_prescrit=',albedo_prescrit |
---|
421 | if (albedo_prescrit.eq.1) then |
---|
422 | write(*,*) 'lon_min_albedo,lon_max_albedo=', & |
---|
423 | & lon_min_albedo,lon_max_albedo |
---|
424 | write(*,*) 'lat_min_albedo,lat_max_albedo=', & |
---|
425 | & lat_min_albedo,lat_max_albedo |
---|
426 | endif !if (albedo_prescrit.eq.1) then |
---|
427 | write(*,*) 'deltaP_BL,ruissellement_pluie,alphak_stewart=', & |
---|
428 | & deltaP_BL,ruissellement_pluie,alphak_stewart |
---|
429 | write(*,*) 'cste_surf_cond=',cste_surf_cond |
---|
430 | write(*,*) 'mixlen=',mixlen |
---|
431 | write(*,*) 'tdifexp_sol=',tdifexp_sol |
---|
432 | write(*,*) 'calendrier_guide=',calendrier_guide |
---|
433 | write(*,*) 'evap_cont_cste=',evap_cont_cste |
---|
434 | write(*,*) 'deltaO18_evap_cont,d_evap_cont=', & |
---|
435 | & deltaO18_evap_cont,d_evap_cont |
---|
436 | write(*,*) 'nudge_qsol,region_nudge_qsol=', & |
---|
437 | & nudge_qsol,region_nudge_qsol |
---|
438 | write(*,*) 'nlevmaxO17=',nlevmaxO17 |
---|
439 | write(*,*) 'no_pce=',no_pce |
---|
440 | write(*,*) 'A_satlim=',A_satlim |
---|
441 | write(*,*) 'ok_restrict_A_satlim=',ok_restrict_A_satlim |
---|
442 | ! write(*,*) 'slope_limiterxy=',slope_limiterxy |
---|
443 | ! write(*,*) 'slope_limiterz=',slope_limiterz |
---|
444 | write(*,*) 'modif_ratqs=',modif_ratqs |
---|
445 | write(*,*) 'Pcrit_ratqs=',Pcrit_ratqs |
---|
446 | write(*,*) 'ratqsbasnew=',ratqsbasnew |
---|
447 | write(*,*) 'fac_modif_evaoce=',fac_modif_evaoce |
---|
448 | write(*,*) 'ok_bidouille_wake=',ok_bidouille_wake |
---|
449 | write(*,*) 'cond_temp_env=',cond_temp_env |
---|
450 | write(*,*) 'ok_prod_nucl_tritium=',ok_prod_nucl_tritium |
---|
451 | |
---|
452 | |
---|
453 | !-------------------------------------------------------------- |
---|
454 | ! Parameters that do not depend on the nature of water isotopes: |
---|
455 | !-------------------------------------------------------------- |
---|
456 | |
---|
457 | ! -- temperature at which ice condensate starts to form (valeur ECHAM?): |
---|
458 | pxtmelt=273.15 |
---|
459 | ! pxtmelt=273.15-10.0 ! test PHASE |
---|
460 | |
---|
461 | ! -- temperature at which all condensate is ice: |
---|
462 | pxtice=273.15-10.0 |
---|
463 | ! pxtice=273.15-30.0 ! test PHASE |
---|
464 | |
---|
465 | ! -- minimum temperature to calculate fractionation coeff |
---|
466 | pxtmin=273.15-120.0 ! On ne calcule qu'au dessus de -120°C |
---|
467 | pxtmax=273.15+60.0 ! On ne calcule qu'au dessus de +60°C |
---|
468 | ! remarque: les coeffs ont été mesurés seulement jusq'à -40! |
---|
469 | |
---|
470 | ! -- a constant for alpha_eff for equilibrium below cloud base: |
---|
471 | tdifexp=0.58 |
---|
472 | tv0cin=7.0 |
---|
473 | |
---|
474 | ! facteurs lambda et mu dans Si=musi-lambda*T |
---|
475 | musi=1.0 |
---|
476 | if (ok_nocinsat) then |
---|
477 | lambda_sursat = 0.0 ! no sursaturation effect |
---|
478 | endif |
---|
479 | |
---|
480 | |
---|
481 | ! diffusion dans le sol |
---|
482 | Kd=2.5e-9 ! m2/s |
---|
483 | |
---|
484 | ! cas où cste_surf_cond: on met rhs ou/et Ts cste pour voir |
---|
485 | rh_cste_surf_cond=0.6 |
---|
486 | T_cste_surf_cond=288.0 |
---|
487 | |
---|
488 | !-------------------------------------------------------------- |
---|
489 | ! Parameters that depend on the nature of water isotopes: |
---|
490 | !-------------------------------------------------------------- |
---|
491 | ! ** constantes locales |
---|
492 | fac_enrichoce18=0.0005 |
---|
493 | ! on a alors tcor018=1+fac_enrichoce18 |
---|
494 | ! tcorD=1+fac_enrichoce18*8 |
---|
495 | ! tcorO17=1+fac_enrichoce18*0.528 |
---|
496 | alpha_liq_sol_O18=1.00291 ! valeur de Lehmann & Siegenthaler, 1991, |
---|
497 | ! Journal of Glaciology, vol 37, p 23 |
---|
498 | talph1_O18=1137. |
---|
499 | talph2_O18=-0.4156 |
---|
500 | talph3_O18=-2.0667E-3 |
---|
501 | talps1_O18=11.839 |
---|
502 | talps2_O18=-0.028244 |
---|
503 | tkcin0_O18 = 0.006 |
---|
504 | tkcin1_O18 = 0.000285 |
---|
505 | tkcin2_O18 = 0.00082 |
---|
506 | tdifrel_O18= 1./0.9723 |
---|
507 | |
---|
508 | ! rapport des ln(alphaeq) entre O18 et O17 |
---|
509 | fac_coeff_eq17_liq=0.529 ! donné par Amaelle |
---|
510 | ! fac_coeff_eq17_ice=0.528 ! slope MWL |
---|
511 | fac_coeff_eq17_ice=0.529 |
---|
512 | |
---|
513 | |
---|
514 | write(*,*) 'iso_O18,iso_HDO,iso_eau=',iso_O18,iso_HDO,iso_eau |
---|
515 | do 999 ixt = 1, niso |
---|
516 | write(*,*) 'iso_init 80: ixt=',ixt |
---|
517 | |
---|
518 | |
---|
519 | ! -- kinetic factor for surface evaporation: |
---|
520 | ! (cf: kcin = tkcin0 if |V|<tv0cin |
---|
521 | ! kcin = tkcin1*|Vsurf| + tkcin2 if |V|>tv0cin ) |
---|
522 | ! (Rq: formula discontinuous for |V|=tv0cin... ) |
---|
523 | |
---|
524 | ! -- main: |
---|
525 | if (ixt.eq.iso_HTO) then ! Tritium |
---|
526 | tkcin0(ixt) = 0.01056 |
---|
527 | tkcin1(ixt) = 0.0005016 |
---|
528 | tkcin2(ixt) = 0.0014432 |
---|
529 | tnat(ixt)=0. |
---|
530 | !toce(ixt)=2.2222E-8 ! corrigé par Alex Cauquoin |
---|
531 | !toce(ixt)=1.0E-18 ! rapport 3H/1H ocean |
---|
532 | toce(ixt)=4.0E-19 ! rapport T/H = 0.2 TU Dreisigacker and Roether 1978 |
---|
533 | tcorr(ixt)=1. |
---|
534 | tdifrel(ixt)=1./0.968 |
---|
535 | talph1(ixt)=46480. |
---|
536 | talph2(ixt)=-103.87 |
---|
537 | talph3(ixt)=0. |
---|
538 | talps1(ixt)=46480. |
---|
539 | talps2(ixt)=-103.87 |
---|
540 | alpha_liq_sol(ixt)=1. |
---|
541 | Rdefault(ixt)=0.0 |
---|
542 | Rmethox(ixt)=0.0 |
---|
543 | striso(ixt)='HTO' |
---|
544 | endif |
---|
545 | if (ixt.eq.iso_O17) then ! Deuterium |
---|
546 | pente_MWL=0.528 |
---|
547 | ! tdifrel(ixt)=1./0.985452 ! donné par Amaelle |
---|
548 | tdifrel(ixt)=1./0.98555 ! valeur utilisée en 1D et dans modèle de LdG |
---|
549 | ! fac_kcin=0.5145 ! donné par Amaelle |
---|
550 | fac_kcin= (tdifrel(ixt)-1.0)/(tdifrel_O18-1.0) |
---|
551 | tkcin0(ixt) = tkcin0_O18*fac_kcin |
---|
552 | tkcin1(ixt) = tkcin1_O18*fac_kcin |
---|
553 | tkcin2(ixt) = tkcin2_O18*fac_kcin |
---|
554 | tnat(ixt)=0.004/100. ! O17 représente 0.004% de l'oxygène |
---|
555 | toce(ixt)=tnat(ixt)*(1.0+deltaO18_oce/1000.0)**pente_MWL |
---|
556 | tcorr(ixt)=1.0+fac_enrichoce18*pente_MWL ! donné par Amaelle |
---|
557 | talph1(ixt)=talph1_O18 |
---|
558 | talph2(ixt)=talph2_O18 |
---|
559 | talph3(ixt)=talph3_O18 |
---|
560 | talps1(ixt)=talps1_O18 |
---|
561 | talps2(ixt)=talps2_O18 |
---|
562 | alpha_liq_sol(ixt)=(alpha_liq_sol_O18)**fac_coeff_eq17_liq |
---|
563 | if (Rdefault_smow) then |
---|
564 | Rdefault(ixt)=tnat(ixt)*(-3.15/1000.0+1.0) |
---|
565 | else |
---|
566 | Rdefault(ixt)=0.0 |
---|
567 | endif |
---|
568 | Rmethox(ixt)=(230./1000.+1.)*tnat(ixt) !Zahn et al 2006 |
---|
569 | striso(ixt)='O17' |
---|
570 | endif |
---|
571 | |
---|
572 | if (ixt.eq.iso_O18) then ! Oxygene18 |
---|
573 | tkcin0(ixt) = tkcin0_O18 |
---|
574 | tkcin1(ixt) = tkcin1_O18 |
---|
575 | tkcin2(ixt) = tkcin2_O18 |
---|
576 | tnat(ixt)=2005.2E-6 |
---|
577 | toce(ixt)=tnat(ixt)*(1.0+deltaO18_oce/1000.0) |
---|
578 | tcorr(ixt)=1.0+fac_enrichoce18 |
---|
579 | tdifrel(ixt)=tdifrel_O18 |
---|
580 | talph1(ixt)=talph1_O18 |
---|
581 | talph2(ixt)=talph2_O18 |
---|
582 | talph3(ixt)=talph3_O18 |
---|
583 | talps1(ixt)=talps1_O18 |
---|
584 | talps2(ixt)=talps2_O18 |
---|
585 | alpha_liq_sol(ixt)=alpha_liq_sol_O18 |
---|
586 | if (Rdefault_smow) then |
---|
587 | Rdefault(ixt)=tnat(ixt)*(-6.0/1000.0+1.0) |
---|
588 | else |
---|
589 | Rdefault(ixt)=0.0 |
---|
590 | endif |
---|
591 | Rmethox(ixt)=(130./1000.+1.)*tnat(ixt) !Zahn et al 2006 |
---|
592 | ! write(*,*) 'iso_init 163: ZXalpha_liq_sol=',ZXalpha_liq_sol |
---|
593 | striso(ixt)='O18' |
---|
594 | write(*,*) 'isotopes_mod 519: ixt,striso(ixt)=',ixt,striso(ixt) |
---|
595 | endif |
---|
596 | |
---|
597 | if (ixt.eq.iso_HDO) then ! Deuterium |
---|
598 | pente_MWL=8.0 |
---|
599 | ! fac_kcin=0.88 |
---|
600 | tdifrel(ixt)=1./0.9755 |
---|
601 | fac_kcin= (tdifrel(ixt)-1)/(tdifrel_O18-1) |
---|
602 | tkcin0(ixt) = tkcin0_O18*fac_kcin |
---|
603 | tkcin1(ixt) = tkcin1_O18*fac_kcin |
---|
604 | tkcin2(ixt) = tkcin2_O18*fac_kcin |
---|
605 | tnat(ixt)=155.76E-6 |
---|
606 | toce(ixt)=tnat(ixt)*(1.0+pente_MWL*deltaO18_oce/1000.0) |
---|
607 | tcorr(ixt)=1.0+fac_enrichoce18*pente_MWL |
---|
608 | talph1(ixt)=24844. |
---|
609 | talph2(ixt)=-76.248 |
---|
610 | talph3(ixt)=52.612E-3 |
---|
611 | talps1(ixt)=16288. |
---|
612 | talps2(ixt)=-0.0934 |
---|
613 | !ZXalpha_liq_sol=1.0192 ! Weston, Ralph, 1955 |
---|
614 | alpha_liq_sol(ixt)=1.0212 |
---|
615 | ! valeur de Lehmann & Siegenthaler, 1991, Journal of |
---|
616 | ! Glaciology, vol 37, p 23 |
---|
617 | if (Rdefault_smow) then |
---|
618 | Rdefault(ixt)=tnat(ixt)*((-6.0*pente_MWL+10.0)/1000.0+1.0) |
---|
619 | else |
---|
620 | Rdefault(ixt)=0.0 |
---|
621 | endif |
---|
622 | Rmethox(ixt)=tnat(ixt)*(-25.0/1000.+1.) ! Zahn et al 2006 |
---|
623 | striso(ixt)='HDO' |
---|
624 | write(*,*) 'isotopes_mod 548: ixt,striso(ixt)=',ixt,striso(ixt) |
---|
625 | endif |
---|
626 | |
---|
627 | ! write(*,*) 'iso_init 163: ZXalpha_liq_sol=',ZXalpha_liq_sol |
---|
628 | if (ixt.eq.iso_eau) then ! Oxygene16 |
---|
629 | tkcin0(ixt) = 0.0 |
---|
630 | tkcin1(ixt) = 0.0 |
---|
631 | tkcin2(ixt) = 0.0 |
---|
632 | tnat(ixt)=1. |
---|
633 | toce(ixt)=tnat(ixt) |
---|
634 | tcorr(ixt)=1.0 |
---|
635 | tdifrel(ixt)=1. |
---|
636 | talph1(ixt)=0. |
---|
637 | talph2(ixt)=0. |
---|
638 | talph3(ixt)=0. |
---|
639 | talps1(ixt)=0. |
---|
640 | talph3(ixt)=0. |
---|
641 | alpha_liq_sol(ixt)=1. |
---|
642 | if (Rdefault_smow) then |
---|
643 | Rdefault(ixt)=tnat(ixt)*1.0 |
---|
644 | else |
---|
645 | Rdefault(ixt)=1.0 |
---|
646 | endif |
---|
647 | Rmethox(ixt)=1.0 |
---|
648 | striso(ixt)='eau' |
---|
649 | endif |
---|
650 | |
---|
651 | 999 continue |
---|
652 | |
---|
653 | ! test de sensibilité: |
---|
654 | if (ok_nocinsfc) then ! no kinetic effect in sfc evaporation |
---|
655 | do ixt=1,niso |
---|
656 | tkcin0(ixt) = 0.0 |
---|
657 | tkcin1(ixt) = 0.0 |
---|
658 | tkcin2(ixt) = 0.0 |
---|
659 | enddo |
---|
660 | endif |
---|
661 | |
---|
662 | ! fermeture fichier de paramètres |
---|
663 | close(unit=32) |
---|
664 | |
---|
665 | ! nom des isotopes |
---|
666 | |
---|
667 | ! verif |
---|
668 | write(*,*) 'iso_init 285: verif initialisation:' |
---|
669 | |
---|
670 | do ixt=1,niso |
---|
671 | write(*,*) '* striso(',ixt,')=<'//striso(ixt)//'>' |
---|
672 | write(*,*) 'tnat(',ixt,')=',tnat(ixt) |
---|
673 | ! write(*,*) 'alpha_liq_sol(',ixt,')=',alpha_liq_sol(ixt) |
---|
674 | ! write(*,*) 'tkcin0(',ixt,')=',tkcin0(ixt) |
---|
675 | ! write(*,*) 'tdifrel(',ixt,')=',tdifrel(ixt) |
---|
676 | enddo |
---|
677 | write(*,*) 'iso_init 69: lambda=',lambda_sursat |
---|
678 | write(*,*) 'iso_init 69: thumxt1=',thumxt1 |
---|
679 | write(*,*) 'iso_init 69: h_land_ice=',h_land_ice |
---|
680 | write(*,*) 'iso_init 69: P_veg=',P_veg |
---|
681 | |
---|
682 | |
---|
683 | END SUBROUTINE iso_init |
---|
684 | |
---|
685 | ! functions basiques mises ici pour éviter dépendances circulaires |
---|
686 | !*********** |
---|
687 | function double_to_real(a) |
---|
688 | implicit none |
---|
689 | double precision a |
---|
690 | real double_to_real |
---|
691 | |
---|
692 | double_to_real=a |
---|
693 | |
---|
694 | return |
---|
695 | end function double_to_real |
---|
696 | |
---|
697 | !*********** |
---|
698 | function real_to_double(a) |
---|
699 | implicit none |
---|
700 | real a |
---|
701 | double precision real_to_double |
---|
702 | |
---|
703 | real_to_double=a |
---|
704 | |
---|
705 | return |
---|
706 | end function real_to_double |
---|
707 | |
---|
708 | END MODULE isotopes_mod |
---|
709 | #endif |
---|
710 | |
---|
711 | |
---|