Commit b0b79fbe authored by Andreas Lauser's avatar Andreas Lauser
Browse files

1p2c box model: convert to new structure

git-svn-id: svn://svn.iws.uni-stuttgart.de/DUMUX/dumux/trunk@3958 2fb0f335-1f38-0410-981e-8018bf24f1b0
parent a417401f
// $Id: 1p2celementdata.hh 3736 2010-06-15 09:52:10Z lauser $
/*****************************************************************************
* Copyright (C) 2009 by Karin Erbertseder *
* Copyright (C) 2009 by Andreas Lauser *
* Copyright (C) 2008 by Bernd Flemisch *
* Institute of Hydraulic Engineering *
* University of Stuttgart, Germany *
* email: <givenname>.<name>@iws.uni-stuttgart.de *
* *
* 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, as long as this copyright notice *
* is included in its original form. *
* *
* This program is distributed WITHOUT ANY WARRANTY. *
*****************************************************************************/
/*!
* \file
*
* \brief Contains the quantities which are are constant within a
* finite element in the two-phase model.
*
* For the plain twophase model everything is given on the finite
* volumes, so this class is empty.
*/
#ifndef DUMUX_1P2C_ELEMENT_DATA_HH
#define DUMUX_1P2C_ELEMENT_DATA_HH
namespace Dumux
{
/*!
* \brief This template class contains the quantities which are are
* constant within a finite element in the two-phase model.
*
* For the plain two-phase model everything is given on the finite
* volumes, so this class is empty.
*/
template <class TypeTag>
class OnePTwoCElementData
{
};
} // end namepace
#endif
......@@ -36,10 +36,10 @@ template <class TypeTag>
class OnePTwoCFluidState : public FluidState<typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)),
OnePTwoCFluidState<TypeTag> >
{
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
typedef typename GET_PROP(TypeTag, PTAG(SolutionTypes)) SolutionTypes;
typedef typename SolutionTypes::PrimaryVarVector PrimaryVarVector;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(PrimaryVarVector)) PrimaryVarVector;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(OnePTwoCIndices)) Indices;
......
// $Id: 1p2cfluxdata.hh 3838 2010-07-15 08:31:53Z bernd $
// $Id: 1p2cfluxvars.hh 3838 2010-07-15 08:31:53Z bernd $
/*****************************************************************************
* Copyright (C) 2009 by Karin Erbertseder *
* Copyright (C) 2009 by Andreas Lauser *
......@@ -41,16 +41,16 @@ namespace Dumux
* the intergration point, etc.
*/
template <class TypeTag>
class OnePTwoCFluxData
class OnePTwoCFluxVars
{
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem)) Problem;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(VertexData)) VertexData;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem)) Problem;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(SecondaryVars)) SecondaryVars;
typedef typename GridView::template Codim<0>::Entity Element;
typedef std::vector<VertexData> VertexDataArray;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(ElementSecondaryVars)) ElementSecondaryVars;
enum {
dim = GridView::dimension,
......@@ -58,24 +58,24 @@ class OnePTwoCFluxData
numPhases = GET_PROP_VALUE(TypeTag, PTAG(NumPhases))
};
typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition;
typedef Dune::FieldVector<Scalar, dim> LocalPosition;
typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition;
typedef Dune::FieldVector<Scalar, dim> LocalPosition;
typedef Dune::FieldMatrix<Scalar, dim, dim> Tensor;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(FVElementGeometry)) FVElementGeometry;
typedef typename FVElementGeometry::SubControlVolume SCV;
typedef typename FVElementGeometry::SubControlVolumeFace SCVFace;
typedef typename FVElementGeometry::SubControlVolume SCV;
typedef typename FVElementGeometry::SubControlVolumeFace SCVFace;
typedef Dune::FieldVector<Scalar, numPhases> PhasesVector;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(OnePTwoCIndices)) Indices;
public:
OnePTwoCFluxData(const Problem &problem,
OnePTwoCFluxVars(const Problem &problem,
const Element &element,
const FVElementGeometry &elemGeom,
int faceIdx,
const VertexDataArray &elemDat)
const ElementSecondaryVars &elemDat)
: fvElemGeom(elemGeom)
{
face = &fvElemGeom.subContVolFace[faceIdx];
......@@ -101,7 +101,7 @@ public:
private:
void calculateGradients_(const Problem &problem,
const Element &element,
const VertexDataArray &elemDat)
const ElementSecondaryVars &elemDat)
{
GlobalPosition tmp;
if (!problem.spatialParameters().useTwoPointGradient(element, face->i, face->j)) {
......@@ -166,7 +166,7 @@ private:
void calculateVelocities_(const Problem &problem,
const Element &element,
const VertexDataArray &elemDat)
const ElementSecondaryVars &elemDat)
{
Tensor K;
problem.spatialParameters().meanK(K,
......@@ -190,10 +190,10 @@ private:
void calculateDiffCoeffPM_(const Problem &problem,
const Element &element,
const VertexDataArray &elemDat)
const ElementSecondaryVars &elemDat)
{
const VertexData &vDat_i = elemDat[face->i];
const VertexData &vDat_j = elemDat[face->j];
const SecondaryVars &vDat_i = elemDat[face->i];
const SecondaryVars &vDat_j = elemDat[face->j];
// Diffusion coefficient in the porous medium
diffCoeffPM
......@@ -203,10 +203,10 @@ private:
void calculateDispersionTensor_(const Problem &problem,
const Element &element,
const VertexDataArray &elemDat)
const ElementSecondaryVars &elemDat)
{
const VertexData &vDat_i = elemDat[face->i];
const VertexData &vDat_j = elemDat[face->j];
const SecondaryVars &vDat_i = elemDat[face->i];
const SecondaryVars &vDat_j = elemDat[face->j];
//calculate dispersivity at the interface: [0]: alphaL = longitudinal disp. [m], [1] alphaT = transverse disp. [m]
Dune::FieldVector<Scalar, 2> dispersivity(0);
......
// $Id: 1p2cboxjacobian.hh 3784 2010-06-24 13:43:57Z bernd $
// $Id: 1p2clocalresidual.hh 3784 2010-06-24 13:43:57Z bernd $
/*****************************************************************************
* Copyright (C) 2009 by Karin Erbertseder *
* Copyright (C) 2009 by Andreas Lauser *
......@@ -18,13 +18,13 @@
#ifndef DUMUX_ONEP_TWOC_BOX_JACOBIAN_HH
#define DUMUX_ONEP_TWOC_BOX_JACOBIAN_HH
#include <dumux/boxmodels/boxscheme/boxscheme.hh>
#include <dumux/boxmodels/common/boxmodel.hh>
#include <dumux/boxmodels/1p2c/1p2cproperties.hh>
#include <dumux/boxmodels/1p2c/1p2cvertexdata.hh>
#include <dumux/boxmodels/1p2c/1p2celementdata.hh>
#include <dumux/boxmodels/1p2c/1p2cfluxdata.hh>
#include <dumux/boxmodels/1p2c/1p2csecondaryvars.hh>
#include <dumux/boxmodels/1p2c/1p2cfluxvars.hh>
#include <dune/common/collectivecommunication.hh>
#include <vector>
......@@ -37,11 +37,11 @@ namespace Dumux
* two-component model in the BOX scheme.
*/
template<class TypeTag>
class OnePTwoCBoxJacobian : public BoxJacobian<TypeTag>
class OnePTwoCLocalResidual : public BoxLocalResidual<TypeTag>
{
protected:
typedef OnePTwoCBoxJacobian<TypeTag> ThisType;
typedef BoxJacobian<TypeTag> ParentType;
typedef OnePTwoCLocalResidual<TypeTag> ThisType;
typedef BoxLocalResidual<TypeTag> ParentType;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem)) Problem;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(OnePTwoCIndices)) Indices;
......@@ -68,28 +68,23 @@ protected:
typedef Dune::FieldVector<Scalar, dim> LocalPosition;
typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition;
typedef typename GET_PROP(TypeTag, PTAG(SolutionTypes)) SolutionTypes;
typedef typename SolutionTypes::PrimaryVarVector PrimaryVarVector;
typedef typename SolutionTypes::SolutionVector SolutionVector;
typedef typename SolutionTypes::SolutionOnElement SolutionOnElement;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(PrimaryVarVector)) PrimaryVarVector;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(SolutionVector)) SolutionVector;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(ElementSolutionVector)) ElementSolutionVector;
typedef Dune::FieldVector<Scalar, numPhases> PhasesVector;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(VertexData)) VertexData;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(ElementData)) ElementData;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluxData)) FluxData;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(SecondaryVars)) SecondaryVars;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluxVars)) FluxVars;
typedef std::vector<VertexData> VertexDataArray;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(ElementSecondaryVars)) ElementSecondaryVars;
typedef Dune::FieldMatrix<Scalar, dim, dim> Tensor;
static const Scalar upwindAlpha = GET_PROP_VALUE(TypeTag, PTAG(UpwindAlpha));
public:
OnePTwoCBoxJacobian(Problem &problem)
: ParentType(problem)
{
};
/*!
* \brief Evaluate the amount all conservation quantites
* (e.g. phase mass) within a finite volume.
......@@ -101,8 +96,8 @@ public:
// used. The secondary variables are used accordingly. This
// is required to compute the derivative of the storage term
// using the implicit euler method.
const VertexDataArray &elemDat = usePrevSol ? this->prevElemDat_ : this->curElemDat_;
const VertexData &vertDat = elemDat[scvIdx];
const ElementSecondaryVars &elemDat = usePrevSol ? this->prevSecVars_() : this->curSecVars_();
const SecondaryVars &vertDat = elemDat[scvIdx];
// storage term of continuity equation
result[konti] = 0;
......@@ -117,17 +112,17 @@ public:
*/
void computeFlux(PrimaryVarVector &flux, int faceId) const
{
FluxData vars(this->problem_,
this->curElement_(),
this->curElementGeom_,
faceId,
this->curElemDat_);
FluxVars vars(this->problem_(),
this->elem_(),
this->fvElemGeom_(),
faceId,
this->curSecVars_());
flux = 0;
// data attached to upstream and the downstream vertices
// of the current phase
const VertexData &up = this->curElemDat_[vars.upstreamIdx];
const VertexData &dn = this->curElemDat_[vars.downstreamIdx];
const SecondaryVars &up = this->curSecVars_(vars.upstreamIdx);
const SecondaryVars &dn = this->curSecVars_(vars.downstreamIdx);
flux[konti] = vars.vDarcyNormal / vars.viscosityAtIP;
......@@ -162,61 +157,10 @@ public:
*/
void computeSource(PrimaryVarVector &q, int localVertexIdx)
{
this->problem_.source(q,
this->curElement_(),
this->curElementGeom_,
localVertexIdx);
}
/*!
* \brief Add the mass fraction of air in water to VTK output of
* the current timestep.
*/
template <class MultiWriter>
void addOutputVtkFields(MultiWriter &writer, const SolutionVector &globalSol)
{
typedef Dune::BlockVector<Dune::FieldVector<Scalar, 1> > ScalarField;
// create the required scalar fields
unsigned numVertices = this->gridView_.size(dim);
ScalarField *pressure = writer.template createField<Scalar, 1>(numVertices);
ScalarField *molefraction = writer.template createField<Scalar, 1>(numVertices);
unsigned numElements = this->gridView_.size(0);
ScalarField *rank = writer.template createField<Scalar, 1>(numElements);
SolutionOnElement tmpSol;
VertexDataArray elemDat;
ElementIterator elementIt = this->gridView_.template begin<0>();
const ElementIterator &endit = this->gridView_.template end<0>();
for (; elementIt != endit; ++elementIt)
{
int idx = this->problem_.model().elementMapper().map(*elementIt);
(*rank)[idx] = this->gridView_.comm().rank();
int numLocalVerts = elementIt->template count<dim>();
tmpSol.resize(numLocalVerts);
setCurrentElement(*elementIt);
this->restrictToElement(tmpSol, globalSol);
updateElementData_(elemDat, tmpSol, false);
for (int i = 0; i < numLocalVerts; ++i)
{
int globalIdx = this->problem_.model().vertexMapper().map(*elementIt, i, dim);
(*pressure)[globalIdx] = elemDat[i].pressure;
(*molefraction)[globalIdx] = elemDat[i].molefraction;
};
}
writer.addVertexData(pressure, "pressure");
writer.addVertexData(molefraction, "molefraction");
writer.addCellData(rank, "process rank");
this->problem_().source(q,
this->elem_(),
this->fvElemGeom_(),
localVertexIdx);
}
};
......
......@@ -15,11 +15,11 @@
* *
* This program is distributed WITHOUT ANY WARRANTY. *
*****************************************************************************/
#ifndef DUMUX_ONEP_TWOC_BOX_MODEL_HH
#define DUMUX_ONEP_TWOC_BOX_MODEL_HH
#ifndef DUMUX_ONEP_TWOC_MODEL_HH
#define DUMUX_ONEP_TWOC_MODEL_HH
#include "1p2cboxjacobian.hh"
#include "1p2cboxproblem.hh"
#include "1p2clocalresidual.hh"
#include "1p2cproblem.hh"
namespace Dumux
{
......@@ -67,39 +67,86 @@ namespace Dumux
*/
template<class TypeTag >
class OnePTwoCBoxModel : public BoxScheme<TypeTag, OnePTwoCBoxModel<TypeTag> >
class OnePTwoCBoxModel : public BoxModel<TypeTag>
{
typedef OnePTwoCBoxModel<TypeTag> ThisType;
typedef BoxScheme<TypeTag, ThisType> ParentType;
typedef OnePTwoCBoxModel<TypeTag> ThisType;
typedef BoxModel<TypeTag> ParentType;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem)) Problem;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(LocalJacobian)) LocalJacobian;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem)) Problem;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
typedef typename GridView::template Codim<0>::Entity Element;
typedef typename GridView::template Codim<0>::Iterator ElementIterator;
public:
OnePTwoCBoxModel(Problem &prob)
: ParentType(prob)
{
}
typedef typename GET_PROP_TYPE(TypeTag, PTAG(FVElementGeometry)) FVElementGeometry;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(SecondaryVars)) SecondaryVars;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(ElementSecondaryVars)) ElementSecondaryVars;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(ElementBoundaryTypes)) ElementBoundaryTypes;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(VertexMapper)) VertexMapper;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(ElementMapper)) ElementMapper;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(SolutionVector)) SolutionVector;
/*!
* \brief Add the mass fraction of air in water to VTK output of
* the current timestep.
*/
template <class MultiWriter>
void addOutputVtkFields(MultiWriter &writer)
{
this->localJacobian().addOutputVtkFields(writer, this->curSol());
}
enum {
dim = GridView::dimension,
};
public:
/*!
* \brief Calculate the masses in the system for
* the current timestep.
* \brief Append all quantities of interest which can be derived
* from the solution of the current time step to the VTK
* writer.
*/
void calculateMass(Dune::FieldVector<Scalar, 2> &mass)
template<class MultiWriter>
void addOutputVtkFields(const SolutionVector &sol,
MultiWriter &writer)
{
this->localJacobian().calculateMass(this->curSol(), mass);
typedef Dune::BlockVector<Dune::FieldVector<Scalar, 1> > ScalarField;
// create the required scalar fields
unsigned numVertices = this->problem_().gridView().size(dim);
ScalarField *pressure = writer.template createField<Scalar, 1>(numVertices);
ScalarField *molefraction = writer.template createField<Scalar, 1>(numVertices);
unsigned numElements = this->gridView_().size(0);
ScalarField *rank =
writer.template createField<Scalar, 1> (numElements);
FVElementGeometry fvElemGeom;
SecondaryVars secVars;
ElementBoundaryTypes elemBcTypes;
ElementIterator elemIt = this->gridView_().template begin<0>();
ElementIterator elemEndIt = this->gridView_().template end<0>();
for (; elemIt != elemEndIt; ++elemIt)
{
int idx = this->problem_().model().elementMapper().map(*elemIt);
(*rank)[idx] = this->gridView_().comm().rank();
fvElemGeom.update(this->gridView_(), *elemIt);
elemBcTypes.update(this->problem_(), *elemIt, fvElemGeom);
int numVerts = elemIt->template count<dim> ();
for (int i = 0; i < numVerts; ++i)
{
int globalIdx = this->vertexMapper().map(*elemIt, i, dim);
secVars.update(sol[globalIdx],
this->problem_(),
*elemIt,
fvElemGeom,
i,
false);
(*pressure)[globalIdx] = secVars.pressure;
(*molefraction)[globalIdx] = secVars.molefraction;
};
}
writer.addVertexData(pressure, "pressure");
writer.addVertexData(molefraction, "molefraction");
writer.addCellData(rank, "process rank");
}
};
}
......
......@@ -19,27 +19,29 @@
* \brief Base class for all problems which use the single-phase,
* two-component box model
*/
#ifndef DUMUX_1P2C_BOX_PROBLEM_HH
#define DUMUX_1P2C_BOX_PROBLEM_HH
#ifndef DUMUX_1P2C_PROBLEM_HH
#define DUMUX_1P2C_PROBLEM_HH
#include <dumux/boxmodels/boxscheme/boxproblem.hh>
#include <dumux/boxmodels/common/boxproblem.hh>
namespace Dumux
{
/*!
* \ingroup OnePTwoCProblems
* \brief Base class for all problems which use the single-phase, two-component box model
* \brief Base class for all problems which use the single-phase, two-component box model
*
* \todo Please doc me more!
*/
template<class TypeTag, class Implementation>
class OnePTwoCBoxProblem : public BoxProblem<TypeTag, Implementation>
template<class TypeTag>
class OnePTwoCBoxProblem : public BoxProblem<TypeTag>
{
typedef BoxProblem<TypeTag, Implementation> ParentType;
typedef BoxProblem<TypeTag> ParentType;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Model)) Implementation;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
typedef typename GridView::Grid Grid;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
typedef typename GridView::Grid Grid;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
typedef typename GET_PROP_TYPE(TypeTag, PTAG(TimeManager)) TimeManager;
// material properties
typedef typename GET_PROP_TYPE(TypeTag, PTAG(SpatialParameters)) SpatialParameters;
......@@ -49,11 +51,11 @@ class OnePTwoCBoxProblem : public BoxProblem<TypeTag, Implementation>
dimWorld = Grid::dimensionworld
};
typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition;
typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition;
public:
OnePTwoCBoxProblem(const GridView &gridView)
: ParentType(gridView),
OnePTwoCBoxProblem(TimeManager &timeManager, const GridView &gridView)
: ParentType(timeManager, gridView),
gravity_(0),
spatialParams_(gridView)
{
......@@ -106,7 +108,7 @@ private:
const Implementation *asImp_() const
{ return static_cast<const Implementation *>(this); }
GlobalPosition gravity_;
GlobalPosition gravity_;
// soil properties
SpatialParameters spatialParams_;
......
......@@ -25,7 +25,7 @@
#ifndef DUMUX_1P2C_PROPERTIES_HH
#define DUMUX_1P2C_PROPERTIES_HH
#include<dumux/boxmodels/boxscheme/boxproperties.hh>
#include<dumux/boxmodels/common/boxproperties.hh>
namespace Dumux
{
......@@ -36,16 +36,13 @@ template<class TypeTag>
class OnePTwoCBoxModel;
template<class TypeTag>
class OnePTwoCBoxJacobian;
class OnePTwoCLocalResidual;
template <class TypeTag>
class OnePTwoCVertexData;
class OnePTwoCSecondaryVars;
template <class TypeTag>
class OnePTwoCElementData;
template <class TypeTag>
class OnePTwoCFluxData;
class OnePTwoCFluxVars;
/*!
* \brief The indices for the isothermal single-phase, two-component model.
......@@ -65,7 +62,7 @@ namespace Properties
//////////////////////////////////////////////////////////////////
//! The type tag for the isothermal single-phase, two-component problems
NEW_TYPE_TAG(BoxOnePTwoC, INHERITS_FROM(BoxScheme));
NEW_TYPE_TAG(BoxOnePTwoC, INHERITS_FROM(BoxModel));
//////////////////////////////////////////////////////////////////
// Property tags
......@@ -89,20 +86,20 @@ SET_INT_PROP(BoxOnePTwoC, NumComponents, 2); //!< The number of components in th
//! Use the 1p2c local jacobian operator for the 1p2c model
SET_TYPE_PROP(BoxOnePTwoC,
LocalJacobian,
OnePTwoCBoxJacobian<TypeTag>);
LocalResidual,
OnePTwoCLocalResidual<TypeTag>);
//! the Model property
SET_TYPE_PROP(BoxOnePTwoC, Model, OnePTwoCBoxModel<TypeTag>);
//! the VertexData property
SET_TYPE_PROP(BoxOnePTwoC, VertexData, OnePTwoCVertexData<TypeTag>);
//! the SecondaryVars property
SET_TYPE_PROP(BoxOnePTwoC, SecondaryVars, OnePTwoCSecondaryVars<TypeTag>);
//! the ElementData property
SET_TYPE_PROP(BoxOnePTwoC, ElementData, OnePTwoCElementData<TypeTag>);
//! the FluxData property
SET_TYPE_PROP(BoxOnePTwoC, FluxData, OnePTwoCFluxData<TypeTag>);
//! the FluxVars property
SET_TYPE_PROP(BoxOnePTwoC, FluxVars, OnePTwoCFluxVars<TypeTag>);
//! the default upwind factor. Default 1.0, i.e. fully upwind...
SET_SCALAR_PROP(BoxOnePTwoC, UpwindAlpha, 1.0);
......