source: trunk/LMDZ.VENUS/libf/phyvenus/conf_phys.F90 @ 3884

Last change on this file since 3884 was 3884, checked in by ikovalenko, 4 months ago
File size: 15.2 KB
Line 
1module conf_phys_mod
2
3implicit none
4
5contains
6
7  subroutine conf_phys(ok_journe, ok_mensuel, ok_instan, &
8 &                     if_ebil)
9   use init_print_control_mod, only: init_print_control
10   use print_control_mod, only: lunout
11   use mod_phys_lmdz_para, only: is_master
12   use ioipsl_getin_p_mod, only: getin_p
13   use age_of_air_mod, only: ok_aoa, reinit_aoa, lev_aoa
14   use clesphys_mod
15   use YOMCST_mod
16
17   implicit none
18
19   !include "YOMCST.h"
20   !include "clesphys.h"
21   include "compbl.h"
22
23! ok_journe:  sorties journalieres
24! ok_mensuel: sorties mensuelles
25! ok_instan:  sorties instantanees
26
27
28! Sortie:
29  logical,intent(out)  :: ok_journe, ok_mensuel, ok_instan       
30  integer,intent(out)  :: if_ebil
31
32
33
34!
35! Configuration de la "physique" de LMDZ a l'aide de la fonction
36! GETIN de IOIPSL
37!
38! LF 05/2001
39!
40!--- Ca lit le physiq.def ---
41
42       ! initialize print_control module variables
43       call init_print_control
44
45!******************* parametres anciennement lus dans gcm.def
46
47       ! do we read a startphy.nc file? (default: .true.)
48       startphy_file=.true.
49       CALL getin_p("startphy_file",startphy_file)
50
51!Config  Key  = cycle_diurne
52!Config  Desc = Cycle diurne
53!Config  Def  = y
54!Config  Help = Cette option permet d'eteidre le cycle diurne.
55!Config         Peut etre util pour accelerer le code !
56       cycle_diurne = .TRUE.       
57       call getin_p('cycle_diurne',cycle_diurne)
58
59!Config  Key  = soil_model
60!Config  Desc = Modele de sol
61!Config  Def  = y
62!Config  Help = Choix du modele de sol (Thermique ?)
63!Config         Option qui pourait un string afin de pouvoir
64!Config         plus de choix ! Ou meme une liste d'options !
65       soil_model = .true.
66       call getin_p('soil_model',soil_model)
67
68!Config  Key  = ok_orodr
69!Config  Desc = Oro drag
70!Config  Def  = y
71!Config  Help = GW drag orographie
72!Config         
73       ok_orodr = .false.
74       call getin_p('ok_orodr',ok_orodr)
75
76!Config  Key  =  ok_orolf
77!Config  Desc = Oro lift
78!Config  Def  = n
79!Config  Help = GW lift orographie (pas utilise)
80       ok_orolf = .false.
81       call getin_p('ok_orolf', ok_orolf)
82
83!Config  Key  = ok_gw_nonoro
84!Config  Desc = Gravity waves parameterization
85!Config  Def  = n
86!Config  Help = GW drag non-orographique
87       ok_gw_nonoro = .false.
88       call getin_p('ok_gw_nonoro',ok_gw_nonoro)
89
90!Config  Key  = nbapp_rad
91!Config  Desc = Frequence d'appel au rayonnement
92!Config  Def  = 12
93!Config  Help = Nombre  d'appels des routines de rayonnements
94!Config         par jour.
95       nbapp_rad = 12
96       call getin_p('nbapp_rad',nbapp_rad)
97
98!Config  Key  = nbapp_chem
99!Config  Desc = Frequence d'appel a la chimie
100!Config  Def  = 24000
101!Config  Help = Nombre  d'appels des routines de chimie
102!Config         par jour.
103       nbapp_chem = 24000
104       call getin_p('nbapp_chem',nbapp_chem)
105
106!Config  Key  = iflag_con
107!Config  Desc = Flag de convection
108!Config  Def  = 0
109!Config  Help = Flag  pour la convection les options suivantes existent :
110!Config         0 : ajsec simple (VENUS, TITAN)
111!Config         1 pour LMD,
112!Config         2 pour Tiedtke,
113!Config         3 pour CCM(NCAR) 
114       iflag_con = 0
115       call getin_p('iflag_con',iflag_con)
116
117!******************* fin parametres anciennement lus dans gcm.def
118
119!Config Key  = OK_journe
120!Config Desc = Pour des sorties journalieres
121!Config Def  = .false.
122!Config Help = Pour creer le fichier histday contenant les sorties
123!              journalieres
124!
125  ok_journe = .false.
126  call getin_p('OK_journe', ok_journe)
127!
128!Config Key  = OK_mensuel
129!Config Desc = Pour des sorties mensuelles
130!Config Def  = .false.
131!Config Help = Pour creer le fichier histmth contenant les sorties
132!              mensuelles
133!
134  ok_mensuel = .false.
135  call getin_p('OK_mensuel', ok_mensuel)
136!
137!Config Key  = OK_instan
138!Config Desc = Pour des sorties instantanees
139!Config Def  = .false.
140!Config Help = Pour creer le fichier histins contenant les sorties
141!              instantanees
142!
143  ok_instan = .false.
144  call getin_p('OK_instan', ok_instan)
145!
146!Config  Key  = ecritphy
147!Config  Desc = Frequence d'ecriture dans histmth et histins
148!Config  Def  = 1
149!Config  Help = frequence de l'ecriture du fichier histmth et histins
150!Config         en jours.
151!
152       ecriphy = 1.
153       call getin_p('ecritphy', ecriphy)
154!
155!
156!Config Key  = if_ebil
157!Config Desc = Niveau de sortie pour les diags bilan d'energie
158!Config Def  = 0
159!Config Help =
160!               
161!
162  if_ebil = 0
163  call getin_p('if_ebil', if_ebil)
164!!
165!! Parametres orbitaux
166!!
167!Config Key  = R_ecc
168!Config Desc = Excentricite
169!Config Def  = 0.006787
170!Config Help =
171!               
172! VENUS
173! R_ecc = 0.006787
174  R_ecc   = 0.0
175  call getin_p('R_ecc', R_ecc)
176!!
177!Config Key  = R_peri
178!Config Desc = Equinoxe
179!Config Def  =
180!Config Help =
181!               
182! VENUS
183  R_peri = 0.
184  call getin_p('R_peri', R_peri)
185!!
186!Config Key  = R_incl
187!Config Desc = Inclinaison
188!Config Def  =
189!Config Help =
190!               
191! VENUS
192  R_incl = 0.0
193  call getin_p('R_incl', R_incl)
194!
195!
196!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
197! PARAMETER FOR THE PLANETARY BOUNDARY LAYER AND SOIL
198!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
199!
200!Config Key  = iflag_pbl
201!Config Desc =
202!Config Def  = 1
203!Config Help =
204!
205! 2   = calculs Cd et K simples pour VENUS :
206!       parametres = z0, lmixmin, ksta (en dur: umin2,ric,cepdu2,karman)
207! 1   = calculs Cd et K issus LMDZ Terre
208!       parametres = ksta, ok_kzmin (et plein d'autres en dur...)
209! 6-9 = schema des thermiques Fred
210  iflag_pbl = 1
211  call getin_p('iflag_pbl',iflag_pbl)
212
213!
214!Config Key  = ksta
215!Config Desc =
216!Config Def  = 1.0e-7
217!Config Help =
218!
219  ksta = 1.0e-7
220  call getin_p('ksta',ksta)
221
222!
223!Config Key  = z0
224!Config Desc =
225!Config Def  = 1.0e-2
226!Config Help =
227!
228  z0 = 1.0e-2
229  call getin_p('z0',z0)
230
231!
232!Config Key  = lmixmin
233!Config Desc =
234!Config Def  = 35.
235!Config Help =
236!
237  lmixmin = 35.
238  call getin_p('lmixmin',lmixmin)
239
240!
241!Config Key  = ok_kzmin
242!Config Desc =
243!Config Def  = .false.
244!Config Help =
245!
246  ok_kzmin = .false.
247  call getin_p('ok_kzmin',ok_kzmin)
248
249  ok_clmain = .true.
250  call getin_p('ok_clmain',ok_clmain)
251
252  physideal = .false.
253  call getin_p('physideal',physideal)
254
255!Config Key  = iflag_ajs
256!Config Desc =
257!Config Def  = 0
258!Config Help =
259!
260  iflag_ajs = 0
261  call getin_p('iflag_ajs',iflag_ajs)
262
263!
264!Config Key  = inertie
265!Config Desc =
266!Config Def  = 2000.
267!Config Help =
268!
269  inertie = 2000.
270  call getin_p('inertie',inertie)
271!
272!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
273! PARAMETER FOR THE OUTPUT LEVELS
274!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
275!
276!Config Key  = lev_histins
277!Config Desc =
278!Config Def  = 0
279!Config Help =
280!
281  lev_histins = 0
282  call getin_p('lev_histins',lev_histins)
283
284!
285!Config Key  = lev_histday
286!Config Desc =
287!Config Def  = 1
288!Config Help =
289!
290  lev_histday = 1
291  call getin_p('lev_histday',lev_histday)
292
293!
294!Config Key  = lev_histmth
295!Config Desc =
296!Config Def  = 2
297!Config Help =
298!
299  lev_histmth = 2
300  call getin_p('lev_histmth',lev_histmth)
301
302
303!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
304! PARAMETER FOR THE TRACERS
305!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
306!
307!Config Key  = tr_scheme
308!Config Desc =
309!Config Def  = 0
310!Config Help =
311!
312! 0   = Nothing is done (passive tracers)
313! 1   = pseudo-chemistry with relaxation toward fixed profile
314!       See Marcq&Lebonnois 2013
315! 2   = surface emission
316!       For the moment, inspired from Mars version
317!       However, the variable 'source' could be used in physiq
318!       so the call to phytrac_emiss could be to initialise it.
319! 3   = Full chemistry and/or clouds => phytrac_chimie
320!       Need ok_chem or ok_cloud
321  tr_scheme = 0
322  call getin_p('tr_scheme',tr_scheme)
323
324!Config Key = ok_aoa
325!Config Desc = Flag to run age of air subroutine
326!Config Def = .false.
327  ok_aoa=.false.
328  call getin_p('ok_aoa',ok_aoa)
329
330!Config Key = reinit_aoa
331!Config Desc = Flag to reinitiate age of air array to 0
332!Config Def = .true.
333  reinit_aoa=.true.
334  call getin_p('reinit_aoa',reinit_aoa)
335 
336!Config Key = lev_aoa
337!Config Desc = Model level where tracer associated with age of air is released
338!Config Def = 1 (surface)
339  lev_aoa=1
340  call getin_p('lev_aoa',lev_aoa)
341
342!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
343!   PARAMETRES DE LA CHIMIE/NUAGE dans physiq.def
344!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
345
346!
347!Config Key  = reinit_trac
348!Config Desc = 
349!Config Def  = .FALSE.
350!Config Help =
351!
352  reinit_trac = .FALSE.
353  call getin_p('reinit_trac',reinit_trac)
354 
355!
356!Config Key  = ok_cloud
357!Config Desc = 
358!Config Def  = .FALSE.
359!Config Help =
360!
361  ok_cloud = .false.
362  call getin_p('ok_cloud',ok_cloud)
363
364!
365!Config Key  = cl_scheme
366!Config Desc =
367!Config Def  = 2
368!Config Help =
369!
370! 1   = Simple microphysics (Aurelien Stolzenbach's PhD)
371! 2   = Full microphysics (momentum scheme, Sabrina Guilbon's PhD)
372
373  cl_scheme = 2
374  call getin_p('cl_scheme',cl_scheme)
375
376!
377!Config Key  = ok_chem
378!Config Desc = 
379!Config Def  = .FALSE.
380!Config Help =
381!
382  ok_chem = .false.
383  call getin_p('ok_chem',ok_chem)
384
385  if (((tr_scheme.ne.3).and.(ok_chem.or.ok_cloud)).or. &
386      ((tr_scheme.eq.3).and.(.not.ok_chem.and..not.ok_cloud))) then
387    write(*,*) "Attention, incoherence :"
388    write(*,*) "tr_scheme=",tr_scheme," / ok_chem=",ok_chem, &
389                                     " / ok_cloud=",ok_cloud
390    write(*,*) "Verifier votre physiq.def"
391    stop
392  endif
393
394
395! Check that chemistry and age of air flages are not both active
396  if ((ok_chem) .and. (ok_aoa)) then
397     write(*,*) "Chemistry and age of air cannot be run together"
398     write(*,*) "ok_chem=",ok_chem," / ok_aoa=",ok_aoa
399     stop
400  endif
401
402
403
404!
405!Config Key  = ok_sedim
406!Config Desc = 
407!Config Def  = .FALSE.
408!Config Help =
409!
410  ok_sedim = .false.
411  call getin_p('ok_sedim',ok_sedim)
412
413!
414!Config Key  = nb_mode
415!Config Desc = 
416!Config Def  = 0
417!Config Help =
418!
419  nb_mode = 0
420  call getin_p('nb_mode',nb_mode)
421 
422!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
423! PARAMETER FOR SOLAR RADIATION
424!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
425
426!
427!Config Key  = solarchoice
428!Config Desc =
429!Config Def  = 1
430!Config Help =
431!
432! 1 = RH Tables
433! 2 = Generic module
434  solarchoice = 1
435  call getin_p('solarchoice',solarchoice)
436
437!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
438! PARAMETER FOR NLTE PHYSICS
439!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
440
441!
442!Config Key  = callnlte
443!Config Desc =
444!Config Def  = .false.
445!Config Help =
446!
447  callnlte = .false.
448  call getin_p('callnlte',callnlte)
449
450!
451!Config Key  = callnirco2
452!Config Desc =
453!Config Def  = .false.
454!
455  callnirco2 = .false.
456  call getin_p('callnirco2',callnirco2)
457
458!
459!Config Key  = nircorr
460!Config Desc =
461!Config Def  = 0
462!Config Help =
463!
464  nircorr = 0
465  call getin_p('nircorr',nircorr)
466
467!
468!Config Key  = callthermos
469!Config Desc =
470!Config Def  = .false.
471!Config Help =
472!
473  callthermos = .false.
474  call getin_p('callthermos',callthermos)
475
476!
477!Config Key  = nltemodel
478!Config Desc =
479!Config Def  = 0
480!Config Help =
481!
482  nltemodel = 0
483  call getin_p('nltemodel',nltemodel)
484
485!
486!Config Key  = solvarmod
487!Config Desc =
488!Config Def  = 1
489!Config Help =
490!
491  solvarmod = 1
492  call getin_p('solvarmod',solvarmod)
493
494!
495!Config Key  = fixed_euv_value
496!Config Desc =
497!Config Def  = 140.  ## Average solar cycle condition
498!Config Help =
499!
500  fixed_euv_value =140.
501  call getin_p('fixed_euv_value',fixed_euv_value)
502
503!
504!Config Key  = euveff
505!Config Desc =
506!Config Def  = 0.22
507!Config Help =
508!
509  euveff = 0.22
510  call getin_p('euveff',euveff)
511
512!Config Key  = tuneupperatm
513!Config Desc =
514!Config Def  = .false.
515!Config Help = Activate thermosphere tuning for oxygen compensation
516!
517  tuneupperatm = .false.
518  call getin_p('tuneupperatm',tuneupperatm)
519
520!
521!Config Key  = ok_jonline
522!Config Desc =
523!Config Def  = .false.
524!Config Help =
525!
526  ok_jonline = .false.
527  call getin_p('ok_jonline',ok_jonline)
528
529!
530!Config Key  = ok_ionchem
531!Config Desc =
532!Config Def  = .false.
533!Config Help = Activate the ionosphere chemistry
534!
535  ok_ionchem = .false.
536  call getin_p('ok_ionchem',ok_ionchem)
537
538  if ((ok_jonline.eqv..false.).and.(.true..eqv.ok_ionchem)) then
539    write(*,*) "Error incoherent flags :"
540    write(*,*) "ok_jonline=",ok_jonline," / ok_ionchem=",ok_ionchem
541    write(*,*) "If you include ions, ok_jonline==.true."
542    write(*,*) "If you do not include ions, ok_ionchem==.false."
543    write(*,*) "Check physiq.def"
544    stop
545  endif
546
547!
548!Config Key  = ok_iondiff
549!Config Desc =
550!Config Def  = .false.
551!Config Help = Activate the ambipolar ion diffusion in physic
552!
553  ok_iondiff = .false.
554  call getin_p('ok_iondiff',ok_iondiff)
555
556  if ((ok_ionchem.eqv..false.).and.(.true..eqv.ok_iondiff)) then
557    write(*,*) "Error incoherent flags :"
558    write(*,*) "ok_ionchem=",ok_ionchem," / ok_iondiff=",ok_iondiff
559    write(*,*) "If you include ions diffusion,"
560    write(*,*) "   you need also ok_ionchem==.true."
561    write(*,*) "If you do not include ions diffusion,"
562    write(*,*) "   you need ok_iondiff==.false."
563    write(*,*) "Check physiq.def"
564    stop
565  endif
566
567!
568!
569!Config Key  =
570!Config Desc = 
571!Config Def  =
572!Config Help =
573!
574!   =
575!  call getin('',)
576!
577!
578!
579!
580  if (is_master) then ! only master needs to print this info
581
582  write(lunout,*)' ##############################################'
583  write(lunout,*)' Physics configuration and parameters: '
584  write(lunout,*)' cycle_diurne = ', cycle_diurne
585  write(lunout,*)' soil_model = ', soil_model
586  write(lunout,*)' ok_orodr = ', ok_orodr
587  write(lunout,*)' ok_orolf = ', ok_orolf
588  write(lunout,*)' ok_gw_nonoro = ', ok_gw_nonoro
589  write(lunout,*)' nbapp_rad = ', nbapp_rad
590  write(lunout,*)' nbapp_chem = ', nbapp_chem
591  write(lunout,*)' iflag_con = ', iflag_con
592  write(lunout,*)' Sortie journaliere = ', ok_journe
593  write(lunout,*)' Sortie mensuelle = ', ok_mensuel
594  write(lunout,*)' Sortie instantanee = ', ok_instan
595  write(lunout,*)' frequence sorties = ', ecriphy 
596  write(lunout,*)' Sortie bilan d''energie, if_ebil =', if_ebil
597  write(lunout,*)' Excentricite = ',R_ecc
598  write(lunout,*)' Equinoxe = ',R_peri
599  write(lunout,*)' Inclinaison =',R_incl
600  write(lunout,*)' tr_scheme = ', tr_scheme
601  write(lunout,*)' ok_aoa = ', ok_aoa
602  write(lunout,*)' reinit_aoa = ', reinit_aoa
603  write(lunout,*)' lev_aoa = ', lev_aoa
604  write(lunout,*)' iflag_pbl = ', iflag_pbl
605  write(lunout,*)' z0 = ',z0
606  write(lunout,*)' lmixmin = ',lmixmin
607  write(lunout,*)' ksta = ',ksta
608  write(lunout,*)' ok_kzmin = ',ok_kzmin
609  write(lunout,*)' inertie = ', inertie
610  write(lunout,*)' ok_clmain = ',ok_clmain
611  write(lunout,*)' physideal = ',physideal
612  write(lunout,*)' iflag_ajs = ', iflag_ajs
613  write(lunout,*)' lev_histins = ',lev_histins
614  write(lunout,*)' lev_histday = ',lev_histday
615  write(lunout,*)' lev_histmth = ',lev_histmth
616  write(lunout,*)' reinit_trac = ',reinit_trac
617  write(lunout,*)' ok_cloud = ',ok_cloud
618  write(lunout,*)' cl_scheme = ',cl_scheme
619  write(lunout,*)' ok_chem = ',ok_chem
620  write(lunout,*)' ok_sedim = ',ok_sedim
621  write(lunout,*)' nb_mode = ',nb_mode
622  write(lunout,*)' solarchoice = ',solarchoice
623  write(lunout,*)' callnlte = ',callnlte
624  write(lunout,*)' nltemodel = ',nltemodel
625  write(lunout,*)' callnirco2 = ',callnirco2
626  write(lunout,*)' nircorr = ',nircorr
627  write(lunout,*)' callthermos = ',callthermos
628  write(lunout,*)' solvarmod = ',solvarmod
629  write(lunout,*)' fixed_euv_value = ',fixed_euv_value
630  write(lunout,*)' euveff = ',euveff
631  write(lunout,*)' tuneupperatm = ',tuneupperatm
632  write(lunout,*)' ok_jonline = ',ok_jonline
633  write(lunout,*)' ok_ionchem = ',ok_ionchem
634  write(lunout,*)' ok_iondiff = ',ok_iondiff
635
636  endif ! of if (is_master)
637 
638  end subroutine conf_phys
639
640end module conf_phys_mod
Note: See TracBrowser for help on using the repository browser.