Commit 4da6b4c2 authored by Dave Moxey's avatar Dave Moxey

Merge branch 'feature/CFS-NSAxisym' into 'master'

CFS: axi-symmetric Navier-Stokes

See merge request !866
parents 01ab613d b8bc476c
......@@ -90,7 +90,7 @@ v5.0.0
**CompressibleFlowSolver**
- Add 3D regression tests (!567)
- Introduce forcing for quasi-1D Euler simulations (!771)
- Allow performing axi-symmetric Euler simulations (!771)
- Allow performing axi-symmetric Euler and NS simulations (!771, !866)
- Add ability to use an exponential filtering for stabilization with
seg, quad and hex elements (!771, !862)
- Introduce equations of state to account for real gas effects (!880)
......
......@@ -315,7 +315,7 @@ class IProductWRTDerivBase_IterPerExp : public Operator
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_dim = PtsKey.size();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
int nqtot = m_stdExp->GetTotPoints();
......@@ -602,7 +602,7 @@ class IProductWRTDerivBase_SumFac_Quad : public Operator
{
Vmath::Vmul (ntot,m_derivFac[i],1, in[0],1,
tmp[i],1);
for(int j = 1; j < m_coordim; ++j)
for(int j = 1; j < 2; ++j)
{
Vmath::Vvtvp (ntot,m_derivFac[i +j*2],1,
in[j],1, tmp[i], 1, tmp[i],1);
......@@ -667,7 +667,7 @@ class IProductWRTDerivBase_SumFac_Quad : public Operator
m_derbase1(m_stdExp->GetBasis(1)->GetDbdata())
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
m_derivFac = pGeomData->GetDerivFactors(pCollExp);
m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
......@@ -753,7 +753,7 @@ class IProductWRTDerivBase_SumFac_Tri : public Operator
{
Vmath::Vmul (ntot,m_derivFac[i],1, in[0],1, tmp[i],1);
for(int j = 1; j < m_coordim; ++j)
for(int j = 1; j < 2; ++j)
{
Vmath::Vvtvp (ntot,m_derivFac[i +j*2],1,
in[j],1, tmp[i], 1, tmp[i],1);
......@@ -829,7 +829,7 @@ class IProductWRTDerivBase_SumFac_Tri : public Operator
m_derbase1(m_stdExp->GetBasis(1)->GetDbdata())
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
m_derivFac = pGeomData->GetDerivFactors(pCollExp);
m_jac = pGeomData->GetJacWithStdWeights(pCollExp);
......
......@@ -156,7 +156,7 @@ class PhysDeriv_StdMat : public Operator
int nqtot = 1;
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_dim = PtsKey.size();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
for(int i = 0; i < m_dim; ++i)
{
......@@ -326,7 +326,7 @@ class PhysDeriv_IterPerExp : public Operator
int nqtot = 1;
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_dim = PtsKey.size();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
for(int i = 0; i < m_dim; ++i)
{
......@@ -582,7 +582,7 @@ class PhysDeriv_SumFac_Seg : public Operator
m_nquad0 (m_stdExp->GetNumPoints(0))
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
m_derivFac = pGeomData->GetDerivFactors(pCollExp);
......@@ -712,7 +712,7 @@ class PhysDeriv_SumFac_Quad : public Operator
m_nquad1 (m_stdExp->GetNumPoints(1))
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
m_derivFac = pGeomData->GetDerivFactors(pCollExp);
......@@ -864,7 +864,7 @@ class PhysDeriv_SumFac_Tri : public Operator
m_nquad1 (m_stdExp->GetNumPoints(1))
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
m_derivFac = pGeomData->GetDerivFactors(pCollExp);
......@@ -1046,7 +1046,7 @@ class PhysDeriv_SumFac_Hex : public Operator
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
m_derivFac = pGeomData->GetDerivFactors(pCollExp);
......@@ -1274,7 +1274,7 @@ class PhysDeriv_SumFac_Tet : public Operator
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
m_derivFac = pGeomData->GetDerivFactors(pCollExp);
......@@ -1488,7 +1488,7 @@ class PhysDeriv_SumFac_Prism : public Operator
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
m_derivFac = pGeomData->GetDerivFactors(pCollExp);
......@@ -1705,7 +1705,7 @@ class PhysDeriv_SumFac_Pyr : public Operator
{
LibUtilities::PointsKeyVector PtsKey = m_stdExp->GetPointsKeys();
m_coordim = m_stdExp->GetCoordim();
m_coordim = pCollExp[0]->GetCoordim();
m_derivFac = pGeomData->GetDerivFactors(pCollExp);
......
......@@ -32,6 +32,7 @@ IF( NEKTAR_SOLVER_COMPRESSIBLE_FLOW )
./EquationSystems/EulerCFE.cpp
./EquationSystems/IsentropicVortex.cpp
./EquationSystems/NavierStokesCFE.cpp
./EquationSystems/NavierStokesCFEAxisym.cpp
./EquationSystems/RinglebFlow.cpp
./Filters/FilterEnergy.cpp
./Forcing/ForcingAxiSymmetric.cpp
......@@ -104,6 +105,7 @@ IF( NEKTAR_SOLVER_COMPRESSIBLE_FLOW )
ADD_NEKTAR_TEST(Nozzle_AxiSym_NoSwirl)
ADD_NEKTAR_TEST(Nozzle_AxiSym_Swirl)
ADD_NEKTAR_TEST(Nozzle_Quasi1D_P6)
ADD_NEKTAR_TEST(PipeFlow_NSAxisym)
ADD_NEKTAR_TEST(hump3D_GLL)
ADD_NEKTAR_TEST(hump3D_SEM)
ADD_NEKTAR_TEST(Rarefaction_vanderWaals LENGTHY)
......
......@@ -337,23 +337,63 @@ namespace Nektar
GetPhys_Offset(fields[0]->GetTraceMap()->
GetBndCondTraceToGlobalTraceMap(cnt++));
// Reinforcing bcs for velocity in case of Wall bcs
if (boost::iequals(fields[i]->GetBndConditions()[j]->
GetUserDefined(),"WallViscous") ||
boost::iequals(fields[i]->GetBndConditions()[j]->
GetUserDefined(),"WallAdiabatic"))
{
// Reinforcing bcs for velocity in case of Wall bcs
Vmath::Zero(nBndEdgePts,
&scalarVariables[i][id2], 1);
}
// Imposing velocity bcs if not Wall
else if (
boost::iequals(fields[i]->GetBndConditions()[j]->
GetUserDefined(),"Wall") ||
boost::iequals(fields[i]->GetBndConditions()[j]->
GetUserDefined(),"Symmetry"))
{
// Symmetry bc: normal velocity is zero
// get all velocities at once because we need u.n
if (i==0)
{
// tmp1 = -(u.n)
Vmath::Zero(nBndEdgePts, tmp1, 1);
for (int k = 0; k < nScalars-1; ++k)
{
Vmath::Vdiv(nBndEdgePts,
&(fields[k+1]->GetBndCondExpansions()[j]->
UpdatePhys())[id1], 1,
&(fields[0]->GetBndCondExpansions()[j]->
UpdatePhys())[id1], 1,
&scalarVariables[k][id2], 1);
Vmath::Vvtvp(nBndEdgePts,
&m_traceNormals[k][id2], 1,
&scalarVariables[k][id2], 1,
&tmp1[0], 1,
&tmp1[0], 1);
}
Vmath::Smul(nBndEdgePts, -1.0,
&tmp1[0], 1,
&tmp1[0], 1);
// u_i - (u.n)n_i
for (int k = 0; k < nScalars-1; ++k)
{
Vmath::Vvtvp(nBndEdgePts,
&tmp1[0], 1,
&m_traceNormals[k][id2], 1,
&scalarVariables[k][id2], 1,
&scalarVariables[k][id2], 1);
}
}
}
else if (fields[i]->GetBndConditions()[j]->
GetBoundaryConditionType() ==
SpatialDomains::eDirichlet)
{
Vmath::Vdiv(nBndEdgePts,
// Imposing velocity bcs if not Wall
Vmath::Vdiv(nBndEdgePts,
&(fields[i+1]->GetBndCondExpansions()[j]->
UpdatePhys())[id1], 1,
&(fields[0]->GetBndCondExpansions()[j]->
......
......@@ -98,13 +98,13 @@ namespace Nektar
if (m_specHP_dealiasing)
{
m_diffusion->SetFluxVectorNS(
&NavierStokesCFE::GetViscousFluxVectorDeAlias,
&NavierStokesCFE::v_GetViscousFluxVectorDeAlias,
this);
}
else
{
m_diffusion->SetFluxVectorNS(&NavierStokesCFE::
GetViscousFluxVector, this);
v_GetViscousFluxVector, this);
}
// Concluding initialisation of diffusion operator
......@@ -186,7 +186,7 @@ namespace Nektar
* @brief Return the flux vector for the LDG diffusion problem.
* \todo Complete the viscous flux vector
*/
void NavierStokesCFE::GetViscousFluxVector(
void NavierStokesCFE::v_GetViscousFluxVector(
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &derivativesO1,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &viscousTensor)
......@@ -287,7 +287,7 @@ namespace Nektar
* @brief Return the flux vector for the LDG diffusion problem.
* \todo Complete the viscous flux vector
*/
void NavierStokesCFE::GetViscousFluxVectorDeAlias(
void NavierStokesCFE::v_GetViscousFluxVectorDeAlias(
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &derivativesO1,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &viscousTensor)
......
......@@ -82,11 +82,11 @@ namespace Nektar
const Array<OneD, Array<OneD, NekDouble> > &pFwd,
const Array<OneD, Array<OneD, NekDouble> > &pBwd);
void GetViscousFluxVector(
virtual void v_GetViscousFluxVector(
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &derivatives,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &viscousTensor);
void GetViscousFluxVectorDeAlias(
virtual void v_GetViscousFluxVectorDeAlias(
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &derivatives,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &viscousTensor);
......
///////////////////////////////////////////////////////////////////////////////
//
// File NavierStokesCFEAxisym.h
//
// For more information, please see: http://www.nektar.info
//
// The MIT License
//
// Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
// Department of Aeronautics, Imperial College London (UK), and Scientific
// Computing and Imaging Institute, University of Utah (USA).
//
// License for the specific language governing rights and limitations under
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//
// Description: NavierStokes equations in conservative variable
//
///////////////////////////////////////////////////////////////////////////////
#ifndef NEKTAR_SOLVERS_COMPRESSIBLEFLOWSOLVER_EQUATIONSYSTEMS_NSCFEAXISYM_H
#define NEKTAR_SOLVERS_COMPRESSIBLEFLOWSOLVER_EQUATIONSYSTEMS_NSCFEAXISYM_H
#include <CompressibleFlowSolver/EquationSystems/NavierStokesCFE.h>
namespace Nektar
{
/**
*
*
**/
class NavierStokesCFEAxisym : public NavierStokesCFE
{
public:
friend class MemoryManager<NavierStokesCFEAxisym>;
// Creates an instance of this class
static SolverUtils::EquationSystemSharedPtr create(
const LibUtilities::SessionReaderSharedPtr& pSession,
const SpatialDomains::MeshGraphSharedPtr& pGraph)
{
SolverUtils::EquationSystemSharedPtr p =
MemoryManager<NavierStokesCFEAxisym>
::AllocateSharedPtr(pSession, pGraph);
p->InitObject();
return p;
}
// Name of class
static std::string className;
virtual ~NavierStokesCFEAxisym();
protected:
Array<OneD, Array<OneD, NekDouble> > m_viscousForcing;
NavierStokesCFEAxisym(
const LibUtilities::SessionReaderSharedPtr& pSession,
const SpatialDomains::MeshGraphSharedPtr& pGraph);
virtual void v_InitObject();
virtual void v_DoDiffusion(
const Array<OneD, const Array<OneD, NekDouble> > &inarray,
Array<OneD, Array<OneD, NekDouble> > &outarray,
const Array<OneD, Array<OneD, NekDouble> > &pFwd,
const Array<OneD, Array<OneD, NekDouble> > &pBwd);
virtual void v_GetViscousFluxVector(
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &derivatives,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &viscousTensor);
virtual void v_GetViscousFluxVectorDeAlias(
const Array<OneD, Array<OneD, NekDouble> > &physfield,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &derivatives,
Array<OneD, Array<OneD, Array<OneD, NekDouble> > > &viscousTensor)
{
ASSERTL0(false, "Dealiased flux not implemented for axisymmetric case");
}
};
}
#endif
<?xml version="1.0" encoding="utf-8"?>
<test>
<description>NS, axisymmetric pipe flow with low Mach number</description>
<executable>CompressibleFlowSolver</executable>
<parameters>PipeFlow_NSAxisym.xml</parameters>
<files>
<file description="Session File"> PipeFlow_NSAxisym.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value variable="rho" tolerance="1e-9">1.64331e-05</value>
<value variable="rhou" tolerance="1e-12">0.00300872</value>
<value variable="rhov" tolerance="1e-12">0.00266976</value>
<value variable="E" tolerance="1e-12">4.484</value>
</metric>
<metric type="Linf" id="2">
<value variable="rho" tolerance="1e-12">2.00604e-05</value>
<value variable="rhou" tolerance="1e-12">0.00264886</value>
<value variable="rhov" tolerance="1e-12">0.0031863</value>
<value variable="E" tolerance="1e-12">5.412</value>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8" ?>
<NEKTAR>
<EXPANSIONS>
<E COMPOSITE="C[0]" BASISTYPE="Modified_A,Modified_A" NUMMODES="6,6"
POINTSTYPE="GaussLobattoLegendre,GaussLobattoLegendre" NUMPOINTS="12,12"
FIELDS="rho,rhou,rhov,E" />
</EXPANSIONS>
<CONDITIONS>
<PARAMETERS>
<!-- Simulation parameters -->
<P> CFL = 0.1 </P>
<P> NumSteps = 1000 </P>
<P> IO_InfoSteps = 1000 </P>
<P> IO_CheckSteps = 0 </P>
<P> SteadyStateTol = 1e-8 </P>
<!-- Fluid Properties -->
<P> Gamma = 1.4 </P>
<P> GasConstant = 287.058 </P>
<!-- Parameters for boundary conditions -->
<P> pIn = 1e5 </P>
<P> TIn = 288 </P>
<P> MachIn = 0.01 </P>
<P> rhoIn = pIn/(GasConstant*TIn) </P>
<P> cIn = sqrt(Gamma*pIn/rhoIn) </P>
<P> vIn = MachIn*cIn </P>
<!-- Reference state -->
<P> rhoInf = rhoIn </P>
<P> pInf = pIn </P>
<P> vInf = vIn </P>
<P> uInf = 0 </P>
<!-- Viscous parameters -->
<P> Re = 1e2 </P>
<P> Pr = 0.72 </P>
<P> mu = rhoIn*vIn*2 / Re </P>
</PARAMETERS>
<SOLVERINFO>
<I PROPERTY="EQTYPE" VALUE="NavierStokesCFEAxisym" />
<I PROPERTY="Projection" VALUE="DisContinuous" />
<I PROPERTY="AdvectionType" VALUE="WeakDG" />
<I PROPERTY="TimeIntegrationMethod" VALUE="ForwardEuler" />
<I PROPERTY="UpwindType" VALUE="HLLC"/>
<I PROPERTY="ExponentialFiltering" VALUE="True"/>
</SOLVERINFO>
<VARIABLES>
<V ID="0"> rho </V>
<V ID="1"> rhou </V>
<V ID="2"> rhov </V>
<V ID="3"> E </V>
</VARIABLES>
<BOUNDARYREGIONS>
<B ID="0"> C[1] </B>
<B ID="1"> C[2] </B>
<B ID="2"> C[3] </B>
<B ID="3"> C[4] </B>
</BOUNDARYREGIONS>
<BOUNDARYCONDITIONS>
<REGION REF="0">
<D VAR="rho" USERDEFINEDTYPE="Symmetry" VALUE="0" />
<D VAR="rhou" USERDEFINEDTYPE="Symmetry" VALUE="0" />
<D VAR="rhov" USERDEFINEDTYPE="Symmetry" VALUE="0" />
<D VAR="E" USERDEFINEDTYPE="Symmetry" VALUE="0" />
</REGION>
<REGION REF="1">
<D VAR="rho" USERDEFINEDTYPE="WallAdiabatic" VALUE="0" />
<D VAR="rhou" USERDEFINEDTYPE="WallAdiabatic" VALUE="0" />
<D VAR="rhov" USERDEFINEDTYPE="WallAdiabatic" VALUE="0" />
<D VAR="E" USERDEFINEDTYPE="WallAdiabatic" VALUE="0" />
</REGION>
<REGION REF="2">
<D VAR="rho" VALUE="rhoIn" />
<D VAR="rhou" VALUE="0" />
<D VAR="rhov" VALUE="rhoIn*vIn*(1-x*x)" />
<D VAR="E" VALUE="(pIn - 4*y*vIn*mu)/(Gamma-1) + 0.5*rhoIn*vIn*(1-x*x)*vIn*(1-x*x)" />
</REGION>
<REGION REF="3">
<D VAR="rho" VALUE="rhoIn" />
<D VAR="rhou" VALUE="0" />
<D VAR="rhov" VALUE="rhoIn*vIn*(1-x*x)" />
<D VAR="E" VALUE="(pIn - 4*y*vIn*mu)/(Gamma-1) + 0.5*rhoIn*vIn*(1-x*x)*vIn*(1-x*x)" />
</REGION>
</BOUNDARYCONDITIONS>
<!-- Exact solution for incompressible flow -->
<FUNCTION NAME="InitialConditions">
<E VAR="rho" VALUE="rhoIn" />
<E VAR="rhou" VALUE="0" />
<E VAR="rhov" VALUE="rhoIn*vIn*(1-x*x)" />
<E VAR="E" VALUE="(pIn - 4*y*vIn*mu)/(Gamma-1) + 0.5*rhoIn*vIn*(1-x*x)*vIn*(1-x*x)" />
</FUNCTION>
<FUNCTION NAME="ExactSolution">
<E VAR="rho" VALUE="rhoIn" />
<E VAR="rhou" VALUE="0" />
<E VAR="rhov" VALUE="rhoIn*vIn*(1-x*x)" />
<E VAR="E" VALUE="(pIn - 4*y*vIn*mu)/(Gamma-1) + 0.5*rhoIn*vIn*(1-x*x)*vIn*(1-x*x)" />
</FUNCTION>
</CONDITIONS>
<FORCING>
<FORCE TYPE="AxiSymmetric">
</FORCE>
</FORCING>
<GEOMETRY DIM="2" SPACE="2">
<VERTEX COMPRESSED="B64Z-LittleEndian" BITSIZE="64">eJzjY8APOFF4H+zxq4bJqzjARLiwqkPIc0Dp74v/A8F9DPPZ0cy3vA5SxwzXz4omP+keSF4YLs+MJu/xHiQvC5dnhNJlHiDyAYb7udHc8+s/qn4eNPnf/1Ht58Uqj3A/E5S+oQWxf/F3VPNZoLQVL0Qe4n6E+WxQ2vg+JPxmvUY1HwBmH050</VERTEX>
<EDGE COMPRESSED="B64Z-LittleEndian" BITSIZE="64">eJx1kDkOgDAMBMNNuI/w/6/SMAUj2c1qrM3Gdkr/qgKtA20CpVr54S7gXkzeID++UYwvi8mbgvezmPdLkLd+yn3I3cTk7mLucajPf6eYvS/1meMWs19Rn/keMXu/f58CDgAA</EDGE>
<ELEMENT>
<Q COMPRESSED="B64Z-LittleEndian" BITSIZE="64">eJx1zkcOwCAQwEBSgHRS///VXMwhlsJlJK+0bAjf12CL3U/vMWLSvPaMA47aW/uEMy76Z8UNi+6K6jse2pPUT7x0b1a/8dG9L50oAVwA</Q>
</ELEMENT>
<CURVED COMPRESSED="B64Z-LittleEndian" BITSIZE="64">
<E>eJx106kSwjAARdGyl7WsMwgEAoFAIBAIBAKBQCD4/29B8K65Q2LetDmZTl+SqvqNTbJb/R+LZCu5Lnie8e3kquBr+U5yWfATeX/Pfq75nt7b81/4vtbZb+UHWme/k6/l7PfywyQ92R/kR0n2wf4oP9a8/Ume/eBc2J/lp0l6sr/Iz5LuiXGVb5L0ZH+T5xzQk/1d3j3ZP+Q4x/Rk/5TnntCT/Uue80pP9m957jk92X/kv81dBzkA</E>
<DATAPOINTS ID="0">
<INDEX>eJxd0EcCwjAMRFFDaKGGntB7ryHU+x+MBV8Lxpu3kEa25dzvpDCNHmYwizn3f6yexwL6WMQSliVn9QpWsYYB1rEhOetrYgvbYge7GGKEPezLXOsb4BBHkh/jRHLWN8UZzsUFLmWuvWOFa/TFDW5xJ+7xgLYXyx/xhJ54xgtexRhvcq/9L8E7PsQnvjAQ3/hB288XB2cI/gAA</INDEX>
<POINTS>eJx9lUtME1EUhisVqKg8RKyCQOVRFVCEIkgXDDtIl4omEEJcmC50ZWKRuDTGhYkQdWGCJi4ISmTBikeCumNlXBLEBCgGFgoJtTZpWmNqb8+ZO/OfEs9ivky/zrn/vTN3xuH4fx1gBrzX07VkSJ/DfFqh/HKWdzLjE6l0bWT5g+L8j/pbytltnucKn/j4Pl1J3SdP+Juryv/UPp85YlD+lgT2d4FfNm5F0R9i+jYo//gO+oJ985dqf1h415TKV6z9EemnlS/Q/qg57yDlv5PE/oXMeJDyr8bQFzH9mUZho3cPfbEYP9M+Val9ifAfMvnKtT8m/KcbKodb+1Kmd0j9vm3M/cDxj5v/m6H7Vr+Fvgy6R4zn6+hPCO/y4/hu4QMvMP9J4Wl9rPmfYn5tUMewMRFHX85MeMg/eoP9K8w+bvLBHsx3Woz/a1Jd79G+UnjvVXV9jfZVwhPrtK9mbt+l9f8Ww/weZnSB1r8kiv4M8+GSfV9Z/WuYg4+pv/S1zOFedQxn+Trmyy7ykWs4v3rmfBv5zXe4Pl7mgJN89WvcX2eZsSjt391nuL/OMYMByv9lC/f3eaZvkubvXEff4LBXxOhcQd8o/Nowjt8k/PcnmP8CM/SZ8ofG8P13kTk3T35kDN9/zcypdvv9seoSs+8VXmdWi8gnfavwiw+wj0/4/nuYv435e9b+/bCej8vM2Kz9+2P5dhlI+A5hyvrw+boi/Vt8vjqZ90dp/Na/uD/8zNAo5b+dRP8PBalp/QAA</POINTS>
</DATAPOINTS>
</CURVED>
<COMPOSITE>
<C ID="0"> Q[0-7] </C>
<C ID="1"> E[14,16,18,20] </C>
<C ID="2"> E[12,9,6,3] </C>
<C ID="3"> E[21,11] </C>
<C ID="4"> E[0,13] </C>
</COMPOSITE>
<DOMAIN> C[0] </DOMAIN>
</GEOMETRY>
</NEKTAR>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment