From cf5a8e2baecab9a4298f59b9bd10727d0f4e8de2 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 10 Feb 2023 13:54:02 +0100 Subject: [PATCH] Philippe 10/02/2023: BLAZE: move blaze variables to modd_fire.f90 (from modd_fieldn.f90) --- src/LIB/SURCOUCHE/src/mode_field.f90 | 3 +- src/MNH/deallocate_model1.f90 | 1 + src/MNH/firemodel.f90 | 13 ++-- src/MNH/goto_model_wrapper.f90 | 5 +- src/MNH/ground_paramn.f90 | 8 +-- src/MNH/modd_fieldn.f90 | 87 +---------------------- src/MNH/modd_fire.f90 | 100 ++++++++++++++++++++++++++- 7 files changed, 115 insertions(+), 102 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index e8b970709..55aa86add 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -3667,6 +3667,7 @@ USE MODD_DEF_EDDYUV_FLUX_n USE MODD_DYN_n USE MODD_ELEC_n USE MODD_FIELD_n +USE MODD_FIRE USE MODD_GR_FIELD_n USE MODD_GRID_n USE MODD_HURR_FIELD_n @@ -3989,7 +3990,7 @@ IF (CPROGRAM=='MESONH') THEN call Goto_model_1field( 'TSRAD', kfrom, kto, XTSRAD ) END IF ! -! MODD_FIRE variables +! MODD_FIRE_n variables ! IF ( TRIM(CPROGRAM) == 'MESONH' .OR. TRIM(CPROGRAM) == 'DIAG' .OR. TRIM(CPROGRAM) == 'REAL' & .OR. TRIM(CPROGRAM) == 'LFICDF' .OR. TRIM(CPROGRAM) == 'SPAWN' ) THEN diff --git a/src/MNH/deallocate_model1.f90 b/src/MNH/deallocate_model1.f90 index 4a940c6d8..89c9c3170 100644 --- a/src/MNH/deallocate_model1.f90 +++ b/src/MNH/deallocate_model1.f90 @@ -78,6 +78,7 @@ USE MODD_REF ! USE MODD_METRICS_n USE MODD_FIELD_n +USE MODD_FIRE USE MODD_DUMMY_GR_FIELD_n USE MODD_LSFIELD_n USE MODD_GRID_n diff --git a/src/MNH/firemodel.f90 b/src/MNH/firemodel.f90 index 612d4d52c..fa640ec54 100644 --- a/src/MNH/firemodel.f90 +++ b/src/MNH/firemodel.f90 @@ -477,7 +477,6 @@ SUBROUTINE FIRE_GRADPHI( PLSPHI, PGRADLSPHIX, PGRADLSPHIY ) ! USE MODD_FIRE USE MODI_FIRE_MODEL, ONLY: FIRE_GRADMASK, FIRE_WENO_1, FIRE_WENO_3 - USE MODD_FIELD_n, ONLY : XLSPHI2D, XGRADLSPHIX2D, XGRADLSPHIY2D, XGRADMASKX, XGRADMASKY ! USE MODE_MPPDB USE MODD_TIME_n, ONLY : TDTCUR @@ -1093,12 +1092,11 @@ SUBROUTINE FIRE_GETWIND( PUT, PVT, PWT, PGRADLSPHIX, PGRADLSPHIY, PFIREWIND, KTC !* 0. DECLARATIONS !! ============ ! - USE MODD_GRID_n, ONLY : XXHAT,XYHAT - USE MODI_SHUMAN, ONLY : MXF, MYF - USE MODD_CONF , ONLY : CCONF - USE MODD_FIELD_n, ONLY : XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW - ! + USE MODD_CONF, ONLY: CCONF USE MODD_FIRE + USE MODD_GRID_n, ONLY: XXHAT,XYHAT + ! + USE MODI_SHUMAN, ONLY: MXF, MYF ! USE MODE_MPPDB @@ -1519,7 +1517,6 @@ SUBROUTINE FIRE_HEATFLUXES( PLSPHI, PBMAP, PFIRETAU, PATMDT, PFLUXPARAMH, PFLUXP USE MODD_FIRE USE MODD_TIME_n, ONLY : TDTCUR USE MODI_FIRE_MODEL, ONLY: FIRE_SUBGRIDSURFACE - USE MODD_FIELD_n, ONLY : XLSPHI2D, XSURFRATIO2D ! USE MODE_MPPDB ! @@ -2976,7 +2973,6 @@ SUBROUTINE FIRE_LSDIFFU( PLSPHI, PLSDIFFUX, PLSDIFFUY ) ! USE MODD_PARAMETERS USE MODD_CST - USE MODD_FIELD_n, ONLY : XLSPHI2D, XLSDIFFUX2D, XLSDIFFUY2D ! USE MODD_FIRE !USE MODI_FIRE_MODEL @@ -3116,7 +3112,6 @@ SUBROUTINE FIRE_ROSDIFFU( PFIRERW ) ! USE MODD_PARAMETERS USE MODD_CST - USE MODD_FIELD_n, ONLY : XFIRERW2D ! USE MODD_FIRE !USE MODI_FIRE_MODEL diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90 index 33dbefdf2..5c99862b0 100644 --- a/src/MNH/goto_model_wrapper.f90 +++ b/src/MNH/goto_model_wrapper.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -19,6 +19,7 @@ ! F. Auguste 02/21: add IBM ! T. Nagel 02/21: add turbulence recycling ! P. Wautelet 27/04/2022: add namelist for profilers +! P. Wautelet 10/02/2023: add Blaze variables !----------------------------------------------------------------- MODULE MODI_GOTO_MODEL_WRAPPER @@ -64,6 +65,7 @@ USE MODD_DYN_n USE MODD_DYNZD_n USE MODD_ELEC_n USE MODD_FIELD_n +USE MODD_FIRE #ifdef MNH_FOREFIRE USE MODD_FOREFIRE_n #endif @@ -188,6 +190,7 @@ CALL PASPOL_GOTO_MODEL(KFROM, KTO) #ifdef MNH_FOREFIRE CALL FOREFIRE_GOTO_MODEL(KFROM, KTO) #endif +CALL FIRE_GOTO_MODEL( KFROM, KTO ) !CALL PRECIP_GOTO_MODEL(KFROM, KTO) CALL ELEC_GOTO_MODEL(KFROM, KTO) CALL RADIATIONS_GOTO_MODEL(KFROM, KTO) diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90 index d707016b9..c60225b13 100644 --- a/src/MNH/ground_paramn.f90 +++ b/src/MNH/ground_paramn.f90 @@ -145,10 +145,10 @@ USE MODD_DIMPHYEX, ONLY : DIMPHYEX_t USE MODD_PARAMETERS, ONLY : JPVEXT USE MODD_DYN_n, ONLY : XTSTEP USE MODD_CH_MNHC_n, ONLY : LUSECHEM -USE MODD_FIELD_n, ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS, & - XLSPHI, XBMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMIGNITION, XFMFUELTYPE,& - XFIRETAU, XFLUXPARAMH, XFLUXPARAMW, XFIRERW, XFMASE, XFMAWC, XFMWALKIG,& - XFMFLUXHDH, XFMFLUXHDW, XRTHS, XRRS, XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW, XGRADLSPHIX, & +USE MODD_FIELD_n, ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS, XRTHS, XRRS +USE MODD_FIRE, ONLY : XLSPHI, XBMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMIGNITION, XFMFUELTYPE, & + XFIRETAU, XFLUXPARAMH, XFLUXPARAMW, XFIRERW, XFMASE, XFMAWC, XFMWALKIG, & + XFMFLUXHDH, XFMFLUXHDW, XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW, XGRADLSPHIX, & XGRADLSPHIY, XFIREWIND, XFMGRADOROX, XFMGRADOROY USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZZ USE MODD_DIM_n, ONLY : NKMAX diff --git a/src/MNH/modd_fieldn.f90 b/src/MNH/modd_fieldn.f90 index a9197039e..9cc888e85 100644 --- a/src/MNH/modd_fieldn.f90 +++ b/src/MNH/modd_fieldn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -55,8 +55,7 @@ ! P. Wautelet 14/03/2019: add XZWS_DEFAULT parameter ! S. Riette 04/2020: highLow cloud ! T. Nagel 02/2021: add fields for turbulence recycling -! A. Costes 12/2021: add Blaze fire model variables -!! +! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -130,19 +129,6 @@ TYPE FIELD_t REAL, DIMENSION(:,:,:), POINTER :: XHLC_HCF=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XHLI_HRI=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XHLI_HCF=>NULL() - ! Blaze fire model not shared between sub domains - 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 FIELD_t @@ -188,44 +174,7 @@ REAL, DIMENSION(:,:,:), POINTER :: XRCM=>NULL() REAL, DIMENSION(:,:), POINTER :: XFLUCTUNW=>NULL(),XFLUCTVNN=>NULL(),XFLUCTUTN=>NULL(),XFLUCTVTW=>NULL() REAL, DIMENSION(:,:), POINTER :: XFLUCTUNE=>NULL(),XFLUCTVNS=>NULL(),XFLUCTUTS=>NULL(),XFLUCTVTE=>NULL() REAL, DIMENSION(:,:), POINTER :: XFLUCTWTW=>NULL(),XFLUCTWTN=>NULL(),XFLUCTWTE=>NULL(),XFLUCTWTS=>NULL() -! 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() -! End of Blaze declaration + CONTAINS SUBROUTINE FIELD_GOTO_MODEL(KFROM, KTO) @@ -286,21 +235,6 @@ FIELD_MODEL(KFROM)%XHLC_HRC=>XHLC_HRC FIELD_MODEL(KFROM)%XHLC_HCF=>XHLC_HCF FIELD_MODEL(KFROM)%XHLI_HRI=>XHLI_HRI FIELD_MODEL(KFROM)%XHLI_HCF=>XHLI_HCF -! Blaze -FIELD_MODEL(KFROM)%XGRADLSPHIY => XGRADLSPHIX -FIELD_MODEL(KFROM)%XGRADLSPHIY => XGRADLSPHIY -FIELD_MODEL(KFROM)%XFIREWIND => XFIREWIND -!! 2d Blaze -FIELD_MODEL(KFROM)%XLSPHI2D => XLSPHI2D -FIELD_MODEL(KFROM)%XGRADLSPHIX2D => XGRADLSPHIX2D -FIELD_MODEL(KFROM)%XGRADLSPHIY2D => XGRADLSPHIY2D -FIELD_MODEL(KFROM)%XGRADMASKX => XGRADMASKX -FIELD_MODEL(KFROM)%XGRADMASKY => XGRADMASKY -FIELD_MODEL(KFROM)%XSURFRATIO2D => XSURFRATIO2D -FIELD_MODEL(KFROM)%XLSDIFFUX2D => XLSDIFFUX2D -FIELD_MODEL(KFROM)%XLSDIFFUY2D => XLSDIFFUY2D -FIELD_MODEL(KFROM)%XFIRERW2D => XFIRERW2D -!End of Blaze ! ! Current model is set to model KTO !XZWS=>FIELD_MODEL(KTO)%XZWS !Done in FIELDLIST_GOTO_MODEL @@ -356,21 +290,6 @@ XHLC_HRC=>FIELD_MODEL(KTO)%XHLC_HRC XHLC_HCF=>FIELD_MODEL(KTO)%XHLC_HCF XHLI_HRI=>FIELD_MODEL(KTO)%XHLI_HRI XHLI_HCF=>FIELD_MODEL(KTO)%XHLI_HCF -! Blaze -XGRADLSPHIX => FIELD_MODEL(KTO)%XGRADLSPHIX -XGRADLSPHIY => FIELD_MODEL(KTO)%XGRADLSPHIY -XFIREWIND => FIELD_MODEL(KTO)%XFIREWIND -!! 2d Blaze -XLSPHI2D => FIELD_MODEL(KTO)%XLSPHI2D -XGRADLSPHIX2D => FIELD_MODEL(KTO)%XGRADLSPHIX2D -XGRADLSPHIY2D => FIELD_MODEL(KTO)%XGRADLSPHIY2D -XGRADMASKX => FIELD_MODEL(KTO)%XGRADMASKX -XGRADMASKY => FIELD_MODEL(KTO)%XGRADMASKY -XSURFRATIO2D => FIELD_MODEL(KTO)%XSURFRATIO2D -XLSDIFFUX2D => FIELD_MODEL(KTO)%XLSDIFFUX2D -XLSDIFFUY2D => FIELD_MODEL(KTO)%XLSDIFFUY2D -XFIRERW2D => FIELD_MODEL(KTO)%XFIRERW2D -! End of Blaze END SUBROUTINE FIELD_GOTO_MODEL END MODULE MODD_FIELD_n diff --git a/src/MNH/modd_fire.f90 b/src/MNH/modd_fire.f90 index efda6f439..329d6f011 100644 --- a/src/MNH/modd_fire.f90 +++ b/src/MNH/modd_fire.f90 @@ -32,14 +32,72 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_PRECISION, ONLY: MNHTIME -! +USE MODD_PARAMETERS, ONLY: JPMODELMAX +USE MODD_PRECISION, ONLY: MNHTIME + IMPLICIT NONE -! + 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 + +TYPE(TFIRE_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: TFIRE_MODEL + +! 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() + + LOGICAL :: LBLAZE ! Flag for Fire model use, default FALSE CHARACTER(LEN=11) :: CPROPAG_MODEL ! Fire propagation model (default SANTONI2011) @@ -93,4 +151,40 @@ LOGICAL :: LRESTA_EWAM ! Flag for using EWAM in R LOGICAL :: LRESTA_WLIM ! Flag for using WLIM in RESTA file +CONTAINS + +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 + ! + ! 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 +END SUBROUTINE FIRE_GOTO_MODEL + END MODULE MODD_FIRE -- GitLab