From 70f712818b620c8b1478a00fe2be114d55fe8f5d Mon Sep 17 00:00:00 2001
From: Sina Ackermann <sina.ackermann@iws.uni-stuttgart.de>
Date: Fri, 24 Feb 2017 15:26:30 +0100
Subject: [PATCH] [staggeredGrid][freeflow] Set up structure for nonisothermal
 Navier-Stokes model

* Not working yet
* add and adapt files for staggeredni problem
---
 dumux/freeflow/CMakeLists.txt                 |   1 +
 dumux/freeflow/staggeredni/CMakeLists.txt     |  10 +
 dumux/freeflow/staggeredni/fluxvariables.hh   | 178 ++++++++++++++++++
 dumux/freeflow/staggeredni/indices.hh         |  54 ++++++
 dumux/freeflow/staggeredni/model.hh           | 114 +++++++++++
 dumux/freeflow/staggeredni/properties.hh      |  75 ++++++++
 .../freeflow/staggeredni/propertydefaults.hh  | 178 ++++++++++++++++++
 7 files changed, 610 insertions(+)
 create mode 100644 dumux/freeflow/staggeredni/CMakeLists.txt
 create mode 100644 dumux/freeflow/staggeredni/fluxvariables.hh
 create mode 100644 dumux/freeflow/staggeredni/indices.hh
 create mode 100644 dumux/freeflow/staggeredni/model.hh
 create mode 100644 dumux/freeflow/staggeredni/properties.hh
 create mode 100644 dumux/freeflow/staggeredni/propertydefaults.hh

diff --git a/dumux/freeflow/CMakeLists.txt b/dumux/freeflow/CMakeLists.txt
index fecc1809e5..cb9306e085 100644
--- a/dumux/freeflow/CMakeLists.txt
+++ b/dumux/freeflow/CMakeLists.txt
@@ -1,5 +1,6 @@
 add_subdirectory("staggered")
 add_subdirectory("staggerednc")
+add_subdirectory("staggeredni")
 add_subdirectory("stokes")
 add_subdirectory("stokesnc")
 add_subdirectory("stokesncni")
