Commit 79855b85 authored by Chris Cantwell's avatar Chris Cantwell

Merge branch 'master' into ticket/91-remove_ref_cnt_from_beginning_of_array

parents fb8439ed 6bdc3afa
......@@ -76,6 +76,8 @@ v5.0.0
- Fixed interppoints module (!760)
- Fix OutputTecplot in 2DH1D (!818)
- Move StreamFunction utility to a FieldConvert module (!809)
- Allow using expansion from session file with new `--useSessionExpansion`
command line option (!842)
- Extend wss module to compressible flows (!810)
- Allow explicitly setting bool options of FieldConvert modules as false (!811)
- Enable output to multiple files (!844)
......
......@@ -1518,6 +1518,91 @@ This leads to small grid spacing required to resolve all physical scales associa
Schmidt number = kinematic viscosity/diffusion coefficient). Hence, small diffusion coefficient might lead to spurious
oscillations if the mesh spacing is not small enough.
\section{Imposing a constant flowrate}
In some simulations, it may be desirable to drive the flow by fixing a value of
the volumetric flux through a boundary surface. A common use case for this is a
channel flow, where the inflow and outflow are treated using periodic boundary
conditions, requiring a use of either a body force or a flowrate condition to
drive the flow. Often, the use of a body force is sufficient, but in some cases
(e.g. transitional or turbulent simulations), it may be difficult to determine
the correct body force to use in order to attain a specific Reynolds number. The
incompressible solver supports the use of an alternative forcing whereby the
volumetric flux,
%
\[
Q(\mathbf{u}) = \frac{1}{\mu(R)} \int_R \mathbf{u}\cdot d\mathbf{s},
\]
%
through a user-defined surface $R$ of area $\mu(R)$ is kept constant. This is
supported for standard two- and three-dimensional simulations, where $R$ is a
boundary region, as well as three-dimensional homogeneous simulations. In the
latter case, the forcing can be imposed either in the homogeneous direction (in
the $x-y$ plane) or perpendicular to it (in the $z$ direction).
The flowrate correction works by taking each timestep's velocity field
$\mathbf{u}^{n}$, and computing a scalar $\alpha$ so that the corrected flow
%
\[
\tilde{\mathbf{u}}^n = \mathbf{u}^n + \alpha\mathbf{u}_s
\]
has the desired flowrate. Here, $\mathbf{u}_s$ is a linear Stokes solution that
is calculated once at the start of the simulation, so that the condition is not
expensive to implement.
To enable flowrate corrections, three things must be defined in the session
file:
\begin{itemize}
\item The \inltt{Flowrate} parameter in the parameters section, which defines
the desired value of the volumetric flux $Q(\mathbf{u})$ through the reference
region. To set $Q = 1$ we would therefore define:
\begin{lstlisting}[style=XMLStyle]
<PARAMETERS>
<P> Flowrate = 1.0 </P>
</PARAMETERS>
\end{lstlisting}
\item A boundary condition must be tagged with the \inltt{Flowrate}
user-defined type to define the reference region $R$. For example, a 2D
channel flow with periodic boundary conditions might use the following
arrangement:
\begin{lstlisting}[style=XMLStyle]
<BOUNDARYCONDITIONS>
<REGION REF="0">
<P VAR="u" VALUE="[1]" USERDEFINEDTYPE="Flowrate" />
<P VAR="v" VALUE="[1]" USERDEFINEDTYPE="Flowrate" />
<P VAR="p" VALUE="[1]" USERDEFINEDTYPE="Flowrate" />
</REGION>
<REGION REF="1">
<P VAR="u" VALUE="[0]" />
<P VAR="v" VALUE="[0]" />
<P VAR="p" VALUE="[0]" />
</REGION>
</BOUNDARYCONDITIONS>
\end{lstlisting}
\item a \inltt{FlowrateForce} function with components \inltt{ForceX},
\inltt{ForceY} and \inltt{ForceZ} that defines the direction in which the
forcing will be applied. This should be a unit vector (i.e. of magnitude 1)
and constant (i.e. not dependent on $x$, $y$, $z$ or $t$). As an example, to
impose a force in the $x$-direction we specify:
\begin{lstlisting}[style=XMLStyle]
<FUNCTION NAME="FlowrateForce">
<E VAR="ForceX" VALUE="1.0" />
<E VAR="ForceY" VALUE="0.0" />
<E VAR="ForceZ" VALUE="0.0" />
</FUNCTION>
\end{lstlisting}
\end{itemize}
Note that in homogeneous simulations where the forcing is in the $z$-direction,
only the \inltt{Flowrate} parameter is required and the reference area $R$ is
taken to be the homogeneous plane.
Optionally, the \inltt{IO\_FlowSteps} parameter can be defined. If set to a
non-zero integer, this produces a file \inltt{session.prs} which records the
value of $\alpha$ used in the flowrate correction, every \inltt{IO\_FlowSteps}
steps.
\section{Examples}
\subsection{Kovasznay Flow 2D}
......
......@@ -78,11 +78,12 @@ void ProcessCreateExp::Process(po::variables_map &vm)
// check to see if fld file defined so can use in
// expansion defintion if required
bool fldfilegiven = (m_f->m_fielddef.size() != 0);
bool expFromFld = fldfilegiven && !vm.count("useSessionExpansion");
// load fielddef header if fld file is defined. This gives
// precedence to Homogeneous definition in fld file
m_f->m_numHomogeneousDir = 0;
if (fldfilegiven)
if (expFromFld)
{
m_f->m_numHomogeneousDir = m_f->m_fielddef[0]->m_numHomogeneousDir;
......@@ -169,7 +170,7 @@ void ProcessCreateExp::Process(po::variables_map &vm)
}
m_f->m_exp[0] = m_f->SetUpFirstExpList(m_f->m_numHomogeneousDir,
fldfilegiven);
expFromFld);
if (m_f->m_verbose)
{
......
......@@ -148,6 +148,12 @@ namespace Nektar
v_DGDeriv(dir, inarray, EdgeExp, coeffs, outarray);
}
NekDouble Expansion::VectorFlux(
const Array<OneD, Array<OneD, NekDouble > > &vec)
{
return v_VectorFlux(vec);
}
DNekScalMatSharedPtr Expansion::GetLocMatrix(const StdRegions::MatrixType mtype,
const StdRegions::ConstFactorMap &factors,
const StdRegions::VarCoeffMap &varcoeffs)
......@@ -362,6 +368,13 @@ namespace Nektar
{
NEKERROR(ErrorUtil::efatal, "This function is only valid for LocalRegions");
}
NekDouble Expansion::v_VectorFlux(
const Array<OneD, Array<OneD, NekDouble > > &vec)
{
NEKERROR(ErrorUtil::efatal, "This function is only valid for LocalRegions");
return 0.0;
}
} //end of namespace
} //end of namespace
......@@ -121,6 +121,8 @@ namespace Nektar
Array<OneD, ExpansionSharedPtr> &EdgeExp,
Array<OneD, Array<OneD, NekDouble> > &coeffs,
Array<OneD, NekDouble> &outarray);
LOCAL_REGIONS_EXPORT NekDouble VectorFlux(
const Array<OneD, Array<OneD, NekDouble > > &vec);
protected:
SpatialDomains::GeometrySharedPtr m_geom;
......@@ -176,6 +178,8 @@ namespace Nektar
Array<OneD, ExpansionSharedPtr> &EdgeExp,
Array<OneD, Array<OneD, NekDouble> > &coeffs,
Array<OneD, NekDouble> &outarray);
virtual NekDouble v_VectorFlux(
const Array<OneD, Array<OneD, NekDouble > > &vec);
private:
......
......@@ -34,6 +34,7 @@
///////////////////////////////////////////////////////////////////////////////
#include <LocalRegions/Expansion1D.h>
#include <LocalRegions/Expansion2D.h>
using namespace std;
......@@ -412,6 +413,21 @@ namespace Nektar
Vmath::Zero(GetNcoeffs(), coeffs, 1);
coeffs[map] = primCoeffs[0];
}
NekDouble Expansion1D::v_VectorFlux(
const Array<OneD, Array<OneD, NekDouble> > &vec)
{
const Array<OneD, const Array<OneD, NekDouble> >
&normals = GetLeftAdjacentElementExp()->
GetEdgeNormal(GetLeftAdjacentElementEdge());
int nq = m_base[0]->GetNumPoints();
Array<OneD, NekDouble > Fn(nq);
Vmath::Vmul (nq, &vec[0][0], 1, &normals[0][0], 1, &Fn[0], 1);
Vmath::Vvtvp(nq, &vec[1][0], 1, &normals[1][0], 1, &Fn[0], 1, &Fn[0], 1);
return Integral(Fn);
}
} //end of namespace
} //end of namespace
......@@ -109,10 +109,13 @@ namespace Nektar
const Array<OneD, const NekDouble > &primCoeffs,
Array<OneD, NekDouble> &coeffs);
virtual NekDouble v_VectorFlux(
const Array<OneD, Array<OneD, NekDouble> > &vec);
virtual void v_NegateVertexNormal (const int vertex);
virtual bool v_VertexNormalNegated(const int vertex);
private:
Expansion2DWeakPtr m_elementLeft;
Expansion2DWeakPtr m_elementRight;
......
......@@ -34,6 +34,7 @@
///////////////////////////////////////////////////////////////////////////////
#include <LocalRegions/Expansion2D.h>
#include <LocalRegions/Expansion1D.h>
#include <LocalRegions/Expansion3D.h>
#include <SpatialDomains/Geometry.h>
#include <SpatialDomains/Geometry2D.h>
#include <LibUtilities/Foundations/InterpCoeff.h>
......@@ -1430,5 +1431,21 @@ namespace Nektar
break;
}
}
NekDouble Expansion2D::v_VectorFlux(
const Array<OneD, Array<OneD, NekDouble> > &vec)
{
const Array<OneD, const Array<OneD, NekDouble> >
&normals = GetLeftAdjacentElementExp()->
GetFaceNormal(GetLeftAdjacentElementFace());
int nq = GetTotPoints();
Array<OneD, NekDouble > Fn(nq);
Vmath::Vmul (nq, &vec[0][0], 1, &normals[0][0], 1, &Fn[0], 1);
Vmath::Vvtvp(nq, &vec[1][0], 1, &normals[1][0], 1, &Fn[0], 1, &Fn[0], 1);
Vmath::Vvtvp(nq, &vec[2][0], 1, &normals[2][0], 1, &Fn[0], 1, &Fn[0], 1);
return StdExpansion::Integral(Fn);
}
}
}
......@@ -194,6 +194,8 @@ namespace Nektar
const int edge) const;
const StdRegions::NormalVector &v_GetSurfaceNormal(
const int id) const;
virtual NekDouble v_VectorFlux(
const Array<OneD, Array<OneD, NekDouble > > &vec);
};
inline Expansion1DSharedPtr Expansion2D::GetEdgeExp(
......
......@@ -105,8 +105,7 @@ namespace Nektar
ival = StdQuadExp::v_Integral(tmp);
return ival;
}
void QuadExp::v_PhysDeriv(
const Array<OneD, const NekDouble> & inarray,
Array<OneD,NekDouble> &out_d0,
......
......@@ -72,7 +72,7 @@ namespace Nektar
//-------------------------------
LOCAL_REGIONS_EXPORT virtual NekDouble v_Integral(
const Array<OneD, const NekDouble> &inarray);
//----------------------------
// Differentiation Methods
//----------------------------
......
......@@ -137,7 +137,7 @@ namespace Nektar
//ival = StdSegExp::Integral(tmp);
return ival;
}
//-----------------------------
// Differentiation Methods
//-----------------------------
......
......@@ -68,7 +68,7 @@ namespace Nektar
//----------------------------
LOCAL_REGIONS_EXPORT virtual NekDouble v_Integral(
const Array<OneD, const NekDouble>& inarray);
//-----------------------------
// Differentiation Methods
//-----------------------------
......
......@@ -102,7 +102,6 @@ namespace Nektar
ival = StdTriExp::v_Integral(tmp);
return ival;
}
void TriExp::v_PhysDeriv(const Array<OneD, const NekDouble> & inarray,
Array<OneD,NekDouble> &out_d0,
......
......@@ -72,7 +72,7 @@ namespace Nektar
//-------------------------------
LOCAL_REGIONS_EXPORT virtual NekDouble v_Integral(
const Array<OneD, const NekDouble> &inarray);
//----------------------------
// Differentiation Methods
//----------------------------
......
......@@ -110,6 +110,12 @@ namespace Nektar
for(i = 0; i < bndCondExp.num_elements(); i++)
{
if (bndConditions[0][i]->GetBoundaryConditionType() ==
SpatialDomains::ePeriodic)
{
continue;
}
// Check to see if any value on boundary has Dirichlet value.
cnt = 0;
for(k = 0; k < bndConditions.num_elements(); ++k)
......@@ -1786,6 +1792,12 @@ namespace Nektar
int offset = 0;
for(i = 0; i < bndCondExp.num_elements(); i++)
{
if (bndConditions[i]->GetBoundaryConditionType() ==
SpatialDomains::ePeriodic)
{
continue;
}
set<int> foundExtraVerts, foundExtraEdges;
for(j = 0; j < bndCondExp[i]->GetNumElmts(); j++)
{
......
......@@ -139,6 +139,11 @@ namespace Nektar
cnt = 0;
for(i = 0; i < nbnd; ++i)
{
if (bndCond[i]->GetBoundaryConditionType() ==
SpatialDomains::ePeriodic)
{
continue;
}
cnt += bndCondExp[i]->GetExpSize();
}
......@@ -147,7 +152,6 @@ namespace Nektar
m_numLocalDirBndCoeffs = 0;
m_numDirichletBndPhys = 0;
cnt = 0;
for(i = 0; i < bndCondExp.num_elements(); ++i)
{
for(j = 0; j < bndCondExp[i]->GetExpSize(); ++j)
......@@ -164,8 +168,6 @@ namespace Nektar
dirTrace.insert(id);
}
}
cnt += j;
}
// Set up integer mapping array and sign change for each degree of
......@@ -445,6 +447,11 @@ namespace Nektar
cnt = 0;
for(i = 0; i < nbnd; ++i)
{
if (bndCond[i]->GetBoundaryConditionType() ==
SpatialDomains::ePeriodic)
{
continue;
}
cnt += bndCondExp[i]->GetNcoeffs();
}
......@@ -454,6 +461,12 @@ namespace Nektar
int nbndexp = 0, bndOffset, bndTotal = 0;
for(cnt = i = 0; i < nbnd; ++i)
{
if (bndCond[i]->GetBoundaryConditionType() ==
SpatialDomains::ePeriodic)
{
continue;
}
for(j = 0; j < bndCondExp[i]->GetExpSize(); ++j)
{
bndExp = bndCondExp[i]->GetExp(j);
......@@ -483,6 +496,12 @@ namespace Nektar
m_bndCondTraceToGlobalTraceMap = Array<OneD, int>(nbndexp);
for(i = 0; i < bndCondExp.num_elements(); ++i)
{
if (bndCond[i]->GetBoundaryConditionType() ==
SpatialDomains::ePeriodic)
{
continue;
}
for(j = 0; j < bndCondExp[i]->GetExpSize(); ++j)
{
bndExp = bndCondExp[i]->GetExp(j);
......
......@@ -565,7 +565,10 @@ namespace Nektar
int i;
for(i = 0; i < m_bndCondExpansions.num_elements(); ++i)
{
if(m_bndConditions[i]->GetBoundaryConditionType() != SpatialDomains::eDirichlet)
if(m_bndConditions[i]->GetBoundaryConditionType() ==
SpatialDomains::eNeumann ||
m_bndConditions[i]->GetBoundaryConditionType() ==
SpatialDomains::eRobin)
{
wsp[m_locToGloMap->GetBndCondCoeffsToGlobalCoeffsMap(i)]
+= m_bndCondExpansions[i]->GetCoeff(0);
......
......@@ -683,7 +683,8 @@ namespace Nektar
tmp[bndMap[bndcnt++]] = sign * coeffs[j];
}
}
else
else if(m_bndConditions[i]->GetBoundaryConditionType() !=
SpatialDomains::ePeriodic)
{
bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
}
......@@ -901,10 +902,11 @@ namespace Nektar
int i,j;
int bndcnt=0;
Array<OneD, NekDouble> gamma(contNcoeffs, 0.0);
for(i = 0; i < m_bndCondExpansions.num_elements(); ++i)
{
if(m_bndConditions[i]->GetBoundaryConditionType() != SpatialDomains::eDirichlet)
if(m_bndConditions[i]->GetBoundaryConditionType() == SpatialDomains::eNeumann ||
m_bndConditions[i]->GetBoundaryConditionType() == SpatialDomains::eRobin)
{
for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
{
......@@ -913,7 +915,7 @@ namespace Nektar
+= (m_bndCondExpansions[i]->GetCoeffs())[j];
}
}
else
else if (m_bndConditions[i]->GetBoundaryConditionType() != SpatialDomains::ePeriodic)
{
bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
}
......
......@@ -483,7 +483,8 @@ namespace Nektar
}
}
}
else
else if (m_bndConditions[i]->GetBoundaryConditionType() !=
SpatialDomains::ePeriodic)
{
bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
}
......@@ -607,7 +608,8 @@ namespace Nektar
Array<OneD, NekDouble> gamma(contNcoeffs, 0.0);
for(i = 0; i < m_bndCondExpansions.num_elements(); ++i)
{
if(m_bndConditions[i]->GetBoundaryConditionType() != SpatialDomains::eDirichlet)
if(m_bndConditions[i]->GetBoundaryConditionType() == SpatialDomains::eNeumann ||
m_bndConditions[i]->GetBoundaryConditionType() == SpatialDomains::eRobin)
{
for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); j++)
{
......@@ -616,7 +618,7 @@ namespace Nektar
sign * (m_bndCondExpansions[i]->GetCoeffs())[j];
}
}
else
else if (m_bndConditions[i]->GetBoundaryConditionType() != SpatialDomains::ePeriodic)
{
bndcnt += m_bndCondExpansions[i]->GetNcoeffs();
}
......
......@@ -226,10 +226,6 @@ namespace Nektar
m_traceMap->GetBndCondTraceToGlobalTraceMap(cnt+e));
}
}
else
{
ASSERTL0(false,"Periodic verts need setting up");
}
cnt += m_bndCondExpansions[n]->GetExpSize();
}
......@@ -556,19 +552,15 @@ namespace Nektar
{
const SpatialDomains::BoundaryConditionShPtr boundaryCondition =
GetBoundaryCondition(bconditions, it.first, variable);
if (boundaryCondition->GetBoundaryConditionType() !=
SpatialDomains::ePeriodic )
SpatialDomains::BoundaryRegion::iterator bregionIt;
for (auto &bregionIt : *(it.second))
{
for (auto &bregionIt : *it.second)
{
cnt += bregionIt.second->m_geomVec.size();
}
cnt += bregionIt.second->m_geomVec.size();
}
}
m_bndCondExpansions
= Array<OneD,MultiRegions::ExpListSharedPtr>(cnt);
m_bndConditions
= Array<OneD,SpatialDomains::BoundaryConditionShPtr>(cnt);
......@@ -727,28 +719,24 @@ namespace Nektar
{
locBCond = GetBoundaryCondition(bconditions, it.first, variable);
if (locBCond->GetBoundaryConditionType() !=
SpatialDomains::ePeriodic)
for (auto &bregionIt : *(it.second))
{
for (auto &bregionIt : *it.second)
for (k = 0; k < bregionIt.second->m_geomVec.size(); k++)
{
for (k = 0; k < bregionIt.second->m_geomVec.size(); k++)
if((vert = std::dynamic_pointer_cast
<SpatialDomains::PointGeom>(
bregionIt.second->m_geomVec[k])))
{
if((vert = std::dynamic_pointer_cast
<SpatialDomains::PointGeom>(
bregionIt.second->m_geomVec[k])))
{
locPointExp
= MemoryManager<MultiRegions::ExpList0D>
::AllocateSharedPtr(vert);
bndCondExpansions[cnt] = locPointExp;
bndConditions[cnt++] = locBCond;
}
else
{
ASSERTL0(false,
"dynamic cast to a vertex failed");
}
locPointExp
= MemoryManager<MultiRegions::ExpList0D>
::AllocateSharedPtr(vert);
bndCondExpansions[cnt] = locPointExp;
bndConditions[cnt++] = locBCond;
}
else
{
ASSERTL0(false,
"dynamic cast to a vertex failed");
}
}
}
......@@ -1263,7 +1251,10 @@ namespace Nektar
id = m_traceMap->GetBndCondCoeffsToGlobalCoeffsMap(i);
BndSol[id] = m_bndCondExpansions[i]->GetCoeff(0);
}
else
else if (m_bndConditions[i]->GetBoundaryConditionType() ==
SpatialDomains::eNeumann ||
m_bndConditions[i]->GetBoundaryConditionType() ==
SpatialDomains::eRobin)
{
id = m_traceMap->GetBndCondCoeffsToGlobalCoeffsMap(i);
BndRhs[id] += m_bndCondExpansions[i]->GetCoeff(0);
......@@ -1360,6 +1351,11 @@ namespace Nektar
->m_robinFunction).Evaluate(x0[0],x1[0],x2[0],time));
}
else if (m_bndConditions[i]->GetBoundaryConditionType()
== SpatialDomains::ePeriodic)
{
continue;
}
else if (m_bndConditions[i]->GetBoundaryConditionType()
== SpatialDomains::eNotDefined)
{
......
......@@ -471,8 +471,8 @@ namespace Nektar
m_boundaryEdges.insert(
m_traceMap->GetBndCondTraceToGlobalTraceMap(cnt+e));
}
cnt += m_bndCondExpansions[n]->GetExpSize();
}
cnt += m_bndCondExpansions[n]->GetExpSize();
}
// Set up information for periodic boundary conditions.
......@@ -634,63 +634,44 @@ namespace Nektar
const SpatialDomains::BoundaryConditions &bcs,
const std::string &variable,
const bool DeclareCoeffPhysArrays)
{
{
int cnt = 0;
SpatialDomains::BoundaryConditionShPtr bc;
MultiRegions::ExpList1DSharedPtr locExpList;
const SpatialDomains::BoundaryRegionCollection &bregions =
const SpatialDomains::BoundaryRegionCollection &bregions =
bcs.GetBoundaryRegions();
const SpatialDomains::BoundaryConditionCollection &bconditions =
const SpatialDomains::BoundaryConditionCollection &bconditions =
bcs.GetBoundaryConditions();
// count the number of non-periodic boundary regions
for (auto &it : bregions)
{
bc = GetBoundaryCondition(bconditions, it.first, variable);
if (bc->GetBoundaryConditionType() != SpatialDomains::ePeriodic)
{
cnt++;
}
}
m_bndCondExpansions =
Array<OneD, MultiRegions::ExpListSharedPtr>(cnt);
m_bndConditions =
Array<OneD, SpatialDomains::BoundaryConditionShPtr>(cnt);
cnt = 0;
m_bndCondExpansions =
Array<OneD, MultiRegions::ExpListSharedPtr>(bregions.size());
m_bndConditions =
Array<OneD, SpatialDomains::BoundaryConditionShPtr>(bregions.size());
// list non-periodic boundaries
for (auto &it : bregions)
{
bc = GetBoundaryCondition(bconditions, it.first, variable);
if (bc->GetBoundaryConditionType() != SpatialDomains::ePeriodic)
{
locExpList = MemoryManager<MultiRegions::ExpList1D>
::AllocateSharedPtr(m_session, *it.second, graph2D,
DeclareCoeffPhysArrays, variable);
locExpList = MemoryManager<MultiRegions::ExpList1D>
::AllocateSharedPtr(m_session, *(it.second), graph2D,
DeclareCoeffPhysArrays, variable,
bc->GetComm());
m_bndCondExpansions[cnt] = locExpList;
m_bndConditions[cnt] = bc;
m_bndCondExpansions[cnt] = locExpList;
m_bndConditions[cnt] = bc;
std::string type = m_bndConditions[cnt]->GetUserDefined();
// Set up normals on non-Dirichlet boundary
// conditions. Second two conditions ideally
// should be in local solver setup (when made into factory)
if((bc->GetBoundaryConditionType() !=
SpatialDomains::eDirichlet)||
boost::iequals(type,"I") ||
boost::iequals(type,"CalcBC"))
{
SetUpPhysNormals();
}
std::string type = m_bndConditions[cnt]->GetUserDefined();
cnt++;
// Set up normals on non-Dirichlet boundary conditions. Second
// two conditions ideally should be in local solver setup (when
// made into factory)
if(bc->GetBoundaryConditionType() != SpatialDomains::eDirichlet
|| boost::iequals(type,"I") || boost::iequals(type,"CalcBC"))
{
SetUpPhysNormals();
}
cnt++;
}
}
......@@ -1956,7 +1937,7 @@ namespace Nektar
cnt = 0;
for(i = 0; i < m_bndCondExpansions.num_elements(); ++i)
{
if(m_bndConditions[i]->GetBoundaryConditionType() ==
if(m_bndConditions[i]->GetBoundaryConditionType() ==
SpatialDomains::eDirichlet)
{
for(j = 0; j < (m_bndCondExpansions[i])->GetNcoeffs(); ++j)
......@@ -1965,7 +1946,10 @@ namespace Nektar
BndSol[id] = m_bndCondExpansions[i]->GetCoeffs()[j];
}
}