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