diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90 index 4fbb2bc8101373929854b841ccd8dfd4dd7cbd80..36950d9af06e7ce8e70a486fca446da8151997dc 100644 --- a/src/MNH/default_desfmn.f90 +++ b/src/MNH/default_desfmn.f90 @@ -1445,54 +1445,52 @@ ENDIF ! ! Blaze fire model namelist ! -IF (KMI == 1) THEN - LBLAZE = .FALSE. ! Flag for Fire model use, default FALSE - ! - CPROPAG_MODEL = 'SANTONI2011' ! Fire propagation model (default SANTONI2011) - ! - CHEAT_FLUX_MODEL = 'EXS' ! Sensible heat flux injection model (default EXS) - CLATENT_FLUX_MODEL = 'EXP' ! latent heat flux injection model (default EXP) - XFERR = 0.8 ! Energy released in flamming stage (only for EXP) - ! - CFIRE_CPL_MODE = '2WAYCPL' ! Coupling mode (default 2way coupled) - CBMAPFILE = CINIFILE ! File name of BMAP for FIR2ATM mode - LINTERPWIND = .TRUE. ! Horizontal interpolation of wind - LSGBAWEIGHT = .FALSE. ! Flag for use of weighted average method for SubGrid Burning Area computation - ! - NFIRE_WENO_ORDER = 3 ! Weno order (1,3,5) - NFIRE_RK_ORDER = 3 ! Runge Kutta order (1,2,3,4) - ! - NREFINX = 1 ! Refinement ratio X - NREFINY = 1 ! Refinement ratio Y - ! - XCFLMAXFIRE = 0.8 ! Max CFL on fire mesh - XLSDIFFUSION = 0.1 ! Numerical diffusion of LevelSet - XROSDIFFUSION = 0.05 ! Numerical diffusion of ROS - ! - XFLUXZEXT = 3. ! Flux distribution on vertical caracteristic length - XFLUXZMAX = 4. * XFLUXZEXT ! Flux distribution on vertical max injetion height - ! - XFLXCOEFTMP = 1. ! Flux multiplicator. For testing - ! - LWINDFILTER = .FALSE. ! Fire wind filtering flag - CWINDFILTER = 'EWAM' ! Wind filter method (EWAM or WLIM) - XEWAMTAU = 20. ! Time averaging constant for EWAM method (s) - XWLIMUTH = 8. ! Thresehold wind value for WLIM method (m/s) - XWLIMUTMAX = 9. ! Maximum wind value for WLIM method (m/s) (needs to be >= XWLIMUTH ) - ! - NNBSMOKETRACER = 1 ! Nb of smoke tracers - ! - NWINDSLOPECPLMODE = 0 ! Flag for use of wind/slope in ROS (0 = wind + slope, 1 = wind only, 2 = slope only (U0=0)) - ! - ! - ! - !! DO NOT CHANGE BELOW PARAMETERS - XFIREMESHSIZE(:) = 0. ! Fire mesh size (dxf,dyf) - LRESTA_ASE = .FALSE. ! Flag for using ASE in RESTA file - LRESTA_AWC = .FALSE. ! Flag for using AWC in RESTA file - LRESTA_EWAM = .FALSE. ! Flag for using EWAM in RESTA file - LRESTA_WLIM = .FALSE. ! Flag for using WLIM in RESTA file -ENDIF +LBLAZE = .FALSE. ! Flag for Fire model use, default FALSE +! +CPROPAG_MODEL = 'SANTONI2011' ! Fire propagation model (default SANTONI2011) +! +CHEAT_FLUX_MODEL = 'EXS' ! Sensible heat flux injection model (default EXS) +CLATENT_FLUX_MODEL = 'EXP' ! latent heat flux injection model (default EXP) +XFERR = 0.8 ! Energy released in flamming stage (only for EXP) +! +CFIRE_CPL_MODE = '2WAYCPL' ! Coupling mode (default 2way coupled) +CBMAPFILE = CINIFILE ! File name of BMAP for FIR2ATM mode +LINTERPWIND = .TRUE. ! Horizontal interpolation of wind +LSGBAWEIGHT = .FALSE. ! Flag for use of weighted average method for SubGrid Burning Area computation +! +NFIRE_WENO_ORDER = 3 ! Weno order (1,3,5) +NFIRE_RK_ORDER = 3 ! Runge Kutta order (1,2,3,4) +! +NREFINX = 1 ! Refinement ratio X +NREFINY = 1 ! Refinement ratio Y +! +XCFLMAXFIRE = 0.8 ! Max CFL on fire mesh +XLSDIFFUSION = 0.1 ! Numerical diffusion of LevelSet +XROSDIFFUSION = 0.05 ! Numerical diffusion of ROS +! +XFLUXZEXT = 3. ! Flux distribution on vertical caracteristic length +XFLUXZMAX = 4. * XFLUXZEXT ! Flux distribution on vertical max injetion height +! +XFLXCOEFTMP = 1. ! Flux multiplicator. For testing +! +LWINDFILTER = .FALSE. ! Fire wind filtering flag +CWINDFILTER = 'EWAM' ! Wind filter method (EWAM or WLIM) +XEWAMTAU = 20. ! Time averaging constant for EWAM method (s) +XWLIMUTH = 8. ! Thresehold wind value for WLIM method (m/s) +XWLIMUTMAX = 9. ! Maximum wind value for WLIM method (m/s) (needs to be >= XWLIMUTH ) +! +NNBSMOKETRACER = 1 ! Nb of smoke tracers +! +NWINDSLOPECPLMODE = 0 ! Flag for use of wind/slope in ROS (0 = wind + slope, 1 = wind only, 2 = slope only (U0=0)) +! +! +! +!! DO NOT CHANGE BELOW PARAMETERS +XFIREMESHSIZE(:) = 0. ! Fire mesh size (dxf,dyf) +LRESTA_ASE = .FALSE. ! Flag for using ASE in RESTA file +LRESTA_AWC = .FALSE. ! Flag for using AWC in RESTA file +LRESTA_EWAM = .FALSE. ! Flag for using EWAM in RESTA file +LRESTA_WLIM = .FALSE. ! Flag for using WLIM in RESTA file !------------------------------------------------------------------------------- END SUBROUTINE DEFAULT_DESFM_n diff --git a/src/MNH/modd_firen.f90 b/src/MNH/modd_firen.f90 index c1716c6160f5bd05fe77bb44e0582d8ad34cdc9c..8ca8ff9b1ee11f860ef5910f93c0af29acf3d5e1 100644 --- a/src/MNH/modd_firen.f90 +++ b/src/MNH/modd_firen.f90 @@ -27,6 +27,7 @@ !! MODIFICATIONS !! ------------- !! Original 24/10/2019 +! P. Wautelet 15/02/2023: restructure for grid-nesting !--------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -42,149 +43,297 @@ SAVE INTEGER, PARAMETER :: NFIREENTRIES = 22 TYPE TFIRE_t - REAL, DIMENSION(:,:,:), POINTER :: XGRADLSPHIX =>NULL() ! Grad of phi on x direction - REAL, DIMENSION(:,:,:), POINTER :: XGRADLSPHIY =>NULL() ! Grad of phi on y direction - REAL, DIMENSION(:,:,:), POINTER :: XFIREWIND =>NULL() ! Surface wind speed in spread direction - REAL, DIMENSION(:,:) , POINTER :: XLSPHI2D =>NULL() ! Phi on 2d grid for computation - REAL, DIMENSION(:,:) , POINTER :: XGRADLSPHIX2D =>NULL() ! Grad of phi on x direction on 2d grid - REAL, DIMENSION(:,:) , POINTER :: XGRADLSPHIY2D =>NULL() ! Grad of phi on y direction on 2d grid - REAL, DIMENSION(:,:) , POINTER :: XGRADMASKX =>NULL() ! Grad mask x - REAL, DIMENSION(:,:) , POINTER :: XGRADMASKY =>NULL() ! Grad mask y - REAL, DIMENSION(:,:) , POINTER :: XSURFRATIO2D =>NULL() ! Burnt surface ratio - REAL, DIMENSION(:,:) , POINTER :: XLSDIFFUX2D =>NULL() ! LS diffusion x - REAL, DIMENSION(:,:) , POINTER :: XLSDIFFUY2D =>NULL() ! LS diffusion y - REAL, DIMENSION(:,:) , POINTER :: XFIRERW2D =>NULL() ! ROS woth wind and slope 2d - ! -END TYPE TFIRE_t + ! Blaze fire model declarations +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XLSPHI => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XBMAP => NULL() + REAL, DIMENSION(:,:,:), POINTER :: XFMRFA => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMR0 => NULL() + REAL, DIMENSION(:,:,:), POINTER :: XFMR00 => NULL() + REAL, DIMENSION(:,:,:), POINTER :: XFMWF0 => NULL() + REAL, DIMENSION(:,:,:), POINTER :: XFMIGNITION => NULL() + REAL, DIMENSION(:,:,:), POINTER :: XFMFUELTYPE => NULL() + REAL, DIMENSION(:,:,:), POINTER :: XFIRETAU => NULL() + REAL, DIMENSION(:,:,:,:), POINTER :: XFLUXPARAMH => NULL() + REAL, DIMENSION(:,:,:,:), POINTER :: XFLUXPARAMW => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFIRERW => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMASE => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMAWC => NULL() + REAL, DIMENSION(:,:,:), POINTER :: XFMWALKIG => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMFLUXHDH => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMFLUXHDW => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMHWS => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMWINDU => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMWINDV => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMWINDW => NULL() + REAL, DIMENSION(:,:,:), POINTER :: XGRADLSPHIX => NULL() ! Grad of phi on x direction + REAL, DIMENSION(:,:,:), POINTER :: XGRADLSPHIY => NULL() ! Grad of phi on y direction + REAL, DIMENSION(:,:,:), POINTER :: XFIREWIND => NULL() ! Surface wind speed in spread direction +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMGRADOROX => NULL() +!Managed by FIELDLIST_GOTO_MODEL REAL, DIMENSION(:,:,:), POINTER :: XFMGRADOROY => NULL() + !! fire grid Blaze declarations + REAL, DIMENSION(:,:) , POINTER :: XLSPHI2D => NULL() ! Phi on 2d grid for computation + REAL, DIMENSION(:,:) , POINTER :: XGRADLSPHIX2D => NULL() ! Grad of phi on x direction on 2d grid + REAL, DIMENSION(:,:) , POINTER :: XGRADLSPHIY2D => NULL() ! Grad of phi on y direction on 2d grid + REAL, DIMENSION(:,:) , POINTER :: XGRADMASKX => NULL() ! Grad mask x + REAL, DIMENSION(:,:) , POINTER :: XGRADMASKY => NULL() ! Grad mask y + REAL, DIMENSION(:,:) , POINTER :: XSURFRATIO2D => NULL() ! Burnt surface ratio + REAL, DIMENSION(:,:) , POINTER :: XLSDIFFUX2D => NULL() ! LS diffusion x + REAL, DIMENSION(:,:) , POINTER :: XLSDIFFUY2D => NULL() ! LS diffusion y + REAL, DIMENSION(:,:) , POINTER :: XFIRERW2D => NULL() ! ROS woth wind and slope 2d -TYPE(TFIRE_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: TFIRE_MODEL + LOGICAL :: LBLAZE ! Flag for Fire model use, default FALSE -! Blaze fire model declarations -REAL, DIMENSION(:,:,:), POINTER :: XLSPHI =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XBMAP =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMRFA =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMR0 =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMR00 =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMWF0 =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMIGNITION =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMFUELTYPE =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFIRETAU =>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XFLUXPARAMH =>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XFLUXPARAMW =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFIRERW =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMASE =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMAWC =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMWALKIG =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMFLUXHDH =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMFLUXHDW =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMHWS =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMWINDU =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMWINDV =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMWINDW =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XGRADLSPHIX =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XGRADLSPHIY =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFIREWIND =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMGRADOROX =>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFMGRADOROY =>NULL() -!! fire grid Blaze declarations -REAL, DIMENSION(:,:), POINTER :: XLSPHI2D =>NULL() -REAL, DIMENSION(:,:), POINTER :: XGRADLSPHIX2D =>NULL() -REAL, DIMENSION(:,:), POINTER :: XGRADLSPHIY2D =>NULL() -REAL, DIMENSION(:,:), POINTER :: XGRADMASKX =>NULL() -REAL, DIMENSION(:,:), POINTER :: XGRADMASKY =>NULL() -REAL, DIMENSION(:,:), POINTER :: XSURFRATIO2D =>NULL() -REAL, DIMENSION(:,:), POINTER :: XLSDIFFUX2D =>NULL() -REAL, DIMENSION(:,:), POINTER :: XLSDIFFUY2D =>NULL() -REAL, DIMENSION(:,:), POINTER :: XFIRERW2D =>NULL() + CHARACTER(LEN=11) :: CPROPAG_MODEL ! Fire propagation model (default SANTONI2011) + CHARACTER(LEN=3) :: CHEAT_FLUX_MODEL ! Sensible heat flux injection model (default CST) + CHARACTER(LEN=3) :: CLATENT_FLUX_MODEL ! latent heat flux injection model (default CST) + CHARACTER(LEN=7) :: CFIRE_CPL_MODE ! Coupling mode (default 2WAYCPL) -LOGICAL :: LBLAZE ! Flag for Fire model use, default FALSE + CHARACTER(LEN=28) :: CBMAPFILE ! BMap file for FIR2ATM mode (default INIFILE) + LOGICAL :: LINTERPWIND ! Flag for wind interpolation + LOGICAL :: LSGBAWEIGHT ! Flag for use of weighted average method for SubGrid Burning Area computation -CHARACTER(LEN=11) :: CPROPAG_MODEL ! Fire propagation model (default SANTONI2011) -CHARACTER(LEN=3) :: CHEAT_FLUX_MODEL ! Sensible heat flux injection model (default CST) -CHARACTER(LEN=3) :: CLATENT_FLUX_MODEL ! latent heat flux injection model (default CST) + INTEGER :: NFIRE_WENO_ORDER ! Weno order (1,3,5) + INTEGER :: NFIRE_RK_ORDER ! Runge Kutta order (1,2,3,4) -CHARACTER(LEN=7) :: CFIRE_CPL_MODE ! Coupling mode (default 2WAYCPL) + INTEGER :: NREFINX ! Refinement ratio X + INTEGER :: NREFINY ! Refinement ratio Y -CHARACTER(LEN=28) :: CBMAPFILE ! BMap file for FIR2ATM mode (default INIFILE) -LOGICAL :: LINTERPWIND ! Flag for wind interpolation -LOGICAL :: LSGBAWEIGHT ! Flag for use of weighted average method for SubGrid Burning Area computation + REAL :: XCFLMAXFIRE ! Maximum CFL on fire mesh + REAL :: XLSDIFFUSION ! Numerical diffusion of LevelSet + REAL :: XROSDIFFUSION ! Numerical diffusion of ROS -INTEGER :: NFIRE_WENO_ORDER ! Weno order (1,3,5) -INTEGER :: NFIRE_RK_ORDER ! Runge Kutta order (1,2,3,4) + REAL :: XFERR ! Flamming Energy Release ratio (between 0.5 <= FERR < 1) -INTEGER :: NREFINX ! Refinement ratio X -INTEGER :: NREFINY ! Refinement ratio Y + REAL :: XFLUXZEXT ! Flux distribution on vertical caracteristic length + REAL :: XFLUXZMAX ! Flux distribution on vertical max injetion height -REAL :: XCFLMAXFIRE ! Maximum CFL on fire mesh -REAL :: XLSDIFFUSION ! Numerical diffusion of LevelSet -REAL :: XROSDIFFUSION ! Numerical diffusion of ROS + REAL :: XFLXCOEFTMP ! Flux multiplicator. For testing -REAL :: XFERR ! Flamming Energy Release ratio (between 0.5 <= FERR < 1) + LOGICAL :: LWINDFILTER ! Fire wind filtering flag + CHARACTER(LEN=4) :: CWINDFILTER ! Wind filter method (EWAM or WLIM) + REAL :: XEWAMTAU ! Time averaging constant for EWAM method (s) + REAL :: XWLIMUTH ! Thresehold wind value for WLIM method (m/s) + REAL :: XWLIMUTMAX ! Maximum wind value for WLIM method (m/s) (needs to be >= XWLIMUTH ) -REAL :: XFLUXZEXT ! Flux distribution on vertical caracteristic length -REAL :: XFLUXZMAX ! Flux distribution on vertical max injetion height + INTEGER :: NWINDSLOPECPLMODE ! Flag for use of wind/slope in ROS (0=wind + slope, 1=wind only, 2=slope only (U0=0)) -REAL :: XFLXCOEFTMP ! Flux multiplicator. For testing + INTEGER :: NNBSMOKETRACER + ! + ! Parameters not in the namelist + ! + REAL, DIMENSION(2) :: XFIREMESHSIZE ! Fire Mesh size [dxf,dyf] + REAL(KIND=MNHTIME), DIMENSION(2) :: XFIREPERF ! Blaze fire model performance + REAL(KIND=MNHTIME), DIMENSION(2) :: XGRADPERF ! Grad computation performance + REAL(KIND=MNHTIME), DIMENSION(2) :: XROSWINDPERF ! ROS and wind interpolation computation performance + REAL(KIND=MNHTIME), DIMENSION(2) :: XPROPAGPERF ! Propagation computation performance + REAL(KIND=MNHTIME), DIMENSION(2) :: XFLUXPERF ! Heat fluxes computation performance + LOGICAL :: LRESTA_ASE ! Flag for using ASE in RESTA file + LOGICAL :: LRESTA_AWC ! Flag for using AWC in RESTA file + LOGICAL :: LRESTA_EWAM ! Flag for using EWAM in RESTA file + LOGICAL :: LRESTA_WLIM ! Flag for using WLIM in RESTA file +END TYPE TFIRE_t -LOGICAL :: LWINDFILTER ! Fire wind filtering flag -CHARACTER(LEN=4) :: CWINDFILTER ! Wind filter method (EWAM or WLIM) -REAL :: XEWAMTAU ! Time averaging constant for EWAM method (s) -REAL :: XWLIMUTH ! Thresehold wind value for WLIM method (m/s) -REAL :: XWLIMUTMAX ! Maximum wind value for WLIM method (m/s) (needs to be >= XWLIMUTH ) +TYPE(TFIRE_t), DIMENSION(JPMODELMAX), TARGET :: TFIRE_MODEL -INTEGER :: NWINDSLOPECPLMODE ! Flag for use of wind/slope in ROS (0=wind + slope, 1=wind only, 2=slope only (U0=0)) +! Blaze fire model declarations +REAL, DIMENSION(:,:,:), POINTER :: XLSPHI => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XBMAP => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMRFA => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMR0 => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMR00 => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMWF0 => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMIGNITION => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMFUELTYPE => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFIRETAU => NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XFLUXPARAMH => NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XFLUXPARAMW => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFIRERW => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMASE => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMAWC => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMWALKIG => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMFLUXHDH => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMFLUXHDW => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMHWS => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMWINDU => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMWINDV => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMWINDW => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XGRADLSPHIX => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XGRADLSPHIY => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFIREWIND => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMGRADOROX => NULL() +REAL, DIMENSION(:,:,:), POINTER :: XFMGRADOROY => NULL() +!! fire grid Blaze declarations +REAL, DIMENSION(:,:), POINTER :: XLSPHI2D => NULL() +REAL, DIMENSION(:,:), POINTER :: XGRADLSPHIX2D => NULL() +REAL, DIMENSION(:,:), POINTER :: XGRADLSPHIY2D => NULL() +REAL, DIMENSION(:,:), POINTER :: XGRADMASKX => NULL() +REAL, DIMENSION(:,:), POINTER :: XGRADMASKY => NULL() +REAL, DIMENSION(:,:), POINTER :: XSURFRATIO2D => NULL() +REAL, DIMENSION(:,:), POINTER :: XLSDIFFUX2D => NULL() +REAL, DIMENSION(:,:), POINTER :: XLSDIFFUY2D => NULL() +REAL, DIMENSION(:,:), POINTER :: XFIRERW2D => NULL() -INTEGER :: NNBSMOKETRACER -! -! Parameters not in the namelist -! -REAL, DIMENSION(2) :: XFIREMESHSIZE ! Fire Mesh size [dxf,dyf] -REAL(KIND=MNHTIME), DIMENSION(2) :: XFIREPERF ! Blaze fire model performance -REAL(KIND=MNHTIME), DIMENSION(2) :: XGRADPERF ! Grad computation performance -REAL(KIND=MNHTIME), DIMENSION(2) :: XROSWINDPERF ! ROS and wind interpolation computation performance -REAL(KIND=MNHTIME), DIMENSION(2) :: XPROPAGPERF ! Propagation computation performance -REAL(KIND=MNHTIME), DIMENSION(2) :: XFLUXPERF ! Heat fluxes computation performance -LOGICAL :: LRESTA_ASE ! Flag for using ASE in RESTA file -LOGICAL :: LRESTA_AWC ! Flag for using AWC in RESTA file -LOGICAL :: LRESTA_EWAM ! Flag for using EWAM in RESTA file -LOGICAL :: LRESTA_WLIM ! Flag for using WLIM in RESTA file +LOGICAL, POINTER :: LBLAZE => NULL() +CHARACTER(LEN=11), POINTER :: CPROPAG_MODEL => NULL() +CHARACTER(LEN=3), POINTER :: CHEAT_FLUX_MODEL => NULL() +CHARACTER(LEN=3), POINTER :: CLATENT_FLUX_MODEL => NULL() +CHARACTER(LEN=7), POINTER :: CFIRE_CPL_MODE => NULL() +CHARACTER(LEN=28), POINTER :: CBMAPFILE => NULL() +LOGICAL, POINTER :: LINTERPWIND => NULL() +LOGICAL, POINTER :: LSGBAWEIGHT => NULL() +INTEGER, POINTER :: NFIRE_WENO_ORDER => NULL() +INTEGER, POINTER :: NFIRE_RK_ORDER => NULL() +INTEGER, POINTER :: NREFINX => NULL() +INTEGER, POINTER :: NREFINY => NULL() +REAL, POINTER :: XCFLMAXFIRE => NULL() +REAL, POINTER :: XLSDIFFUSION => NULL() +REAL, POINTER :: XROSDIFFUSION => NULL() +REAL, POINTER :: XFERR => NULL() +REAL, POINTER :: XFLUXZEXT => NULL() +REAL, POINTER :: XFLUXZMAX => NULL() +REAL, POINTER :: XFLXCOEFTMP => NULL() +LOGICAL, POINTER :: LWINDFILTER => NULL() +CHARACTER(LEN=4), POINTER :: CWINDFILTER => NULL() +REAL, POINTER :: XEWAMTAU => NULL() +REAL, POINTER :: XWLIMUTH => NULL() +REAL, POINTER :: XWLIMUTMAX => NULL() +INTEGER, POINTER :: NWINDSLOPECPLMODE => NULL() +INTEGER, POINTER :: NNBSMOKETRACER => NULL() +REAL, DIMENSION(:), POINTER :: XFIREMESHSIZE => NULL() +REAL(KIND=MNHTIME), DIMENSION(:), POINTER :: XFIREPERF => NULL() +REAL(KIND=MNHTIME), DIMENSION(:), POINTER :: XGRADPERF => NULL() +REAL(KIND=MNHTIME), DIMENSION(:), POINTER :: XROSWINDPERF => NULL() +REAL(KIND=MNHTIME), DIMENSION(:), POINTER :: XPROPAGPERF => NULL() +REAL(KIND=MNHTIME), DIMENSION(:), POINTER :: XFLUXPERF => NULL() +LOGICAL, POINTER :: LRESTA_ASE => NULL() +LOGICAL, POINTER :: LRESTA_AWC => NULL() +LOGICAL, POINTER :: LRESTA_EWAM => NULL() +LOGICAL, POINTER :: LRESTA_WLIM => NULL() CONTAINS -SUBROUTINE FIRE_GOTO_MODEL(KFROM, KTO) +SUBROUTINE FIRE_GOTO_MODEL( KFROM, KTO ) INTEGER, INTENT(IN) :: KFROM, KTO ! Save current state for allocated arrays - TFIRE_MODEL(KFROM)%XGRADLSPHIY => XGRADLSPHIX - TFIRE_MODEL(KFROM)%XGRADLSPHIY => XGRADLSPHIY - TFIRE_MODEL(KFROM)%XFIREWIND => XFIREWIND - !! 2d Blaze - TFIRE_MODEL(KFROM)%XLSPHI2D => XLSPHI2D - TFIRE_MODEL(KFROM)%XGRADLSPHIX2D => XGRADLSPHIX2D - TFIRE_MODEL(KFROM)%XGRADLSPHIY2D => XGRADLSPHIY2D - TFIRE_MODEL(KFROM)%XGRADMASKX => XGRADMASKX - TFIRE_MODEL(KFROM)%XGRADMASKY => XGRADMASKY - TFIRE_MODEL(KFROM)%XSURFRATIO2D => XSURFRATIO2D - TFIRE_MODEL(KFROM)%XLSDIFFUX2D => XLSDIFFUX2D - TFIRE_MODEL(KFROM)%XLSDIFFUY2D => XLSDIFFUY2D - TFIRE_MODEL(KFROM)%XFIRERW2D => XFIRERW2D - ! + + ! Blaze fire model declarations +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XLSPHI => XLSPHI +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XBMAP => XBMAP + TFIRE_MODEL(KFROM)%XFMRFA => XFMRFA +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMR0 => XFMR0 + TFIRE_MODEL(KFROM)%XFMR00 => XFMR00 + TFIRE_MODEL(KFROM)%XFMWF0 => XFMWF0 + TFIRE_MODEL(KFROM)%XFMIGNITION => XFMIGNITION + TFIRE_MODEL(KFROM)%XFMFUELTYPE => XFMFUELTYPE + TFIRE_MODEL(KFROM)%XFIRETAU => XFIRETAU + TFIRE_MODEL(KFROM)%XFLUXPARAMH => XFLUXPARAMH + TFIRE_MODEL(KFROM)%XFLUXPARAMW => XFLUXPARAMW +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFIRERW => XFIRERW +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMASE => XFMASE +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMAWC => XFMAWC + TFIRE_MODEL(KFROM)%XFMWALKIG => XFMWALKIG +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMFLUXHDH => XFMFLUXHDH +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMFLUXHDW => XFMFLUXHDW +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMHWS => XFMHWS +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMWINDU => XFMWINDU +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMWINDV => XFMWINDV +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMWINDW => XFMWINDW + TFIRE_MODEL(KFROM)%XGRADLSPHIX => XGRADLSPHIX + TFIRE_MODEL(KFROM)%XGRADLSPHIY => XGRADLSPHIY + TFIRE_MODEL(KFROM)%XFIREWIND => XFIREWIND +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMGRADOROX => XFMGRADOROX +!Managed by FIELDLIST_GOTO_MODEL TFIRE_MODEL(KFROM)%XFMGRADOROY => XFMGRADOROY + !! fire grid Blaze declarations + TFIRE_MODEL(KFROM)%XLSPHI2D => XLSPHI2D + TFIRE_MODEL(KFROM)%XGRADLSPHIX2D => XGRADLSPHIX2D + TFIRE_MODEL(KFROM)%XGRADLSPHIY2D => XGRADLSPHIY2D + TFIRE_MODEL(KFROM)%XGRADMASKX => XGRADMASKX + TFIRE_MODEL(KFROM)%XGRADMASKY => XGRADMASKY + TFIRE_MODEL(KFROM)%XSURFRATIO2D => XSURFRATIO2D + TFIRE_MODEL(KFROM)%XLSDIFFUX2D => XLSDIFFUX2D + TFIRE_MODEL(KFROM)%XLSDIFFUY2D => XLSDIFFUY2D + TFIRE_MODEL(KFROM)%XFIRERW2D => XFIRERW2D + ! Current model is set to model KTO - XGRADLSPHIX => TFIRE_MODEL(KTO)%XGRADLSPHIX - XGRADLSPHIY => TFIRE_MODEL(KTO)%XGRADLSPHIY - XFIREWIND => TFIRE_MODEL(KTO)%XFIREWIND - !! 2d Blaze - XLSPHI2D => TFIRE_MODEL(KTO)%XLSPHI2D - XGRADLSPHIX2D => TFIRE_MODEL(KTO)%XGRADLSPHIX2D - XGRADLSPHIY2D => TFIRE_MODEL(KTO)%XGRADLSPHIY2D - XGRADMASKX => TFIRE_MODEL(KTO)%XGRADMASKX - XGRADMASKY => TFIRE_MODEL(KTO)%XGRADMASKY - XSURFRATIO2D => TFIRE_MODEL(KTO)%XSURFRATIO2D - XLSDIFFUX2D => TFIRE_MODEL(KTO)%XLSDIFFUX2D - XLSDIFFUY2D => TFIRE_MODEL(KTO)%XLSDIFFUY2D - XFIRERW2D => TFIRE_MODEL(KTO)%XFIRERW2D + + ! Blaze fire model declarations +!Managed by FIELDLIST_GOTO_MODEL XLSPHI => TFIRE_MODEL(KTO)%XLSPHI +!Managed by FIELDLIST_GOTO_MODEL XBMAP => TFIRE_MODEL(KTO)%XBMAP + XFMRFA => TFIRE_MODEL(KTO)%XFMRFA +!Managed by FIELDLIST_GOTO_MODEL XFMR0 => TFIRE_MODEL(KTO)%XFMR0 + XFMR00 => TFIRE_MODEL(KTO)%XFMR00 + XFMWF0 => TFIRE_MODEL(KTO)%XFMWF0 + XFMIGNITION => TFIRE_MODEL(KTO)%XFMIGNITION + XFMFUELTYPE => TFIRE_MODEL(KTO)%XFMFUELTYPE + XFIRETAU => TFIRE_MODEL(KTO)%XFIRETAU + XFLUXPARAMH => TFIRE_MODEL(KTO)%XFLUXPARAMH + XFLUXPARAMW => TFIRE_MODEL(KTO)%XFLUXPARAMW +!Managed by FIELDLIST_GOTO_MODEL XFIRERW => TFIRE_MODEL(KTO)%XFIRERW +!Managed by FIELDLIST_GOTO_MODEL XFMASE => TFIRE_MODEL(KTO)%XFMASE +!Managed by FIELDLIST_GOTO_MODEL XFMAWC => TFIRE_MODEL(KTO)%XFMAWC + XFMWALKIG => TFIRE_MODEL(KTO)%XFMWALKIG +!Managed by FIELDLIST_GOTO_MODEL XFMFLUXHDH => TFIRE_MODEL(KTO)%XFMFLUXHDH +!Managed by FIELDLIST_GOTO_MODEL XFMFLUXHDW => TFIRE_MODEL(KTO)%XFMFLUXHDW +!Managed by FIELDLIST_GOTO_MODEL XFMHWS => TFIRE_MODEL(KTO)%XFMHWS +!Managed by FIELDLIST_GOTO_MODEL XFMWINDU => TFIRE_MODEL(KTO)%XFMWINDU +!Managed by FIELDLIST_GOTO_MODEL XFMWINDV => TFIRE_MODEL(KTO)%XFMWINDV +!Managed by FIELDLIST_GOTO_MODEL XFMWINDW => TFIRE_MODEL(KTO)%XFMWINDW + XGRADLSPHIX => TFIRE_MODEL(KTO)%XGRADLSPHIX + XGRADLSPHIY => TFIRE_MODEL(KTO)%XGRADLSPHIY + XFIREWIND => TFIRE_MODEL(KTO)%XFIREWIND +!Managed by FIELDLIST_GOTO_MODEL XFMGRADOROX => TFIRE_MODEL(KTO)%XFMGRADOROX +!Managed by FIELDLIST_GOTO_MODEL XFMGRADOROY => TFIRE_MODEL(KTO)%XFMGRADOROY + !! fire grid Blaze declarations + XLSPHI2D => TFIRE_MODEL(KTO)%XLSPHI2D + XGRADLSPHIX2D => TFIRE_MODEL(KTO)%XGRADLSPHIX2D + XGRADLSPHIY2D => TFIRE_MODEL(KTO)%XGRADLSPHIY2D + XGRADMASKX => TFIRE_MODEL(KTO)%XGRADMASKX + XGRADMASKY => TFIRE_MODEL(KTO)%XGRADMASKY + XSURFRATIO2D => TFIRE_MODEL(KTO)%XSURFRATIO2D + XLSDIFFUX2D => TFIRE_MODEL(KTO)%XLSDIFFUX2D + XLSDIFFUY2D => TFIRE_MODEL(KTO)%XLSDIFFUY2D + XFIRERW2D => TFIRE_MODEL(KTO)%XFIRERW2D + + LBLAZE => TFIRE_MODEL(KTO)%LBLAZE + CPROPAG_MODEL => TFIRE_MODEL(KTO)%CPROPAG_MODEL + CHEAT_FLUX_MODEL => TFIRE_MODEL(KTO)%CHEAT_FLUX_MODEL + CLATENT_FLUX_MODEL => TFIRE_MODEL(KTO)%CLATENT_FLUX_MODEL + CFIRE_CPL_MODE => TFIRE_MODEL(KTO)%CFIRE_CPL_MODE + CBMAPFILE => TFIRE_MODEL(KTO)%CBMAPFILE + LINTERPWIND => TFIRE_MODEL(KTO)%LINTERPWIND + LSGBAWEIGHT => TFIRE_MODEL(KTO)%LSGBAWEIGHT + NFIRE_WENO_ORDER => TFIRE_MODEL(KTO)%NFIRE_WENO_ORDER + NFIRE_RK_ORDER => TFIRE_MODEL(KTO)%NFIRE_RK_ORDER + NREFINX => TFIRE_MODEL(KTO)%NREFINX + NREFINY => TFIRE_MODEL(KTO)%NREFINY + XCFLMAXFIRE => TFIRE_MODEL(KTO)%XCFLMAXFIRE + XLSDIFFUSION => TFIRE_MODEL(KTO)%XLSDIFFUSION + XROSDIFFUSION => TFIRE_MODEL(KTO)%XROSDIFFUSION + XFERR => TFIRE_MODEL(KTO)%XFERR + XFLUXZEXT => TFIRE_MODEL(KTO)%XFLUXZEXT + XFLUXZMAX => TFIRE_MODEL(KTO)%XFLUXZMAX + XFLXCOEFTMP => TFIRE_MODEL(KTO)%XFLXCOEFTMP + LWINDFILTER => TFIRE_MODEL(KTO)%LWINDFILTER + CWINDFILTER => TFIRE_MODEL(KTO)%CWINDFILTER + XEWAMTAU => TFIRE_MODEL(KTO)%XEWAMTAU + XWLIMUTH => TFIRE_MODEL(KTO)%XWLIMUTH + XWLIMUTMAX => TFIRE_MODEL(KTO)%XWLIMUTMAX + NWINDSLOPECPLMODE => TFIRE_MODEL(KTO)%NWINDSLOPECPLMODE + NNBSMOKETRACER => TFIRE_MODEL(KTO)%NNBSMOKETRACER + XFIREMESHSIZE => TFIRE_MODEL(KTO)%XFIREMESHSIZE + XFIREPERF => TFIRE_MODEL(KTO)%XFIREPERF + XGRADPERF => TFIRE_MODEL(KTO)%XGRADPERF + XROSWINDPERF => TFIRE_MODEL(KTO)%XROSWINDPERF + XPROPAGPERF => TFIRE_MODEL(KTO)%XPROPAGPERF + XFLUXPERF => TFIRE_MODEL(KTO)%XFLUXPERF + LRESTA_ASE => TFIRE_MODEL(KTO)%LRESTA_ASE + LRESTA_AWC => TFIRE_MODEL(KTO)%LRESTA_AWC + LRESTA_EWAM => TFIRE_MODEL(KTO)%LRESTA_EWAM + LRESTA_WLIM => TFIRE_MODEL(KTO)%LRESTA_WLIM + END SUBROUTINE FIRE_GOTO_MODEL END MODULE MODD_FIRE_n diff --git a/src/MNH/modn_firen.f90 b/src/MNH/modn_firen.f90 index 8af1b59932611159d07f61e069cea660fb03be48..6b7ffe0a073782bd56192f175fbb78b05730603b 100644 --- a/src/MNH/modn_firen.f90 +++ b/src/MNH/modn_firen.f90 @@ -31,24 +31,134 @@ !! MODIFICATIONS !! ------------- !! Original 23/07/2018 +! P. Wautelet 15/02/2023: restructure for grid-nesting !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_FIRE_n -! +USE MODD_FIRE_n, ONLY: & + LBLAZE_n => LBLAZE, & + CPROPAG_MODEL_n => CPROPAG_MODEL, & + CHEAT_FLUX_MODEL_n => CHEAT_FLUX_MODEL, & + CLATENT_FLUX_MODEL_n => CLATENT_FLUX_MODEL, & + CFIRE_CPL_MODE_n => CFIRE_CPL_MODE, & + CBMAPFILE_n => CBMAPFILE, & + LINTERPWIND_n => LINTERPWIND, & + LSGBAWEIGHT_n => LSGBAWEIGHT, & + NFIRE_WENO_ORDER_n => NFIRE_WENO_ORDER, & + NFIRE_RK_ORDER_n => NFIRE_RK_ORDER, & + NREFINX_n => NREFINX, & + NREFINY_n => NREFINY, & + XCFLMAXFIRE_n => XCFLMAXFIRE, & + XLSDIFFUSION_n => XLSDIFFUSION, & + XROSDIFFUSION_n => XROSDIFFUSION, & + XFERR_n => XFERR, & + XFLUXZEXT_n => XFLUXZEXT, & + XFLUXZMAX_n => XFLUXZMAX, & + XFLXCOEFTMP_n => XFLXCOEFTMP, & + LWINDFILTER_n => LWINDFILTER, & + CWINDFILTER_n => CWINDFILTER, & + XEWAMTAU_n => XEWAMTAU, & + XWLIMUTH_n => XWLIMUTH, & + XWLIMUTMAX_n => XWLIMUTMAX, & + NWINDSLOPECPLMODE_n => NWINDSLOPECPLMODE, & + NNBSMOKETRACER_n => NNBSMOKETRACER + IMPLICIT NONE -! -!PW: gerer le grid nesting (cft modn_stationn?) +LOGICAL :: LBLAZE ! Flag for Fire model use, default FALSE +CHARACTER(LEN=11) :: CPROPAG_MODEL ! Fire propagation model (default SANTONI2011) +CHARACTER(LEN=3) :: CHEAT_FLUX_MODEL ! Sensible heat flux injection model (default CST) +CHARACTER(LEN=3) :: CLATENT_FLUX_MODEL ! latent heat flux injection model (default CST) +CHARACTER(LEN=7) :: CFIRE_CPL_MODE ! Coupling mode (default 2WAYCPL) +CHARACTER(LEN=28) :: CBMAPFILE ! BMap file for FIR2ATM mode (default INIFILE) +LOGICAL :: LINTERPWIND ! Flag for wind interpolation +LOGICAL :: LSGBAWEIGHT ! Flag for use of weighted average method for SubGrid Burning Area computation +INTEGER :: NFIRE_WENO_ORDER ! Weno order (1,3,5) +INTEGER :: NFIRE_RK_ORDER ! Runge Kutta order (1,2,3,4) +INTEGER :: NREFINX ! Refinement ratio X +INTEGER :: NREFINY ! Refinement ratio Y +REAL :: XCFLMAXFIRE ! Maximum CFL on fire mesh +REAL :: XLSDIFFUSION ! Numerical diffusion of LevelSet +REAL :: XROSDIFFUSION ! Numerical diffusion of ROS +REAL :: XFERR ! Flamming Energy Release ratio (between 0.5 <= FERR < 1) +REAL :: XFLUXZEXT ! Flux distribution on vertical caracteristic length +REAL :: XFLUXZMAX ! Flux distribution on vertical max injetion height +REAL :: XFLXCOEFTMP ! Flux multiplicator. For testing +LOGICAL :: LWINDFILTER ! Fire wind filtering flag +CHARACTER(LEN=4) :: CWINDFILTER ! Wind filter method (EWAM or WLIM) +REAL :: XEWAMTAU ! Time averaging constant for EWAM method (s) +REAL :: XWLIMUTH ! Thresehold wind value for WLIM method (m/s) +REAL :: XWLIMUTMAX ! Maximum wind value for WLIM method (m/s) (needs to be >= XWLIMUTH ) +INTEGER :: NWINDSLOPECPLMODE ! Flag for use of wind/slope in ROS (0=wind + slope, 1=wind only, 2=slope only (U0=0)) +INTEGER :: NNBSMOKETRACER + +NAMELIST /NAM_FIREn/ & + LBLAZE, & + CPROPAG_MODEL, CHEAT_FLUX_MODEL, CLATENT_FLUX_MODEL, CFIRE_CPL_MODE, CBMAPFILE, & + LINTERPWIND, LSGBAWEIGHT, NFIRE_WENO_ORDER, NFIRE_RK_ORDER, NREFINX, NREFINY, XCFLMAXFIRE, & + XLSDIFFUSION, XROSDIFFUSION, XFERR, XFLUXZEXT, XFLUXZMAX, XFLXCOEFTMP, LWINDFILTER, & + CWINDFILTER, XEWAMTAU, XWLIMUTH, XWLIMUTMAX, NWINDSLOPECPLMODE, NNBSMOKETRACER + +CONTAINS + +SUBROUTINE INIT_NAM_FIREn + LBLAZE = LBLAZE_n + CPROPAG_MODEL = CPROPAG_MODEL_n + CHEAT_FLUX_MODEL = CHEAT_FLUX_MODEL_n + CLATENT_FLUX_MODEL = CLATENT_FLUX_MODEL_n + CFIRE_CPL_MODE = CFIRE_CPL_MODE_n + CBMAPFILE = CBMAPFILE_n + LINTERPWIND = LINTERPWIND_n + LSGBAWEIGHT = LSGBAWEIGHT_n + NFIRE_WENO_ORDER = NFIRE_WENO_ORDER_n + NFIRE_RK_ORDER = NFIRE_RK_ORDER_n + NREFINX = NREFINX_n + NREFINY = NREFINY_n + XCFLMAXFIRE = XCFLMAXFIRE_n + XLSDIFFUSION = XLSDIFFUSION_n + XROSDIFFUSION = XROSDIFFUSION_n + XFERR = XFERR_n + XFLUXZEXT = XFLUXZEXT_n + XFLUXZMAX = XFLUXZMAX_n + XFLXCOEFTMP = XFLXCOEFTMP_n + LWINDFILTER = LWINDFILTER_n + CWINDFILTER = CWINDFILTER_n + XEWAMTAU = XEWAMTAU_n + XWLIMUTH = XWLIMUTH_n + XWLIMUTMAX = XWLIMUTMAX_n + NWINDSLOPECPLMODE = NWINDSLOPECPLMODE_n + NNBSMOKETRACER = NNBSMOKETRACER_n +END SUBROUTINE INIT_NAM_FIREn + +SUBROUTINE UPDATE_NAM_FIREn + LBLAZE_n = LBLAZE + CPROPAG_MODEL_n = CPROPAG_MODEL + CHEAT_FLUX_MODEL_n = CHEAT_FLUX_MODEL + CLATENT_FLUX_MODEL_n = CLATENT_FLUX_MODEL + CFIRE_CPL_MODE_n = CFIRE_CPL_MODE + CBMAPFILE_n = CBMAPFILE + LINTERPWIND_n = LINTERPWIND + LSGBAWEIGHT_n = LSGBAWEIGHT + NFIRE_WENO_ORDER_n = NFIRE_WENO_ORDER + NFIRE_RK_ORDER_n = NFIRE_RK_ORDER + NREFINX_n = NREFINX + NREFINY_n = NREFINY + XCFLMAXFIRE_n = XCFLMAXFIRE + XLSDIFFUSION_n = XLSDIFFUSION + XROSDIFFUSION_n = XROSDIFFUSION + XFERR_n = XFERR + XFLUXZEXT_n = XFLUXZEXT + XFLUXZMAX_n = XFLUXZMAX + XFLXCOEFTMP_n = XFLXCOEFTMP + LWINDFILTER_n = LWINDFILTER + CWINDFILTER_n = CWINDFILTER + XEWAMTAU_n = XEWAMTAU + XWLIMUTH_n = XWLIMUTH + XWLIMUTMAX_n = XWLIMUTMAX + NWINDSLOPECPLMODE_n = NWINDSLOPECPLMODE + NNBSMOKETRACER_n = NNBSMOKETRACER +END SUBROUTINE UPDATE_NAM_FIREn -NAMELIST/NAM_FIREn/LBLAZE,& -CPROPAG_MODEL,CHEAT_FLUX_MODEL,CLATENT_FLUX_MODEL,XFERR,& -NFIRE_RK_ORDER,NFIRE_WENO_ORDER,LSGBAWEIGHT,& -NREFINX,NREFINY,XCFLMAXFIRE,CFIRE_CPL_MODE,CBMAPFILE,& -LINTERPWIND,XLSDIFFUSION,XROSDIFFUSION,NNBSMOKETRACER,& -XFLUXZEXT,XFLUXZMAX,XFLXCOEFTMP,& -LWINDFILTER,CWINDFILTER,XEWAMTAU,XWLIMUTH,XWLIMUTMAX,NWINDSLOPECPLMODE -! END MODULE MODN_FIRE_n diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90 index 2c71729d884b8ec91a113ffa59d15de72481bb08..213063f3545c5c332f751b34e18e16ad2c717fc8 100644 --- a/src/MNH/read_desfmn.f90 +++ b/src/MNH/read_desfmn.f90 @@ -278,7 +278,6 @@ USE MODN_RECYCL_PARAM_n USE MODN_IBM_PARAM_n USE MODD_IBM_LSF, ONLY: LIBM_LSF ! -USE MODD_FIRE_n USE MODN_FIRE_n ! IMPLICIT NONE @@ -492,6 +491,12 @@ IF (GFOUND) THEN READ(UNIT=ILUDES,NML=NAM_STATIONn) CALL UPDATE_NAM_STATIONn END IF +CALL POSNAM(ILUDES,'NAM_FIREN',GFOUND,ILUOUT) +CALL INIT_NAM_FIREn +IF (GFOUND) THEN + READ(UNIT=ILUDES,NML=NAM_FIREn) + CALL UPDATE_NAM_FIREn +END IF ! ! IF (KMI == 1) THEN @@ -616,8 +621,6 @@ IF (KMI == 1) THEN CALL POSNAM(ILUDES,'NAM_FOREFIRE',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_FOREFIRE) #endif - CALL POSNAM(ILUDES,'NAM_FIREN',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_FIREn) CALL POSNAM(ILUDES,'NAM_CONDSAMP',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CONDSAMP) CALL POSNAM(ILUDES,'NAM_BLOWSNOW',GFOUND,ILUOUT) @@ -764,6 +767,9 @@ IF (NVERB >= 10) THEN ! WRITE(UNIT=ILUOUT,FMT="('********** STATIONn ******************')") WRITE(UNIT=ILUOUT,NML=NAM_STATIONn) +! + WRITE(UNIT=ILUOUT,FMT="('********** BLAZE *******************')") + WRITE(UNIT=ILUOUT,NML=NAM_FIREn) ! IF (KMI==1) THEN WRITE(UNIT=ILUOUT,FMT="(/,'PART OF INITIAL FILE COMMON TO ALL THE MODELS')") @@ -850,11 +856,6 @@ IF (NVERB >= 10) THEN WRITE(UNIT=ILUOUT,NML=NAM_FOREFIRE) ! #endif -! - IF ( LBLAZE ) THEN - WRITE(UNIT=ILUOUT,FMT="('******************** BLAZE ********************')") - WRITE(UNIT=ILUOUT,NML=NAM_FIREn) - END IF ! WRITE(UNIT=ILUOUT,FMT="('************ CONDITIONAL SAMPLING *************')") WRITE(UNIT=ILUOUT,NML=NAM_CONDSAMP) diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90 index c83aa71855f2be9da4b9ea5369f7a0dc6c20f8fe..8af3757de6ec88300e7e765a753cded43b02947c 100644 --- a/src/MNH/read_exsegn.f90 +++ b/src/MNH/read_exsegn.f90 @@ -370,6 +370,7 @@ USE MODN_ELEC USE MODN_EOL USE MODN_EOL_ADNR USE MODN_EOL_ALM +USE MODN_FIRE_n USE MODN_FLYERS #ifdef MNH_FOREFIRE USE MODN_FOREFIRE @@ -410,8 +411,6 @@ USE MODN_TURB USE MODN_TURB_CLOUD USE MODN_TURB_n USE MODN_VISCOSITY -USE MODD_FIRE_n -USE MODN_FIRE_n ! IMPLICIT NONE ! @@ -512,6 +511,7 @@ CALL INIT_NAM_SERIESN CALL INIT_NAM_BLOWSNOWN CALL INIT_NAM_PROFILERn CALL INIT_NAM_STATIONn +CALL INIT_NAM_FIREn ! WRITE(UNIT=ILUOUT,FMT="(/,'READING THE EXSEG.NAM FILE')") CALL POSNAM(ILUSEG,'NAM_LUNITN',GFOUND,ILUOUT) @@ -570,6 +570,8 @@ CALL POSNAM(ILUSEG,'NAM_PROFILERN',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PROFILERn) CALL POSNAM(ILUSEG,'NAM_STATIONN',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_STATIONn) +CALL POSNAM(ILUSEG,'NAM_FIREN',GFOUND,ILUOUT) +IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FIREn) ! IF (KMI == 1) THEN WRITE(UNIT=ILUOUT,FMT="(' namelists common to all the models ')") @@ -852,8 +854,6 @@ IF (KMI == 1) THEN IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_2D_FRC) CALL POSNAM(ILUSEG,'NAM_LATZ_EDFLX',GFOUND) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LATZ_EDFLX) - CALL POSNAM(ILUSEG,'NAM_FIREN',GFOUND,ILUOUT) - IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FIREn) CALL POSNAM(ILUSEG,'NAM_BLOWSNOW',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOW) CALL POSNAM(ILUSEG,'NAM_VISC',GFOUND,ILUOUT) @@ -962,6 +962,7 @@ IF( CCLOUD == 'LIMA' ) THEN 'GRAU','HAIL') END IF ! Blaze +CALL UPDATE_NAM_FIREn IF (LBLAZE) THEN CALL TEST_NAM_VAR(ILUOUT,'CPROPAG_MODEL',CPROPAG_MODEL,'SANTONI2011') CALL TEST_NAM_VAR(ILUOUT,'CHEAT_FLUX_MODEL',CHEAT_FLUX_MODEL,'CST','EXP','EXS') @@ -969,6 +970,7 @@ IF (LBLAZE) THEN CALL TEST_NAM_VAR(ILUOUT,'CFIRE_CPL_MODE',CFIRE_CPL_MODE,'2WAYCPL','FIR2ATM','ATM2FIR') CALL TEST_NAM_VAR(ILUOUT,'CWINDFILTER',CWINDFILTER,'EWAM','WLIM') END IF +! IF(LBLOWSNOW) THEN CALL TEST_NAM_VAR(ILUOUT,'CSNOWSEDIM',CSNOWSEDIM,'NONE','MITC','CARR','TABC') IF (XALPHA_SNOW .NE. 3 .AND. CSNOWSEDIM=='TABC') THEN @@ -3063,6 +3065,7 @@ CALL UPDATE_NAM_SERIESN CALL UPDATE_NAM_BLOWSNOWN CALL UPDATE_NAM_PROFILERn CALL UPDATE_NAM_STATIONn +CALL UPDATE_NAM_FIREn !------------------------------------------------------------------------------- WRITE(UNIT=ILUOUT,FMT='(/)') !------------------------------------------------------------------------------- diff --git a/src/MNH/write_desfmn.f90 b/src/MNH/write_desfmn.f90 index 18d807785ab4c67b98932ca4ca0002c3c96260bf..4f27769f9d9560bee7196a32ce2ed37b49b6bff2 100644 --- a/src/MNH/write_desfmn.f90 +++ b/src/MNH/write_desfmn.f90 @@ -156,7 +156,6 @@ END MODULE MODI_WRITE_DESFM_n ! ------------ USE MODD_CONF USE MODD_DYN_n, ONLY: LHORELAX_SVLIMA, LHORELAX_SVFIRE -USE MODD_FIRE_n, ONLY: LBLAZE #ifdef MNH_FOREFIRE USE MODD_FOREFIRE, ONLY: LFOREFIRE #endif @@ -417,7 +416,10 @@ IF(LPASPOL) WRITE(UNIT=ILUSEG,NML=NAM_PASPOL) #ifdef MNH_FOREFIRE IF(LFOREFIRE) WRITE(UNIT=ILUSEG,NML=NAM_FOREFIRE) #endif +! +CALL INIT_NAM_FIREn WRITE(UNIT=ILUSEG,NML=NAM_FIREn) +! IF(LCONDSAMP) WRITE(UNIT=ILUSEG,NML=NAM_CONDSAMP) IF(LORILAM.AND.LUSECHEM) WRITE(UNIT=ILUSEG,NML=NAM_CH_ORILAM) ! @@ -541,6 +543,9 @@ IF (NVERB >= 5) THEN ! WRITE(UNIT=ILUOUT,FMT="('********** BLOWING SNOW SCHEME ****************')") WRITE(UNIT=ILUOUT,NML=NAM_BLOWSNOWn) +! + WRITE(UNIT=ILUOUT,FMT="('********** BLAZE *******************')") + WRITE(UNIT=ILUOUT,NML=NAM_FIREn) ! WRITE(UNIT=ILUOUT,FMT="('********** BLANKn *****************************')") WRITE(UNIT=ILUOUT,NML=NAM_BLANKn) @@ -639,11 +644,6 @@ IF (NVERB >= 5) THEN WRITE(UNIT=ILUOUT,NML=NAM_FOREFIRE) ! #endif -! - IF ( LBLAZE ) THEN - WRITE(UNIT=ILUOUT,FMT="('******************** BLAZE ********************')") - WRITE(UNIT=ILUOUT,NML=NAM_FIREn) - END IF ! WRITE(UNIT=ILUOUT,FMT="('********** CONDSAMP****************************')") WRITE(UNIT=ILUOUT,NML=NAM_CONDSAMP)