- Timestamp:
- Feb 27, 2025, 2:53:07 PM (5 months ago)
- Location:
- trunk/LMDZ.TITAN
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.TITAN/libf/muphytitan/mm_globals.f90
r3496 r3657 724 724 ENDIF 725 725 ! 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 727 732 err = cfg_get_value(cp,"used_species",species) 728 733 IF (err /= 0) THEN … … 836 841 ENDIF 837 842 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_wp840 mm_m3af_min = mm_m0af_min*mm_alpha_f(3._mm_wp) * mm_rcf_min**3._mm_wp841 mm_m3cld_min = mm_m0n_min * (4._mm_wp * mm_pi / 3._mm_wp) * mm_drad_min**3._mm_wp842 843 843 ! clouds control flags 844 844 IF (mm_w_clouds) THEN … … 875 875 END SUBROUTINE printw 876 876 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 877 885 878 886 FUNCTION mm_global_init_1(cfg) RESULT(err) … … 980 988 err = mm_check_opt(cfg_get_value(cfg,"haze_coagulation",mm_w_haze_coag),mm_w_haze_coag,zwhc,wlog=mm_log) 981 989 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_nuc l_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) 983 991 err = mm_check_opt(cfg_get_value(cfg,"wsed_m0",mm_wsed_m0),mm_wsed_m0,zwstom0,wlog=mm_log) 984 992 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 43 43 USE CFGPARSE 44 44 USE DATASETS 45 USE CALLKEYS_MOD 45 46 IMPLICIT NONE 46 47 … … 87 88 !! Internal microphysic configuration file. 88 89 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 89 100 INTEGER :: coag_choice 90 101 REAL(kind=mm_wp) :: fiad_max,fiad_min,df,rm,rho_aer 91 102 LOGICAL :: w_h_prod,w_h_sed,w_h_coag,w_c_sed,w_c_nucond, & 92 103 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 99 105 REAL(kind=mm_wp) :: m0as_min,rcs_min,m0af_min,rcf_min,m0n_min 100 LOGICAL :: wdebug101 106 102 107 w_h_prod = .true. … … 117 122 rcf_min = 1e-9_mm_wp 118 123 m0n_min = 1e-10_mm_wp 124 #endif 119 125 120 126 WRITE(*,'(a)') "##### MMP_GCM SPEAKING #####" … … 129 135 ENDIF 130 136 137 ! for mesoscale, the initialization of these parameters has been transfered to inifis (EMoi) 138 #ifndef MESOSCALE 131 139 ! YAMMS internal parameters: 132 140 err = mm_check_opt(cfg_get_value(cparser,"rm",rm),rm,50e-9_mm_wp,mm_log) … … 139 147 err = mm_check_opt(cfg_get_value(cparser,"haze_coagulation",w_h_coag) ,w_h_coag ,.true. ,mm_log) 140 148 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_nuc l_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) 142 150 err = mm_check_opt(cfg_get_value(cparser,"wsed_m0",fwsed_m0) ,fwsed_m0 ,.true. ,mm_log) 143 151 err = mm_check_opt(cfg_get_value(cparser,"wsed_m3",fwsed_m3) ,fwsed_m3 ,.false. ,mm_log) … … 159 167 IF (err/=0) call abort_program(err) 160 168 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 161 183 162 184 ! Setup alpha function: THEY ARE REQUIRED IN YAMMS global initialization ! … … 170 192 IF (err /= 0) call abort_program(error("alpha_s: "//TRIM(err%msg),-1)) 171 193 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 181 199 ! Extra initialization (needed for YAMMS method interfaces) 182 200 err = mm_check_opt(cfg_get_value(cparser, "transfert_probability", mmp_w_ps2s), mmp_w_ps2s, wlog=mm_log) … … 184 202 err = mm_check_opt(cfg_get_value(cparser, "electric_charging" , mmp_w_qe ), mmp_w_qe, wlog=mm_log) 185 203 IF (err/=0) call abort_program(err) 204 #endif 186 205 187 206 ! initialize transfert probabilities look-up tables 188 207 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 189 210 err = mm_check_opt(cfg_get_value(cparser, "ps2s_file", pssfile), pssfile) 190 211 IF (err /= 0) call abort_program(err) 212 #endif 191 213 192 214 IF (.NOT.read_dset(pssfile,'p_m0_co',mmp_pco0p)) THEN … … 203 225 ENDIF 204 226 ENDIF 227 205 228 ! initialize mean electric correction look-up tables 206 229 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 207 232 err = mm_check_opt(cfg_get_value(cparser, "mq_file", mqfile), mqfile) 208 233 IF (err /= 0) call abort_program(err) 234 #endif 209 235 210 236 IF (.NOT.read_dset(mqfile,'qbsf0',mmp_qbsf0)) THEN … … 245 271 ! dump parameters ... 246 272 WRITE(*,'(a)') "========= MUPHYS PARAMETERS ===========" 247 WRITE(*,'(a,L2)') "transfert_probability: ", mmp_w_ps2s248 WRITE(*,'(a,L2)') "electric_charging : ", mmp_w_qe273 !WRITE(*,'(a,L2)') "transfert_probability: ", mmp_w_ps2s 274 !WRITE(*,'(a,L2)') "electric_charging : ", mmp_w_qe 249 275 call mm_dump_parameters() 250 276 IF (clouds) THEN -
trunk/LMDZ.TITAN/libf/phytitan/callkeys_mod.F90
r3318 r3657 107 107 !$OMP THREADPRIVATE(startphy_file) 108 108 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 109 142 END MODULE callkeys_mod -
trunk/LMDZ.TITAN/libf/phytitan/inifis_mod.F90
r3497 r3657 20 20 use planete_mod, only: nres 21 21 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 22 24 use callkeys_mod 23 25 use mod_phys_lmdz_para, only : is_parallel 26 use errors, only: error 24 27 25 28 !======================================================================= … … 73 76 integer,intent(in) :: day_ini 74 77 INTEGER ig,ierr 78 TYPE(error) :: err 75 79 76 80 EXTERNAL iniorbit,orbite 77 81 EXTERNAL SSUM 78 82 REAL SSUM 79 83 80 84 ! Initialize flags lunout, prt_level, debug (in print_control_mod) 81 85 CALL init_print_control … … 93 97 94 98 ! 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 96 101 CALL init_time(day_ini,pdaysec,nday,ptimestep) 97 #endif98 102 99 103 ! read in some parameters from "run.def" for physics, … … 503 507 504 508 write(*,*) "Equivalent radius production (m) ?" 505 rc_prod= 2.0e-8 ! default value509 rc_prod=1.0e-8 ! default value 506 510 call getin_p("rc_prod",rc_prod) 507 511 write(*,*)" rhc_prod = ",rc_prod … … 513 517 514 518 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 516 522 call getin_p("config_mufi",config_mufi) 523 config_mufi = trim(datadir)//'/microphysics/'//config_mufi 517 524 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 518 663 519 664 ! Soil model … … 669 814 ! allocate "comsoil_h" arrays 670 815 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 672 831 END SUBROUTINE inifis 673 832
Note: See TracChangeset
for help on using the changeset viewer.