Changeset 3657


Ignore:
Timestamp:
Feb 27, 2025, 2:53:07 PM (5 months ago)
Author:
emoisan
Message:

Titan physics (under MESOSCALE precompiling flag):
Change initialization for microphysics model, to be consistent with
initialization for physics.
The parameters are now defined in callphys.def instead of datagcm.
The new callphys.def with all the parameters is in deftank
(callphys.def.allmuparams).
EMo

Location:
trunk/LMDZ.TITAN
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.TITAN/libf/muphytitan/mm_globals.f90

    r3496 r3657  
    724724      ENDIF
    725725      ! Reads species properties configuration file
    726       err = cfg_read_config(cp,TRIM(spcfile)) ; IF (err /= 0) RETURN
     726      !err = cfg_read_config(cp,TRIM(spcfile)) ; IF (err /= 0) RETURN
     727      err = cfg_read_config(cp,TRIM(spcfile))
     728      IF (err /= 0) THEN
     729        write(*,*) err !return error message (EMoi24)
     730        RETURN
     731      ENDIF
    727732      err = cfg_get_value(cp,"used_species",species)
    728733      IF (err /= 0) THEN
     
    836841    ENDIF
    837842
    838     ! compute m3 thresholds from user-defined thresholds.
    839     mm_m3as_min  =  mm_m0as_min*mm_alpha_s(3._mm_wp) * mm_rcs_min**3._mm_wp
    840     mm_m3af_min  =  mm_m0af_min*mm_alpha_f(3._mm_wp) * mm_rcf_min**3._mm_wp
    841     mm_m3cld_min =  mm_m0n_min * (4._mm_wp * mm_pi / 3._mm_wp) * mm_drad_min**3._mm_wp
    842 
    843843    ! clouds control flags
    844844    IF (mm_w_clouds) THEN
     
    875875    END SUBROUTINE printw
    876876  END FUNCTION mm_global_init_0
     877
     878  SUBROUTINE mm_global_init_calc
     879    ! compute m3 thresholds from user-defined thresholds.
     880    ! -- we operate here on global variables
     881    mm_m3as_min  =  mm_m0as_min*mm_alpha_s(3._mm_wp) * mm_rcs_min**3._mm_wp
     882    mm_m3af_min  =  mm_m0af_min*mm_alpha_f(3._mm_wp) * mm_rcf_min**3._mm_wp
     883    mm_m3cld_min =  mm_m0n_min * (4._mm_wp * mm_pi / 3._mm_wp) * mm_drad_min**3._mm_wp
     884  END SUBROUTINE mm_global_init_calc
    877885
    878886  FUNCTION mm_global_init_1(cfg) RESULT(err)
     
    980988    err = mm_check_opt(cfg_get_value(cfg,"haze_coagulation",mm_w_haze_coag),mm_w_haze_coag,zwhc,wlog=mm_log)
    981989    err = mm_check_opt(cfg_get_value(cfg,"clouds_sedimentation",mm_w_cloud_sed),mm_w_cloud_sed,zwcs,wlog=mm_log)
    982     err = mm_check_opt(cfg_get_value(cfg,"clouds_nucl_cond",mm_w_cloud_nucond),mm_w_cloud_nucond,zwcn,wlog=mm_log)
     990    err = mm_check_opt(cfg_get_value(cfg,"clouds_nuc_cond",mm_w_cloud_nucond),mm_w_cloud_nucond,zwcn,wlog=mm_log)
    983991    err = mm_check_opt(cfg_get_value(cfg,"wsed_m0",mm_wsed_m0),mm_wsed_m0,zwstom0,wlog=mm_log)
    984992    err = mm_check_opt(cfg_get_value(cfg,"wsed_m3",mm_wsed_m3),mm_wsed_m3,zwstom3,wlog=mm_log)
  • trunk/LMDZ.TITAN/libf/muphytitan/mmp_gcm.f90

    r3090 r3657  
    4343  USE CFGPARSE
    4444  USE DATASETS
     45  USE CALLKEYS_MOD
    4546  IMPLICIT NONE
    4647
     
    8788      !! Internal microphysic configuration file.
    8889
     90    TYPE(error)                                       :: err
     91    INTEGER                                           :: i
     92    TYPE(cfgparser)                                   :: cparser
     93    CHARACTER(len=st_slen)                            :: opt_file
     94    CHARACTER(len=st_slen), DIMENSION(:), ALLOCATABLE :: species
     95    REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE       :: tmp
     96    LOGICAL                                           :: wdebug
     97
     98! for mesoscale, initialized in inifis_mod (EMoi)
     99#ifndef MESOSCALE
    89100    INTEGER                                           :: coag_choice
    90101    REAL(kind=mm_wp)                                  :: fiad_max,fiad_min,df,rm,rho_aer
    91102    LOGICAL                                           :: w_h_prod,w_h_sed,w_h_coag,w_c_sed,w_c_nucond, &
    92103                                                         no_fiadero,fwsed_m0,fwsed_m3
    93     TYPE(error)                                       :: err
    94     INTEGER                                           :: i
    95     TYPE(cfgparser)                                   :: cparser
    96     CHARACTER(len=st_slen)                            :: spcpath,pssfile,mqfile,opt_file
    97     CHARACTER(len=st_slen), DIMENSION(:), ALLOCATABLE :: species
    98     REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE       :: tmp
     104    CHARACTER(len=st_slen)                            :: spcpath,pssfile,mqfile
    99105    REAL(kind=mm_wp)                                  :: m0as_min,rcs_min,m0af_min,rcf_min,m0n_min
    100     LOGICAL                                           :: wdebug
    101106
    102107    w_h_prod    = .true.
     
    117122    rcf_min     = 1e-9_mm_wp
    118123    m0n_min     = 1e-10_mm_wp
     124#endif
    119125
    120126    WRITE(*,'(a)') "##### MMP_GCM SPEAKING #####"
     
    129135    ENDIF
    130136
     137! for mesoscale, the initialization of these parameters has been transfered to inifis (EMoi)
     138#ifndef MESOSCALE
    131139    ! YAMMS internal parameters:
    132140    err = mm_check_opt(cfg_get_value(cparser,"rm",rm),rm,50e-9_mm_wp,mm_log)
     
    139147    err = mm_check_opt(cfg_get_value(cparser,"haze_coagulation",w_h_coag)         ,w_h_coag   ,.true.     ,mm_log)
    140148    err = mm_check_opt(cfg_get_value(cparser,"clouds_sedimentation",w_c_sed)      ,w_c_sed    ,clouds     ,mm_log)
    141     err = mm_check_opt(cfg_get_value(cparser,"clouds_nucl_cond",w_c_nucond)       ,w_c_nucond ,clouds     ,mm_log)
     149    err = mm_check_opt(cfg_get_value(cparser,"clouds_nuc_cond",w_c_nucond)       ,w_c_nucond ,clouds     ,mm_log)
    142150    err = mm_check_opt(cfg_get_value(cparser,"wsed_m0",fwsed_m0)                  ,fwsed_m0   ,.true.     ,mm_log)
    143151    err = mm_check_opt(cfg_get_value(cparser,"wsed_m3",fwsed_m3)                  ,fwsed_m3   ,.false.    ,mm_log)
     
    159167      IF (err/=0) call abort_program(err)
    160168    ENDIF
     169#endif
     170
     171! for mesoscale, the initialization of these parameters has been transfered to inifis (EMoi)
     172#ifndef MESOSCALE
     173    ! YAMMS initialization.
     174    ! NB: in MESOSCALE this is done in inifis EMoi
     175    err = mm_global_init_0(dt,df,rm,rho_aer,p_prod,tx_prod,rc_prod,rplanet,g0, &
     176                           air_rad,air_mmol,coag_choice,clouds,spcpath,  &
     177                           w_h_prod,w_h_sed,w_h_coag,w_c_nucond,  &
     178                           w_c_sed,fwsed_m0,fwsed_m3, &
     179                           no_fiadero,fiad_min,fiad_max, &
     180                           m0as_min,rcs_min,m0af_min,rcf_min,m0n_min,wdebug)
     181    IF (err /= 0) call abort_program(err)
     182#endif
    161183
    162184    ! Setup alpha function: THEY ARE REQUIRED IN YAMMS global initialization !
     
    170192    IF (err /= 0) call abort_program(error("alpha_s: "//TRIM(err%msg),-1))
    171193
    172     ! YAMMS initialization.
    173     err = mm_global_init_0(dt,df,rm,rho_aer,p_prod,tx_prod,rc_prod,rplanet,g0, &
    174                            air_rad,air_mmol,coag_choice,clouds,spcpath,  &
    175                            w_h_prod,w_h_sed,w_h_coag,w_c_nucond,  &
    176                            w_c_sed,fwsed_m0,fwsed_m3, &
    177                            no_fiadero,fiad_min,fiad_max, &
    178                            m0as_min,rcs_min,m0af_min,rcf_min,m0n_min,wdebug)
    179     IF (err /= 0) call abort_program(err)
    180 
     194    ! perform threshold computations once global variables + settings collected
     195    CALL mm_global_init_calc
     196
     197! for mesoscale, the initialization of these parameters has been transfered to inifis (EMoi)
     198#ifndef MESOSCALE
    181199    ! Extra initialization (needed for YAMMS method interfaces)
    182200    err = mm_check_opt(cfg_get_value(cparser, "transfert_probability", mmp_w_ps2s), mmp_w_ps2s, wlog=mm_log)
     
    184202    err = mm_check_opt(cfg_get_value(cparser, "electric_charging"    , mmp_w_qe  ), mmp_w_qe, wlog=mm_log)
    185203    IF (err/=0) call abort_program(err)
     204#endif
    186205
    187206    ! initialize transfert probabilities look-up tables
    188207    IF (mm_w_haze_coag .AND. mmp_w_ps2s) THEN
     208! for mesoscale, the initialization of these parameters has been transfered to inifis (EMoi)
     209#ifndef MESOSCALE
    189210      err = mm_check_opt(cfg_get_value(cparser, "ps2s_file", pssfile), pssfile)
    190211      IF (err /= 0) call abort_program(err)
     212#endif
    191213
    192214      IF (.NOT.read_dset(pssfile,'p_m0_co',mmp_pco0p)) THEN
     
    203225      ENDIF
    204226    ENDIF
     227
    205228    ! initialize mean electric correction look-up tables
    206229    IF (mm_w_haze_coag .AND. mmp_w_qe) THEN
     230! for mesoscale, the initialization of these parameters has been transfered to inifis (EMoi)
     231#ifndef MESOSCALE
    207232      err = mm_check_opt(cfg_get_value(cparser, "mq_file", mqfile), mqfile)
    208233      IF (err /= 0) call abort_program(err)
     234#endif
    209235
    210236      IF (.NOT.read_dset(mqfile,'qbsf0',mmp_qbsf0)) THEN
     
    245271    ! dump parameters ...
    246272    WRITE(*,'(a)')        "========= MUPHYS PARAMETERS ==========="
    247     WRITE(*,'(a,L2)')     "transfert_probability: ", mmp_w_ps2s
    248     WRITE(*,'(a,L2)')     "electric_charging    : ", mmp_w_qe
     273    !WRITE(*,'(a,L2)')     "transfert_probability: ", mmp_w_ps2s
     274    !WRITE(*,'(a,L2)')     "electric_charging    : ", mmp_w_qe
    249275    call mm_dump_parameters()
    250276    IF (clouds) THEN
  • trunk/LMDZ.TITAN/libf/phytitan/callkeys_mod.F90

    r3318 r3657  
    107107!$OMP THREADPRIVATE(startphy_file)
    108108
     109! for mesoscale, the following variables are defined in callphys.def
     110! before, it was in the microphysics config file in datagcm (EMoi)
     111#ifdef MESOSCALE
     112      real,save :: rm
     113      real,save :: df
     114      real,save :: rho_aer
     115      real,save :: fiad_min
     116      real,save :: fiad_max
     117      real,save :: m0as_min
     118      real,save :: rcs_min
     119      real,save :: m0af_min
     120      real,save :: rcf_min
     121      real,save :: m0n_min
     122!$OMP THREADPRIVATE(rm,df,rho_aer,fiad_min,fiad_max,m0as_min,rcs_min,m0af_min,rcf_min,m0n_min)
     123      logical,save :: w_h_prod
     124      logical,save :: w_h_coag
     125      logical,save :: w_h_sed
     126      logical,save :: no_fiadero
     127      logical,save :: fwsed_m0
     128      logical,save :: fwsed_m3
     129      logical,save :: w_c_sed
     130      logical,save :: w_c_nucond
     131!$OMP THREADPRIVATE(w_h_prod,w_h_coag,w_h_sed,no_fiadero,fwsed_m0,fwsed_m3,w_c_sed,w_c_nucond,mmp_w_ps2s,mmp_w_qe)
     132      integer,save :: coag_choice
     133!$OMP THREADPRIVATE(coag_choice)
     134      character(len=100),save :: spcpath
     135      character(len=100),save :: pssfile
     136      character(len=100),save :: mqfile
     137!$OMP THREADPRIVATE(spcpath,pssfile,mqfile)
     138      logical,save :: wdebug
     139!$OMP THREADPRIVATE(wdebug)
     140#endif
     141
    109142END MODULE callkeys_mod
  • trunk/LMDZ.TITAN/libf/phytitan/inifis_mod.F90

    r3497 r3657  
    2020  use planete_mod, only: nres
    2121  use planetwide_mod, only: planetwide_sumval
     22  use mm_globals, only: mm_global_init_0
     23  use mmp_globals, only: mmp_w_ps2s, mmp_w_qe
    2224  use callkeys_mod
    2325  use mod_phys_lmdz_para, only : is_parallel
     26  use errors, only: error
    2427
    2528!=======================================================================
     
    7376  integer,intent(in) :: day_ini
    7477  INTEGER ig,ierr
     78  TYPE(error) :: err
    7579 
    7680  EXTERNAL iniorbit,orbite
    7781  EXTERNAL SSUM
    7882  REAL SSUM
    79  
     83
    8084  ! Initialize flags lunout, prt_level, debug (in print_control_mod)
    8185  CALL init_print_control
     
    9397
    9498  ! Initialize some "temporal and calendar" related variables
    95 #ifndef MESOSCALE
     99  ! -- MESOSCALE : we do it for the right print (and avoid crash in debug)
     100  ! -- MESOSCALE : and sporadic use in physiq, e.g. daysec used in soil
    96101  CALL init_time(day_ini,pdaysec,nday,ptimestep)
    97 #endif
    98102
    99103  ! read in some parameters from "run.def" for physics,
     
    503507
    504508     write(*,*) "Equivalent radius production (m) ?"
    505      rc_prod=2.0e-8 ! default value
     509     rc_prod=1.0e-8 ! default value
    506510     call getin_p("rc_prod",rc_prod)
    507511     write(*,*)" rhc_prod = ",rc_prod
     
    513517
    514518     write(*,*) "Path to microphys. config file ?"
    515      config_mufi='datagcm/microphysics/config.cfg' ! default value
     519     ! default path is set in datadir
     520     write(*,*) "microphysics config file data base folder:",trim(datadir),"/microphysics"
     521     config_mufi=trim(datadir)//'/microphysics/config.ne15.cfg' ! default value
    516522     call getin_p("config_mufi",config_mufi)
     523     config_mufi = trim(datadir)//'/microphysics/'//config_mufi
    517524     write(*,*)" config_mufi = ",config_mufi
     525
     526! in mesoscale the following variables are defined in callphys.def
     527! before they were defined in the config file, in datagcm (EMoi)
     528#ifdef MESOSCALE
     529     write(*,*) "Monomer radius (m)"
     530     rm=50e-9 ! default value
     531     call getin_p("rm",rm)
     532     write(*,*)" rm = ",rm
     533 
     534     write(*,*) "Fractal dimension"
     535     df=2.0 ! default value
     536     call getin_p("df",df)
     537     write(*,*)" df = ",df
     538 
     539     write(*,*) "Aerosol density (kg.m-3)"
     540     rho_aer=600. ! default value
     541     call getin_p("rho_aer",rho_aer)
     542     write(*,*)" rho_aer = ",rho_aer
     543 
     544     write(*,*) "Enable/disable Haze production process"
     545     w_h_prod=.true. ! default value
     546     call getin_p("haze_production",w_h_prod)
     547     write(*,*)" haze_production = ",w_h_prod
     548 
     549     write(*,*) "Enable/disable Haze coagulation process"
     550     w_h_coag=.true. ! default value
     551     call getin_p("haze_coagulation",w_h_coag)
     552     write(*,*)" haze_coagulation = ",w_h_coag
     553 
     554     write(*,*) "Coagulation interactions"
     555     coag_choice=7 ! default value
     556     call getin_p("haze_coag_interactions",coag_choice)
     557     write(*,*)" haze_coag_interactions = ",coag_choice
     558 
     559     write(*,*) "Enable/disable Haze sedimentation process"
     560     w_h_sed=.true. ! default value
     561     call getin_p("haze_sedimentation",w_h_sed)
     562     write(*,*)" haze_sedimentation = ",w_h_sed
     563 
     564     write(*,*) "Disable Fiadero correction for sedimentation process"
     565     no_fiadero=.true. ! default value
     566     call getin_p("no_fiadero",no_fiadero)
     567     write(*,*)" no_fiadero = ",no_fiadero
     568 
     569     write(*,*) "Fiadero correction minimum ratio threshold"
     570     fiad_min=0.1 ! default value
     571     call getin_p("fiadero_min_ratio",fiad_min)
     572     write(*,*)" fiadero_min_ratio = ",fiad_min
     573 
     574     write(*,*) "Fiadero correction maximum ratio threshold"
     575     fiad_max=10. ! default value
     576     call getin_p("fiadero_max_ratio",fiad_max)
     577     write(*,*)" fiadero_max_ratio = ",fiad_max
     578 
     579     write(*,*) "Force settling velocity to M0"
     580     fwsed_m0=.true. ! default value
     581     call getin_p("wsed_m0",fwsed_m0)
     582     write(*,*)" wsed_m0 = ",fwsed_m0
     583 
     584     write(*,*) "Force settling velocity to M3"
     585     fwsed_m3=.false. ! default value
     586     call getin_p("wsed_m3",fwsed_m3)
     587     write(*,*)" wsed_m3 = ",fwsed_m3
     588 
     589     write(*,*) "Enable/disable clouds sedimentation process"
     590     w_c_sed=.true. ! default value
     591     call getin_p("clouds_sedimentation",w_c_sed)
     592     write(*,*)" clouds_sedimentation = ",w_c_sed
     593 
     594     write(*,*) "Enable/disable clouds nucleation and condensation processes"
     595     w_c_nucond=.true. ! default value
     596     call getin_p("clouds_nuc_cond",w_c_nucond)
     597     write(*,*)" clouds_nuc_cond = ",w_c_nucond
     598 
     599     write(*,*) "Path to condensible species configuration file"
     600     ! default path is set in datadir
     601     write(*,*) "condensible species config file data base folder:",trim(datadir),"/microphysics"
     602     spcpath=trim(datadir)//"/microphysics/mp2m_species.cfg" ! default value
     603     call getin_p("specie_cfg",spcpath)
     604     spcpath = trim(datadir)//'/microphysics/'//spcpath
     605     write(*,*)" specie_cfg = ",spcpath
     606 
     607     write(*,*) "Enable/disable spherical mode transfert probability"
     608     mmp_w_ps2s=.true. ! default value
     609     call getin_p("transfert_probability",mmp_w_ps2s)
     610     write(*,*)" transfert_probability = ",mmp_w_ps2s
     611 
     612     write(*,*) "Path to spherical mode transfert probability look-up tables file"
     613     ! default path is set in datadir
     614     write(*,*) "spherical mode transfert probability look-up tables file data base folder:",trim(datadir),"/microphysics"
     615     pssfile=trim(datadir)//"/microphysics/mmp_ps2s_rm50_ne15.nc" ! default value
     616     call getin_p("ps2s_file",pssfile)
     617     pssfile = trim(datadir)//'/microphysics/'//pssfile
     618     write(*,*)" ps2s_file = ",pssfile
     619 
     620     write(*,*) "Electric charging coagulation correction"
     621     mmp_w_qe=.true. ! default value
     622     call getin_p("electric_charging",mmp_w_qe)
     623     write(*,*)" electric_charging = ",mmp_w_qe
     624 
     625     write(*,*) "Electric charging correction factor file"
     626     ! default path is set in datadir
     627     write(*,*) "Electric charging correction factor file data base folder:",trim(datadir),"/microphysics"
     628     mqfile=trim(datadir)//"/microphysics/mmp_qmean_rm50_ne15.nc" ! default value
     629     call getin_p("mq_file",mqfile)
     630     mqfile = trim(datadir)//'/microphysics/'//mqfile
     631     write(*,*)" mq_file = ",mqfile
     632 
     633     write(*,*) "Aerosol spherical mode total number min. threshold"
     634     m0as_min=1e-10 ! default value
     635     call getin_p("m0as_min",m0as_min)
     636     write(*,*)" m0as_min = ",m0as_min
     637 
     638     write(*,*) "Aerosol spherical mode min. caracteristic radius threshold"
     639     rcs_min=1e-9 ! default value
     640     call getin_p("rcs_min",rcs_min)
     641     write(*,*)" rcs_min = ",rcs_min
     642 
     643     write(*,*) "Aerosol fractal mode total number min. threshold"
     644     m0af_min=1e-10 ! default value
     645     call getin_p("m0af_min",m0af_min)
     646     write(*,*)" m0af_min = ",m0af_min
     647 
     648     write(*,*) "Aerosol fractal mode min. caracteristic radius threshold (updated to monomer radius at runtime if needed)"
     649     rcf_min=1e-9 ! default value
     650     call getin_p("rcf_min",rcf_min)
     651     write(*,*)" rcf_min = ",rcf_min
     652 
     653     write(*,*) "cloud drop total number min. threshold"
     654     m0n_min=1e-10 ! default value
     655     call getin_p("m0n_min",m0n_min)
     656     write(*,*)" m0n_min = ",m0n_min
     657
     658     write(*,*) "microphysics debug flag"
     659     wdebug=.false. ! default value
     660     call getin_p("wdebug",wdebug)
     661     write(*,*)" wdebug = ",wdebug
     662#endif
    518663
    519664! Soil model
     
    669814  ! allocate "comsoil_h" arrays
    670815  call ini_comsoil_h(ngrid)
    671    
     816
     817#ifdef MESOSCALE
     818  ! YAMMS initialization.
     819  err = mm_global_init_0(ptimestep,df,rm,rho_aer,p_prod,tx_prod,rc_prod,rad,g, &
     820                         air_rad,mugaz,coag_choice,callclouds,spcpath,  &
     821                         w_h_prod,w_h_sed,w_h_coag,w_c_nucond,  &
     822                         w_c_sed,fwsed_m0,fwsed_m3, &
     823                         no_fiadero,fiad_min,fiad_max, &
     824                         m0as_min,rcs_min,m0af_min,rcf_min,m0n_min,wdebug)
     825  IF (ierr /= 0) THEN
     826       PRINT *, "PROBLEM WITH YAMMS INITIATILIZATION"
     827  ENDIF
     828#endif
     829
     830
    672831  END SUBROUTINE inifis
    673832
Note: See TracChangeset for help on using the changeset viewer.