Commit 6cb5ebd5 authored by Giacomo Castiglioni's avatar Giacomo Castiglioni Committed by Dave Moxey

Fix/ldg penalty

parent 36b04d7e
......@@ -14,3 +14,6 @@ ThirdParty
*.pdf
# Kdevelop project files
*.kdev4
# Sublime project files
*.sublime-project
*.sublime-workspace
......@@ -132,6 +132,7 @@ v5.0.0
- Fix surface extraction, added regression test (!994)
- Fix 2D meshing running out of memory due to missing else (!1012)
- Add support for .msh v4.1 file input (!1054)
- Added penalty term to LDG and LDGNS, slight generalization of LDG (!1080)
**FieldConvert**:
- Add input module for Semtex field files (!777)
......
......@@ -116,7 +116,7 @@ The solver info are listed below:
\end{itemize}
\item \textbf{DiffusionType}:
\begin{itemize}
\item \inltt{LDG}.
\item \inltt{LDG} (The penalty term is proportional to an optional parameter \inltt{LDGc11} which is by default set to one; proportionality to polynomial order can be manually imposed by setting the parameter \inltt{LDGc11} equal to $p^2$).
\end{itemize}
\item \textbf{UpwindType}:
\begin{itemize}
......
......@@ -272,7 +272,7 @@ Note that only \inltt{WeakDG} is fully supported, the other operators work only
\item \inltt{DiffusionType} is the diffusion operator we want to use
for the Navier-Stokes equations:
\begin{itemize}
\item \inltt{LDGNS} (LDG);
\item \inltt{LDGNS} (LDG with primitive variables. The penalty term is inversely proportional to the element size, proportional to the local viscosity for the momentum equations and to the thermal conductivity for the energy equation, and proportional to an optional parameter \inltt{LDGNSc11} which is by default set to one; proportionality to polynomial order can be manually imposed by setting the parameter \inltt{LDGNSc11} equal to $p^2$);
\item \inltt{LFRDGNS} (Flux-Reconstruction recovering nodal DG scheme);
\item \inltt{LFRSDNS} (Flux-Reconstruction recovering a spectral difference (SD) scheme);
\item \inltt{LFRHUNS} (Flux-Reconstruction recovering Huynh (G2) scheme);
......
......@@ -52,7 +52,7 @@ namespace Nektar
}
void Diffusion::Diffuse(
const int nConvectiveFields,
const std::size_t nConvectiveFields,
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
......
......@@ -52,11 +52,10 @@ namespace Nektar
namespace SolverUtils
{
typedef std::function<void (
const int,
const int,
const Array<OneD, Array<OneD, NekDouble> >&,
Array<OneD, Array<OneD, NekDouble> >&,
Array<OneD, Array<OneD, NekDouble> >&)> DiffusionFluxVecCB;
const Array<OneD, Array<OneD, NekDouble> > &,
const Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&)>
DiffusionFluxVecCB;
typedef std::function<void (
const Array<OneD, Array<OneD, NekDouble> >&,
......@@ -64,6 +63,12 @@ namespace Nektar
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&)>
DiffusionFluxVecCBNS;
typedef std::function<void (
const Array<OneD, Array<OneD, NekDouble> >&,
const Array<OneD, Array<OneD, NekDouble> >&,
Array<OneD, Array<OneD, NekDouble> >&)>
DiffusionFluxPenaltyNS;
typedef std::function<void (
const Array<OneD, Array<OneD, NekDouble> >&,
Array<OneD, NekDouble >&)>
......@@ -81,7 +86,7 @@ namespace Nektar
Array<OneD, MultiRegions::ExpListSharedPtr> pFields);
SOLVER_UTILS_EXPORT void Diffuse(
const int nConvectiveFields,
const std::size_t nConvectiveFields,
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
......@@ -97,11 +102,10 @@ namespace Nektar
{
m_fluxVector = std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
std::placeholders::_3, std::placeholders::_4,
std::placeholders::_5);
std::placeholders::_3);
}
void SetFluxVectorVec(DiffusionFluxVecCB fluxVector)
void SetFluxVector(DiffusionFluxVecCB fluxVector)
{
m_fluxVector = fluxVector;
}
......@@ -114,16 +118,22 @@ namespace Nektar
std::placeholders::_3);
}
void SetFluxVectorNS(DiffusionFluxVecCBNS fluxVector)
{
m_fluxVectorNS = fluxVector;
}
template<typename FuncPointerT, typename ObjectPointerT>
void SetArtificialDiffusionVector(FuncPointerT func, ObjectPointerT obj)
void SetFluxPenaltyNS(FuncPointerT func, ObjectPointerT obj)
{
m_ArtificialDiffusionVector = std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2);
m_fluxPenaltyNS = std::bind(
func, obj, std::placeholders::_1, std::placeholders::_2,
std::placeholders::_3);
}
void SetFluxVectorNS(DiffusionFluxVecCBNS fluxVector)
void SetFluxPenaltyNS(DiffusionFluxPenaltyNS flux)
{
m_fluxVectorNS = fluxVector;
m_fluxPenaltyNS = flux;
}
inline void SetHomoDerivs(Array<OneD, Array<OneD, NekDouble> > &deriv)
......@@ -139,7 +149,7 @@ namespace Nektar
protected:
DiffusionFluxVecCB m_fluxVector;
DiffusionFluxVecCBNS m_fluxVectorNS;
DiffusionArtificialDiffusion m_ArtificialDiffusionVector;
DiffusionFluxPenaltyNS m_fluxPenaltyNS;
virtual void v_InitObject(
LibUtilities::SessionReaderSharedPtr pSession,
......@@ -149,7 +159,7 @@ namespace Nektar
};
virtual void v_Diffuse(
const int nConvectiveFields,
const std::size_t nConvectiveFields,
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
......
......@@ -80,8 +80,8 @@ namespace Nektar
{
// Strip trailing string "3DHomogeneous1D" to determine 2D diffusion
// type, and create a diffusion object for the plane.
string name = diffType.substr(0, diffType.length()-15);
m_planeDiff = GetDiffusionFactory().CreateInstance(name, name);
m_diffType = diffType.substr(0, diffType.length()-15);
m_planeDiff = GetDiffusionFactory().CreateInstance(m_diffType, m_diffType);
}
/**
......@@ -114,7 +114,26 @@ namespace Nektar
m_homoLen = pFields[0]->GetHomoLen();
m_trans = pFields[0]->GetTransposition();
m_planeCounter = 0;
if (m_diffType == "LDG")
{
// Set viscous flux for LDG
m_planeDiff->SetFluxVector(m_fluxVector);
}
else if (m_diffType == "LDGNS")
{
// Set viscous flux for LDGNS
m_planeDiff->SetFluxVectorNS(m_fluxVectorNS);
// Set penalty flux
m_planeDiff->SetFluxPenaltyNS(m_fluxPenaltyNS);
}
else if (m_diffType == "LFRDGNS" ||
m_diffType == "LFRHUNS" ||
m_diffType == "LFRSDNS" )
{
// Set viscous flux for FR cases
m_planeDiff->SetFluxVectorNS(m_fluxVectorNS);
}
m_fieldsPlane = Array<OneD, MultiRegions::ExpListSharedPtr>
(nConvectiveFields);
......@@ -169,7 +188,7 @@ namespace Nektar
* using an LDG interface flux and the the flux in the third direction.
*/
void Diffusion3DHomogeneous1D::v_Diffuse(
const int nConvectiveFields,
const std::size_t nConvectiveFields,
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
......@@ -181,14 +200,13 @@ namespace Nektar
Array<OneD, NekDouble> tmp(m_numPoints), tmp2;
Array<OneD, Array<OneD, NekDouble> > viscHComp;
const int nPointsTot = fields[0]->GetNpoints();
int i, j;
NekDouble beta;
if (m_fluxVectorNS)
{
viscHComp = Array<OneD, Array<OneD, NekDouble> >(nConvectiveFields);
for (i = 0; i < nConvectiveFields - 1; ++i)
for (int i = 0; i < nConvectiveFields - 1; ++i)
{
fields[0]->PhysDeriv(2, inarray[i], m_homoDerivStore[i]);
viscHComp[i] = Array<OneD, NekDouble>(m_numPoints);
......@@ -196,7 +214,7 @@ namespace Nektar
}
for (i = 0; i < m_numPlanes; ++i)
for (int i = 0; i < m_numPlanes; ++i)
{
// Set up memory references for fields, inarray and outarray for
// this plane.
......@@ -220,15 +238,43 @@ namespace Nektar
}
if (m_diffType == "LDGNS")
{
// Store plane Fwd/Bwd traces
std::size_t nTracePts = m_fieldsPlane[0]->GetTrace()
->GetTotPoints();
std::size_t nScalar = m_inarrayPlane.num_elements();
Array<OneD, Array<OneD, NekDouble> > Fwd(nScalar);
Array<OneD, Array<OneD, NekDouble> > Bwd(nScalar);
{
for(std::size_t k = 0; k < nScalar; ++k)
{
Fwd[k] = Array<OneD, NekDouble>(nTracePts, 0.0);
Bwd[k] = Array<OneD, NekDouble>(nTracePts, 0.0);
m_fieldsPlane[k]->GetFwdBwdTracePhys(
m_inarrayPlane[k], Fwd[k], Bwd[k]);
}
}
m_planeDiff->Diffuse(nConvectiveFields,
m_fieldsPlane,
m_inarrayPlane,
m_outarrayPlane,
Fwd,
Bwd);
}
else
{
m_planeDiff->Diffuse(nConvectiveFields,
m_fieldsPlane,
m_inarrayPlane,
m_outarrayPlane);
}
if (m_fluxVectorNS)
{
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &viscTensor = m_planeDiff->GetFluxTensor();
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >
&viscTensor = m_planeDiff->GetFluxTensor();
// Extract H (viscTensor[2])
for (int j = 0; j < nConvectiveFields - 1; ++j)
......@@ -244,19 +290,20 @@ namespace Nektar
if (m_fluxVectorNS)
{
for (j = 0; j < nConvectiveFields - 1; ++j)
for (int j = 0; j < nConvectiveFields - 1; ++j)
{
fields[j+1]->PhysDeriv(2, viscHComp[j], tmp);
Vmath::Vadd(nPointsTot, outarray[j+1], 1, tmp, 1, outarray[j+1], 1);
Vmath::Vadd(nPointsTot, outarray[j+1], 1, tmp, 1,
outarray[j+1], 1);
}
}
else
{
for (j = 0; j < nConvectiveFields; ++j)
for (int j = 0; j < nConvectiveFields; ++j)
{
fields[j]->HomogeneousFwdTrans(inarray[j], tmp);
for (i = 0; i < m_numPlanes; ++i)
for (int i = 0; i < m_numPlanes; ++i)
{
beta = 2*M_PI*m_trans->GetK(i)/m_homoLen;
beta *= beta;
......
......@@ -59,10 +59,10 @@ namespace Nektar
std::string m_diffType;
SolverUtils::DiffusionSharedPtr m_planeDiff;
NekDouble m_homoLen;
int m_numPoints;
int m_numPointsPlane;
int m_numPlanes;
int m_planeCounter;
std::size_t m_numPoints;
std::size_t m_numPointsPlane;
std::size_t m_numPlanes;
std::size_t m_planeCounter;
Array<OneD, unsigned int> m_planes;
Array<OneD, unsigned int> m_planePos;
Array<OneD, Array<OneD, NekDouble> > m_homoDerivStore;
......@@ -76,7 +76,7 @@ namespace Nektar
LibUtilities::SessionReaderSharedPtr pSession,
Array<OneD, MultiRegions::ExpListSharedPtr> pFields);
virtual void v_Diffuse(
const int nConvective,
const std::size_t nConvective,
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
......
......@@ -59,6 +59,9 @@ namespace Nektar
std::string m_shockCaptureType;
/// Coefficient of penalty term
NekDouble m_C11;
Array<OneD, Array<OneD, NekDouble> > m_traceNormals;
LibUtilities::SessionReaderSharedPtr m_session;
......@@ -67,41 +70,42 @@ namespace Nektar
Array<OneD, MultiRegions::ExpListSharedPtr> pFields);
virtual void v_Diffuse(
const int nConvective,
const std::size_t nConvective,
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
const Array<OneD, Array<OneD, NekDouble> > &pFwd = NullNekDoubleArrayofArray,
const Array<OneD, Array<OneD, NekDouble> > &pBwd = NullNekDoubleArrayofArray);
virtual void v_NumFluxforScalar(
void NumFluxforScalar(
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &ufield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&uflux,
const Array<OneD, Array<OneD, NekDouble> > &pFwd = NullNekDoubleArrayofArray,
const Array<OneD, Array<OneD, NekDouble> > &pBwd = NullNekDoubleArrayofArray);
virtual void v_WeakPenaltyforScalar(
void ApplyScalarBCs(
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const int var,
const std::size_t var,
const Array<OneD, const NekDouble> &ufield,
const Array<OneD, const NekDouble> &uplus,
const Array<OneD, const NekDouble> &Fwd,
const Array<OneD, const NekDouble> &Bwd,
Array<OneD, NekDouble> &penaltyflux);
virtual void v_NumFluxforVector(
void NumFluxforVector(
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &ufield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&qfield,
Array<OneD, Array<OneD, NekDouble> > &qflux);
virtual void v_WeakPenaltyforVector(
void ApplyVectorBCs(
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const int var,
const int dir,
const std::size_t var,
const std::size_t dir,
const Array<OneD, const NekDouble> &qfield,
const Array<OneD, const NekDouble> &qtemp,
Array<OneD, NekDouble> &penaltyflux,
NekDouble C11);
const Array<OneD, const NekDouble> &qFwd,
const Array<OneD, const NekDouble> &qBwd,
Array<OneD, NekDouble> &penaltyflux);
};
}
}
......
......@@ -851,7 +851,7 @@ namespace Nektar
*
*/
void DiffusionLFR::v_Diffuse(
const int nConvectiveFields,
const std::size_t nConvectiveFields,
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
......
......@@ -103,7 +103,7 @@ namespace Nektar
Array<OneD, MultiRegions::ExpListSharedPtr> pFields);
virtual void v_Diffuse(
const int nConvectiveFields,
const std::size_t nConvectiveFields,
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
......
......@@ -904,7 +904,7 @@ namespace Nektar
*
*/
void DiffusionLFRNS::v_Diffuse(
const int nConvectiveFields,
const std::size_t nConvectiveFields,
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
......
......@@ -119,7 +119,7 @@ namespace Nektar
Array<OneD, MultiRegions::ExpListSharedPtr> pFields);
virtual void v_Diffuse(
const int nConvective,
const std::size_t nConvective,
const Array<OneD, MultiRegions::ExpListSharedPtr> &fields,
const Array<OneD, Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
......
......@@ -273,9 +273,8 @@ namespace Nektar
for (int i = 0; i < nVariables; ++i)
{
Vmath::Svtvp(nSolutionPts, m_epsilon, &outarrayDiff[i][0], 1,
&outarray[i][0], 1,
&outarray[i][0], 1);
Vmath::Vadd(nSolutionPts, &outarrayDiff[i][0], 1,
&outarray[i][0], 1, &outarray[i][0], 1);
}
}
......@@ -425,18 +424,23 @@ namespace Nektar
* @param flux Resulting flux.
*/
void UnsteadyAdvectionDiffusion::GetFluxVectorDiff(
const int i,
const int j,
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, NekDouble> > &derivatives,
Array<OneD, Array<OneD, NekDouble> > &flux)
const Array<OneD, Array<OneD, NekDouble> > &inarray,
const Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&qfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&viscousTensor)
{
boost::ignore_unused(inarray);
unsigned int nDim = qfield.num_elements();
unsigned int nConvectiveFields = qfield[0].num_elements();
unsigned int nPts = qfield[0][0].num_elements();
for (unsigned int j = 0; j < nDim; ++j)
{
boost::ignore_unused(derivatives);
for (int k = 0; k < flux.num_elements(); ++k)
for (unsigned int i = 0; i < nConvectiveFields; ++i)
{
Vmath::Zero(GetNpoints(), flux[k], 1);
Vmath::Smul(nPts, m_epsilon, qfield[j][i], 1,
viscousTensor[j][i], 1 );
}
}
Vmath::Vcopy(GetNpoints(), physfield[i], 1, flux[j], 1);
}
void UnsteadyAdvectionDiffusion::v_GenerateSummary(
......
......@@ -90,11 +90,9 @@ namespace Nektar
/// Evaluate the flux at each solution point for the diffusion part
void GetFluxVectorDiff(
const int i,
const int j,
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, NekDouble> > &derivatives,
Array<OneD, Array<OneD, NekDouble> > &flux);
const Array<OneD, Array<OneD, NekDouble> > &inarray,
const Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&qfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&viscousTensor);
/// Compute the RHS
virtual void DoOdeRhs(
......
......@@ -59,7 +59,7 @@ namespace Nektar
UnsteadySystem::v_InitObject();
m_session->LoadParameter("wavefreq", m_waveFreq, 0.0);
m_session->LoadParameter("epsilon", m_epsilon, 0.0);
m_session->LoadParameter("epsilon", m_epsilon, 1.0);
m_session->MatchSolverInfo(
"SpectralVanishingViscosity", "True", m_useSpecVanVisc, false);
......@@ -277,18 +277,23 @@ namespace Nektar
* @brief Return the flux vector for the unsteady diffusion problem.
*/
void UnsteadyDiffusion::GetFluxVector(
const int i,
const int j,
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, NekDouble> > &derivatives,
Array<OneD, Array<OneD, NekDouble> > &flux)
const Array<OneD, Array<OneD, NekDouble> > &inarray,
const Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&qfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&viscousTensor)
{
boost::ignore_unused(derivatives);
boost::ignore_unused(inarray);
for(int k = 0; k < flux.num_elements(); ++k)
unsigned int nDim = qfield.num_elements();
unsigned int nConvectiveFields = qfield[0].num_elements();
unsigned int nPts = qfield[0][0].num_elements();
for (unsigned int j = 0; j < nDim; ++j)
{
for (unsigned int i = 0; i < nConvectiveFields; ++i)
{
Vmath::Zero(GetNpoints(), flux[k], 1);
Vmath::Smul(nPts, m_epsilon, qfield[j][i], 1,
viscousTensor[j][i], 1 );
}
}
Vmath::Vcopy(GetNpoints(), physfield[i], 1, flux[j], 1);
}
}
......@@ -79,11 +79,9 @@ namespace Nektar
virtual void v_InitObject();
void GetFluxVector(
const int i,
const int j,
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, NekDouble> > &derivatives,
Array<OneD, Array<OneD, NekDouble> > &flux);
const Array<OneD, Array<OneD, NekDouble> > &inarray,
const Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&qfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&viscousTensor);
void DoOdeRhs(
const Array<OneD, const Array<OneD, NekDouble> >&inarray,
Array<OneD, Array<OneD, NekDouble> >&outarray,
......
......@@ -414,19 +414,24 @@ namespace Nektar
* @param flux Resulting flux.
*/
void UnsteadyViscousBurgers::GetFluxVectorDiff(
const int i,
const int j,
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, NekDouble> > &derivatives,
Array<OneD, Array<OneD, NekDouble> > &flux)
const Array<OneD, Array<OneD, NekDouble> > &inarray,
const Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&qfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&viscousTensor)
{
boost::ignore_unused(derivatives);
boost::ignore_unused(inarray);
unsigned int nDim = qfield.num_elements();
unsigned int nConvectiveFields = qfield[0].num_elements();
unsigned int nPts = qfield[0][0].num_elements();
for (int k = 0; k < flux.num_elements(); ++k)
for (unsigned int j = 0; j < nDim; ++j)
{
Vmath::Zero(GetNpoints(), flux[k], 1);
for (unsigned int i = 0; i < nConvectiveFields; ++i)
{
Vmath::Smul(nPts, m_epsilon, qfield[j][i], 1,
viscousTensor[j][i], 1 );
}
}
Vmath::Vcopy(GetNpoints(), physfield[i], 1, flux[j], 1);
}
void UnsteadyViscousBurgers::v_GenerateSummary(
......
......@@ -97,11 +97,9 @@ namespace Nektar
/// Evaluate the flux at each solution point for the diffusion part
void GetFluxVectorDiff(
const int i,
const int j,
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, NekDouble> > &derivatives,
Array<OneD, Array<OneD, NekDouble> > &flux);
const Array<OneD, Array<OneD, NekDouble> > &inarray,
const Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&qfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > >&viscousTensor);
/// Compute the RHS
virtual void DoOdeRhs(
......
......@@ -8,10 +8,10 @@
</files>
<metrics>
<metric type="L2" id="1">
<value variable="u" tolerance="1e-12">0.000999975</value>
<value variable="u" tolerance="1e-12">0.000999909</value>
</metric>
<metric type="Linf" id="2">
<value variable="u" tolerance="1e-12">0.00107628</value>
<value variable="u" tolerance="1e-12">0.00107583</value>
</metric>
</metrics>
</test>
......
......@@ -8,10 +8,10 @@
</files>
<metrics>
<metric type="L2" id="1">
<value variable="u" tolerance="1e-12">0.000997014</value>
<value variable="u" tolerance="1e-12">0.000997473</value>
</metric>
<metric type="Linf" id="2">
<value variable="u" tolerance="1e-12">0.00101639</value>
<value variable="u" tolerance="1e-12">0.00101935</value>
</metric>
</metrics>
</test>
......
......@@ -8,10 +8,10 @@
</files>
<metrics>
<metric type="L2" id="1">
<value variable="u" tolerance="1e-12">0.00142525</value>
<value variable="u" tolerance="1e-12">0.00142271</value>
</metric>
<metric type="Linf" id="2">
<value variable="u" tolerance="1e-12">0.00922016</value>
<value variable="u" tolerance="1e-12">0.00917296</value>
</metric>
</metrics>
</test>
......
......@@ -8,10 +8,10 @@
</files>
<metrics>
<metric type="L2" id="1">
<value variable="u" tolerance="1e-12">0.00117493</value>
<value variable="u" tolerance="1e-12">0.00135534</value>
</metric>
<metric type="Linf" id="2">
<value variable="u" tolerance="1e-12">0.00183782</value>
<value variable="u" tolerance="1e-12">0.00191008</value>
</metric>
</metrics>
</test>
......
......@@ -8,10 +8,10 @@
</files>
<metrics>
<metric type="L2" id="1">
<value variable="u" tolerance="1e-12">0.00779161</value>
<value variable="u" tolerance="1e-12">0.00830426</value>
</metric>
<metric type="Linf" id="2">
<value variable="u" tolerance="1e-12">0.0173304</value>
<value variable="u" tolerance="1e-12">0.022025</value>
</metric>
</metrics>
</test>
......