diff --git a/dumux/freeflow/staggeredni/CMakeLists.txt b/dumux/freeflow/staggeredni/CMakeLists.txt
new file mode 100644
index 0000000000..cd81e3cdc4
--- /dev/null
+++ b/dumux/freeflow/staggeredni/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+#install headers
+install(FILES
+indices.hh
+localresidual.hh
+model.hh
+properties.hh
+propertydefaults.hh
+volumevariables.hh
+DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/porousmediumflow/1p/implicit)
\ No newline at end of file
diff --git a/dumux/freeflow/staggeredni/fluxvariables.hh b/dumux/freeflow/staggeredni/fluxvariables.hh
new file mode 100644
index 0000000000..b8cfdf4ef4
--- /dev/null
+++ b/dumux/freeflow/staggeredni/fluxvariables.hh
@@ -0,0 +1,178 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \file
+ * \brief Base class for the flux variables
+ */
+#ifndef DUMUX_FREELOW_IMPLICIT_NI_FLUXVARIABLES_HH
+#define DUMUX_FREELOW_IMPLICIT_NI_FLUXVARIABLES_HH
+
+#include <dumux/implicit/properties.hh>
+#include <dumux/discretization/fluxvariablesbase.hh>
+#include "../staggered/fluxvariables.hh"
+
+namespace Dumux
+{
+
+namespace Properties
+{
+// forward declaration
+NEW_PROP_TAG(EnableComponentTransport);
+NEW_PROP_TAG(EnableEnergyBalance);
+NEW_PROP_TAG(EnableInertiaTerms);
+}
+
+// // forward declaration
+// template<class TypeTag, bool enableComponentTransport, bool enableEnergyBalance>
+// class FreeFlowFluxVariablesImpl;
+
+/*!
+ * \ingroup ImplicitModel
+ * \brief The flux variables class
+ *        specializations are provided for combinations of physical processes
+ * \note  Not all specializations are currently implemented
+ */
+// template<class TypeTag>
+// using FreeFlowFluxVariables = FreeFlowFluxVariablesImpl<TypeTag, GET_PROP_VALUE(TypeTag, EnableComponentTransport),
+//                                                                  GET_PROP_VALUE(TypeTag, EnableEnergyBalance)>;
+
+// specialization for immiscible, non-isothermal flow
+template<class TypeTag>
+class FreeFlowFluxVariablesImpl<TypeTag, false, true> : public FreeFlowFluxVariablesImpl<TypeTag, false, false>
+{
+    using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+    using Problem = typename GET_PROP_TYPE(TypeTag, Problem);
+    using Element = typename GridView::template Codim<0>::Entity;
+    using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry);
+    using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar);
+    using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
+    using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables);
+    using GlobalFaceVars = typename GET_PROP_TYPE(TypeTag, GlobalFaceVars);
+    using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace);
+    using FluxVariablesCache = typename GET_PROP_TYPE(TypeTag, FluxVariablesCache);
+    using CellCenterPrimaryVariables = typename GET_PROP_TYPE(TypeTag, CellCenterPrimaryVariables);
+    using FacePrimaryVariables = typename GET_PROP_TYPE(TypeTag, FacePrimaryVariables);
+    using IndexType = typename GridView::IndexSet::IndexType;
+    using Stencil = std::vector<IndexType>;
+
+    using MolecularDiffusionType = typename GET_PROP_TYPE(TypeTag, MolecularDiffusionType);
+
+    static constexpr bool navierStokes = GET_PROP_VALUE(TypeTag, EnableInertiaTerms);
+//    static constexpr auto numComponents = GET_PROP_VALUE(TypeTag, NumComponents);
+
+    static constexpr bool useMoles = GET_PROP_VALUE(TypeTag, UseMoles);
+
+//    //! The index of the component balance equation that gets replaced with the total mass balance
+//    static const int replaceCompEqIdx = GET_PROP_VALUE(TypeTag, ReplaceCompEqIdx);
+
+    using ParentType = FreeFlowFluxVariablesImpl<TypeTag, false, false>;
+
+    enum {
+         // grid and world dimension
+        dim = GridView::dimension,
+        dimWorld = GridView::dimensionworld,
+
+        pressureIdx = Indices::pressureIdx,
+        velocityIdx = Indices::velocityIdx,
+        temperatureIdx = Indices::temperatureIdx, // TODO necessary?
+
+        massBalanceIdx = Indices::massBalanceIdx,
+        momentumBalanceIdx = Indices::momentumBalanceIdx,
+        energyBalanceIdx = Indices::energyBalanceIdx,
+        conti0EqIdx = Indices::conti0EqIdx,
+        phaseIdx = Indices::phaseIdx
+    };
+
+public:
+    CellCenterPrimaryVariables computeFluxForCellCenter(const Problem& problem,
+                                                        const Element &element,
+                                                        const FVElementGeometry& fvGeometry,
+                                                        const ElementVolumeVariables& elemVolVars,
+                                                        const GlobalFaceVars& globalFaceVars,
+                                                        const SubControlVolumeFace &scvf,
+                                                        const FluxVariablesCache& fluxVarsCache)
+    {
+//        CellCenterPrimaryVariables flux(0.0);
+//
+//        flux += advectiveFluxForCellCenter_(problem, fvGeometry, elemVolVars, globalFaceVars, scvf);
+//        flux += MolecularDiffusionType::diffusiveFluxForCellCenter(problem, fvGeometry, elemVolVars, scvf);
+//        return flux;
+    }
+
+private:
+
+    CellCenterPrimaryVariables advectiveFluxForCellCenter_(const Problem& problem,
+                                                          const FVElementGeometry& fvGeometry,
+                                                          const ElementVolumeVariables& elemVolVars,
+                                                          const GlobalFaceVars& globalFaceVars,
+                                                          const SubControlVolumeFace &scvf)
+    {
+//        CellCenterPrimaryVariables flux(0.0);
+//
+//        const auto& insideScv = fvGeometry.scv(scvf.insideScvIdx());
+//        const auto& insideVolVars = elemVolVars[insideScv];
+//
+//        // if we are on an inflow/outflow boundary, use the volVars of the element itself
+//        // TODO: catch neumann and outflow in localResidual's evalBoundary_()
+//        bool isOutflow = false;
+//        if(scvf.boundary())
+//        {
+//            const auto bcTypes = problem.boundaryTypesAtPos(scvf.center());
+//                if(bcTypes.isOutflow(momentumBalanceIdx))
+//                    isOutflow = true;
+//        }
+//
+//        const auto& outsideVolVars = isOutflow ? insideVolVars : elemVolVars[scvf.outsideScvIdx()];
+//
+//        const Scalar velocity = globalFaceVars.faceVars(scvf.dofIndex()).velocity();
+//
+//        const bool insideIsUpstream = sign(scvf.outerNormalScalar()) == sign(velocity);
+//        const auto& upstreamVolVars = insideIsUpstream ? insideVolVars : outsideVolVars;
+//        const auto& downstreamVolVars = insideIsUpstream ? insideVolVars : outsideVolVars;
+//
+//        const Scalar upWindWeight = GET_PROP_VALUE(TypeTag, ImplicitUpwindWeight);
+//        const Scalar upstreamDensity = useMoles ? upstreamVolVars.molarDensity() : upstreamVolVars.density();
+//        const Scalar downstreamDensity = useMoles ? downstreamVolVars.molarDensity() : downstreamVolVars.density();
+//
+//        for (int compIdx = 0; compIdx < numComponents; ++compIdx)
+//        {
+//            // get equation index
+//            const auto eqIdx = conti0EqIdx + compIdx;
+//            if (eqIdx == replaceCompEqIdx)
+//                continue;
+//
+//            const Scalar upstreamFraction = useMoles ? upstreamVolVars.moleFraction(phaseIdx, compIdx) : upstreamVolVars.massFraction(phaseIdx, compIdx);
+//            const Scalar downstreamFraction = useMoles ? downstreamVolVars.moleFraction(phaseIdx, compIdx) : downstreamVolVars.massFraction(phaseIdx, compIdx);
+//
+//            flux[eqIdx] = (upWindWeight * upstreamDensity * upstreamFraction +
+//                          (1.0 - upWindWeight) * downstreamDensity * downstreamFraction)
+//                          * velocity;
+//        }
+//        // in case one balance is substituted by the total mass balance
+//        if (replaceCompEqIdx < numComponents)
+//            flux[replaceCompEqIdx] = (upWindWeight * upstreamDensity + (1.0 - upWindWeight) * downstreamDensity) * velocity;
+//
+//        flux *= scvf.area() * sign(scvf.outerNormalScalar());
+//        return flux;
+    }
+};
+
+} // end namespace
+
+#endif
diff --git a/dumux/freeflow/staggeredni/indices.hh b/dumux/freeflow/staggeredni/indices.hh
new file mode 100644
index 0000000000..2f9c73dd76
--- /dev/null
+++ b/dumux/freeflow/staggeredni/indices.hh
@@ -0,0 +1,54 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \file
+ * \brief  Defines the indices for the staggered Navier-Stokes NC model.
+ */
+#ifndef DUMUX_STAGGERED_NAVIERSTOKES_NI_INDICES_HH
+#define DUMUX_STAGGERED_NAVIERSTOKES_NI_INDICES_HH
+
+#include <dumux/freeflow/staggered/indices.hh>
+
+namespace Dumux
+{
+// \{
+/*!
+ * \ingroup NavierStokesNCModel
+ * \ingroup ImplicitIndices
+ * \brief Indices for the staggered Navier-Stokes NI model model.
+ *
+ * \tparam PVOffset The first index in a primary variable vector.
+ */
+template <class TypeTag, int PVOffset = 0>
+struct NavierStokesNIIndices : public NavierStokesCommonIndices<TypeTag, PVOffset>
+{
+private:
+    using ParentType = NavierStokesCommonIndices<TypeTag, PVOffset>;
+
+public:
+
+    static constexpr int energyBalanceIdx = PVOffset + 1; // TODO
+    static constexpr int temperatureIdx = energyBalanceIdx;
+
+};
+
+// \}
+} // end namespace
+
+#endif
diff --git a/dumux/freeflow/staggeredni/model.hh b/dumux/freeflow/staggeredni/model.hh
new file mode 100644
index 0000000000..639f3b7930
--- /dev/null
+++ b/dumux/freeflow/staggeredni/model.hh
@@ -0,0 +1,114 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \file
+ *
+ * \brief Base class for all models which use the one-phase,
+ *        fully implicit model.
+ *        Adaption of the fully implicit scheme to the one-phase flow model.
+ */
+
+#ifndef DUMUX_NAVIERSTOKES_NI_MODEL_HH
+#define DUMUX_NAVIERSTOKES_NI_MODEL_HH
+
+// #include <dumux/porousmediumflow/implicit/velocityoutput.hh>
+#include "properties.hh"
+#include "../staggered/model.hh"
+
+namespace Dumux
+{
+/*!
+ * \ingroup NavierStokesModel
+ * \brief A single-phase, non-isothermal flow model using the fully implicit scheme.
+ *
+ * Single-phase, non-isothermal flow model, which uses a standard Darcy approach as the
+ * equation for the conservation of momentum:
+ * \f[
+ v = - \frac{\textbf K}{\mu}
+ \left(\textbf{grad}\, p - \varrho {\textbf g} \right)
+ * \f]
+ *
+ * and solves the mass continuity equation:
+ * \f[
+ \phi \frac{\partial \varrho}{\partial t} + \text{div} \left\lbrace
+ - \varrho \frac{\textbf K}{\mu} \left( \textbf{grad}\, p -\varrho {\textbf g} \right) \right\rbrace = q,
+ * \f]
+ * All equations are discretized using a vertex-centered finite volume (box)
+ * or cell-centered finite volume scheme as spatial
+ * and the implicit Euler method as time discretization.
+ * The model supports compressible as well as incompressible fluids.
+ */
+template<class TypeTag >
+class NavierStokesNIModel : public NavierStokesModel<TypeTag>
+{
+    using ParentType = NavierStokesModel<TypeTag>;
+    typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry;
+    typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem;
+    typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices;
+    typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+    typedef typename GET_PROP_TYPE(TypeTag, GlobalFVGeometry) GlobalFVGeometry;
+    typedef typename GET_PROP_TYPE(TypeTag, SolutionVector) SolutionVector;
+    typedef typename GET_PROP_TYPE(TypeTag, JacobianAssembler) JacobianAssembler;
+
+    using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem);
+    using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables);
+
+    typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
+    enum { dim = GridView::dimension };
+    enum { dimWorld = GridView::dimensionworld };
+
+    enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) };
+    enum { dofCodim = isBox ? dim : 0 };
+    using Element = typename GridView::template Codim<0>::Entity;
+
+    using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
+
+    using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices);
+    typename DofTypeIndices::CellCenterIdx cellCenterIdx;
+    typename DofTypeIndices::FaceIdx faceIdx;
+
+    enum { phaseIdx = Indices::phaseIdx };
+
+public:
+
+    void init(Problem& problem)
+    {
+        ParentType::init(problem);
+
+        // register standardized vtk output fields
+        auto& vtkOutputModule = problem.vtkOutputModule();
+//        vtkOutputModule.addSecondaryVariable("rhoMolar",[](const VolumeVariables& v){ return v.molarDensity(); });
+//        vtkOutputModule.addSecondaryVariable("rho",[](const VolumeVariables& v){ return v.density(); });
+//        for (int j = 0; j < numComponents; ++j)
+//        {
+//            vtkOutputModule.addSecondaryVariable("X^" + FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(phaseIdx),
+//                                                 [j](const VolumeVariables& v){ return v.massFraction(phaseIdx,j); });
+//
+//            vtkOutputModule.addSecondaryVariable("x^" + FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(phaseIdx),
+//                                                 [j](const VolumeVariables& v){ return v.moleFraction(phaseIdx,j); });
+//        }
+
+//         NonIsothermalModel::maybeAddTemperature(vtkOutputModule);
+    }
+};
+}
+
+#include "propertydefaults.hh"
+
+#endif
diff --git a/dumux/freeflow/staggeredni/properties.hh b/dumux/freeflow/staggeredni/properties.hh
new file mode 100644
index 0000000000..4eda84787a
--- /dev/null
+++ b/dumux/freeflow/staggeredni/properties.hh
@@ -0,0 +1,75 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \ingroup Properties
+ * \ingroup ImplicitProperties
+ * \ingroup NavierStokesModel
+ * \file
+ *
+ * \brief Defines the properties required for the one-phase fully implicit model.
+ */
+#ifndef DUMUX_NAVIERSTOKES_NI_PROPERTIES_HH
+#define DUMUX_NAVIERSTOKES_NI_PROPERTIES_HH
+
+// #include <dumux/porousmediumflow/nonisothermal/implicit/properties.hh>
+#include <dumux/freeflow/staggered/properties.hh>
+
+namespace Dumux
+{
+// \{
+///////////////////////////////////////////////////////////////////////////
+// properties for the isothermal Navier-Stokes model
+///////////////////////////////////////////////////////////////////////////
+namespace Properties {
+
+//////////////////////////////////////////////////////////////////
+// Type tags
+//////////////////////////////////////////////////////////////////
+
+//! The type tags for the implicit single-phase problems
+NEW_TYPE_TAG(NavierStokesNI, INHERITS_FROM(NavierStokes));
+
+//! The type tags for the corresponding non-isothermal problems
+// NEW_TYPE_TAG(NavierStokesNI, INHERITS_FROM(NavierStokes, NonIsothermal));
+
+//////////////////////////////////////////////////////////////////
+// Property tags
+//////////////////////////////////////////////////////////////////
+
+//NEW_PROP_TAG(NumPhases);   //!< Number of fluid phases in the system
+//NEW_PROP_TAG(Indices); //!< Enumerations for the model
+//NEW_PROP_TAG(FluidSystem); //!< The type of the fluid system to use
+//NEW_PROP_TAG(Fluid); //!< The fluid used for the default fluid system
+//NEW_PROP_TAG(FluidState); //!< The type of the fluid state to use
+//NEW_PROP_TAG(ProblemEnableGravity); //!< Returns whether gravity is considered in the problem
+//NEW_PROP_TAG(ImplicitMassUpwindWeight); //!< Returns weight of the upwind cell when calculating fluxes
+//NEW_PROP_TAG(ImplicitMobilityUpwindWeight); //!< Weight for the upwind mobility in the velocity calculation
+//NEW_PROP_TAG(VtkAddVelocity); //!< Returns whether velocity vectors are written into the vtk output
+//NEW_PROP_TAG(EnableInertiaTerms); //!< Returns whether to include inertia terms in the momentum balance eq or not (Stokes / Navier-Stokes)
+//NEW_PROP_TAG(BoundaryValues); //!< Type to set values on the boundary
+//NEW_PROP_TAG(EnableComponentTransport); //!< Returns whether to consider component transport or not
+//NEW_PROP_TAG(EnableEnergyTransport); //!<  Returns whether to consider energy transport or not
+//NEW_PROP_TAG(FaceVariables); //!<  Returns whether to consider energy transport or not
+//NEW_PROP_TAG(UseMoles); //!< Defines whether molar (true) or mass (false) density is used
+// \}
+}
+
+} // end namespace
+
+#endif
diff --git a/dumux/freeflow/staggeredni/propertydefaults.hh b/dumux/freeflow/staggeredni/propertydefaults.hh
new file mode 100644
index 0000000000..f85d1a272b
--- /dev/null
+++ b/dumux/freeflow/staggeredni/propertydefaults.hh
@@ -0,0 +1,178 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \ingroup Properties
+ * \ingroup ImplicitProperties
+ * \ingroup OnePModel
+ * \file
+ *
+ * \brief Defines the properties required for the one-phase fully implicit model.
+ */
+#ifndef DUMUX_NAVIER_STOKES_NI_PROPERTY_DEFAULTS_HH
+#define DUMUX_NAVIER_STOKES_NI_PROPERTY_DEFAULTS_HH
+
+#include "properties.hh"
+
+#include "model.hh"
+#include "volumevariables.hh"
+#include "indices.hh"
+#include "localresidual.hh"
+#include "../staggered/problem.hh"
+// #include "../staggered/model.hh"
+#include "../staggered/propertydefaults.hh"
+
+
+#include <dumux/implicit/staggered/localresidual.hh>
+#include <dumux/material/fluidsystems/gasphase.hh>
+#include <dumux/material/fluidsystems/liquidphase.hh>
+#include <dumux/material/components/nullcomponent.hh>
+#include <dumux/material/fluidsystems/1p.hh>
+
+#include <dumux/material/fluidstates/compositional.hh>
+
+
+
+
+namespace Dumux
+{
+
+namespace Properties
+{
+// forward declaration
+NEW_PROP_TAG(FluxVariables);
+NEW_PROP_TAG(FluxVariablesCache);
+}
+// \{
+
+///////////////////////////////////////////////////////////////////////////
+// default property values for the isothermal single phase model
+///////////////////////////////////////////////////////////////////////////
+namespace Properties {
+
+SET_INT_PROP(NavierStokesNI, NumEqCellCenter, 2);
+
+//! the VolumeVariables property
+SET_TYPE_PROP(NavierStokesNI, VolumeVariables, NavierStokesNIVolumeVariables<TypeTag>);
+SET_TYPE_PROP(NavierStokesNI, Model, NavierStokesNIModel<TypeTag>);
+
+
+/*!
+ * \brief The fluid state which is used by the volume variables to
+ *        store the thermodynamic state. This should be chosen
+ *        appropriately for the model ((non-)isothermal, equilibrium, ...).
+ *        This can be done in the problem.
+ */
+SET_PROP(NavierStokesNI, FluidState)
+{
+    private:
+        typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+        typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
+    public:
+        typedef CompositionalFluidState<Scalar, FluidSystem> type; // TODO necessary?
+};
+
+// //! Enable advection
+// SET_BOOL_PROP(NavierStokes, EnableAdvection, true);
+//
+// //! The one-phase model has no molecular diffusion
+// SET_BOOL_PROP(NavierStokes, EnableMolecularDiffusion, false);
+//
+//! Non-Isothermal model by default
+SET_BOOL_PROP(NavierStokes, EnableEnergyBalance, true);
+//
+// //! The indices required by the isothermal single-phase model
+// SET_TYPE_PROP(NavierStokes, Indices, NavierStokesCommonIndices<TypeTag>);
+//
+// //! The weight of the upwind control volume when calculating
+// //! fluxes. Use central differences by default.
+// SET_SCALAR_PROP(NavierStokes, ImplicitMassUpwindWeight, 0.5);
+//
+// //! weight for the upwind mobility in the velocity calculation
+// //! fluxes. Use central differences by default.
+// SET_SCALAR_PROP(NavierStokes, ImplicitMobilityUpwindWeight, 0.5);
+//
+// //! The fluid system to use by default
+// SET_TYPE_PROP(NavierStokes, FluidSystem, Dumux::FluidSystems::OneP<typename GET_PROP_TYPE(TypeTag, Scalar), typename GET_PROP_TYPE(TypeTag, Fluid)>);
+//
+// SET_PROP(NavierStokes, Fluid)
+// { private:
+//     typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+// public:
+//     typedef FluidSystems::LiquidPhase<Scalar, Dumux::NullComponent<Scalar> > type;
+// };
+//
+// /*!
+//  * \brief The fluid state which is used by the volume variables to
+//  *        store the thermodynamic state. This should be chosen
+//  *        appropriately for the model ((non-)isothermal, equilibrium, ...).
+//  *        This can be done in the problem.
+//  */
+// SET_PROP(NavierStokes, FluidState){
+//     private:
+//         typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+//         typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
+//     public:
+//         typedef Dumux::ImmiscibleFluidState<Scalar, FluidSystem> type;
+// };
+//
+// // disable velocity output by default
+// SET_BOOL_PROP(NavierStokes, VtkAddVelocity, true);
+//
+// // enable gravity by default
+// SET_BOOL_PROP(NavierStokes, ProblemEnableGravity, true);
+//
+// SET_BOOL_PROP(NavierStokes, EnableInertiaTerms, true);
+//
+// SET_BOOL_PROP(NavierStokes, EnableEnergyTransport, false);
+//
+
+//! average is used as default model to compute the effective thermal heat conductivity
+// SET_PROP(NavierStokesNI, ThermalConductivityModel)
+// { private :
+//     typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+//   public:
+//     typedef ThermalConductivityAverage<Scalar> type;
+// };
+
+//////////////////////////////////////////////////////////////////
+// Property values for isothermal model required for the general non-isothermal model
+//////////////////////////////////////////////////////////////////
+
+// set isothermal Model
+// SET_TYPE_PROP(NavierStokesNI, IsothermalModel, NavierStokesModel<TypeTag>);
+
+//set isothermal VolumeVariables
+// SET_TYPE_PROP(NavierStokesNI, IsothermalVolumeVariables, NavierStokesVolumeVariables<TypeTag>);
+
+//set isothermal LocalResidual
+// SET_TYPE_PROP(NavierStokesNI, IsothermalLocalResidual, ImmiscibleLocalResidual<TypeTag>);
+
+//set isothermal Indices
+// SET_TYPE_PROP(NavierStokesNI, IsothermalIndices, NavierStokesCommonIndices<TypeTag>);
+
+//set isothermal NumEq
+// SET_INT_PROP(NavierStokesNI, IsothermalNumEq, 1);
+
+
+// \}
+} // end namespace Properties
+
+} // end namespace Dumux
+
+#endif
-- 
GitLab