Commit 4eac42a9 authored by Spencer Sherwin's avatar Spencer Sherwin

Merge branch 'feature/PulseWaveSolverInletConditions' into 'master'

New PWS boundary conditions

See merge request !965
parents ba470db6 dccf10f4
Pipeline #488 failed with stage
in 0 seconds
......@@ -49,9 +49,9 @@ v5.0.0
WeightPartitions was used in parallel (!923)
- Removed instance count from beginning of Array storage to improve memory
alignment (!921)
- Fix naming issue of duplicate Unit tests (!924)
- Fix naming issue of duplicate Unit tests (!924)
- Fix warnings about missing virtual destructors in abstract classes (!932)
- Fix ability to have periodic boundary conditions that are aligned by a
- Fix ability to have periodic boundary conditions that are aligned by a
rotation rather than just a translation (!933)
- Added a coupling interface to exchange data between solvers at run time
and a DummySolver to test the implementations (!853, !931 !973)
......@@ -138,6 +138,9 @@ v5.0.0
**APESolver:**
- APESolver was replaced with AcousticSolver (!918)
**PulseWaveSolver**
- Added two new boundary conditions: AInflow and UInflow
**Documentation**:
- Added the developer-guide repository as a submodule (!751)
......
......@@ -159,7 +159,7 @@ First we need to define the variables under the section \inltt{VARIABLES}.
</VARIABLES>
\end{lstlisting}
The composites that we want to apply out boundary conditions then need to be defined in the \inltt{BOUNDARYREIONS}, for example if we had three composites (C[1], C[4] and C[8]) that correspond to three vertices of the computational mesh we would define:
The composites that we want to apply out boundary conditions then need to be defined in the \inltt{BOUNDARYREGIONS}, for example if we had three composites (C[1], C[4] and C[8]) that correspond to three vertices of the computational mesh we would define:
\begin{lstlisting}[style=XmlStyle]
<BOUNDARYREGIONS>
<B ID="0"> C[1] </B>
......@@ -172,7 +172,8 @@ Finally we can specify the boundary conditions on the regions specified under \i
The Pulse Wave Solver comes with a number of boundary conditions that are unique to this solver. Boundary conditions must be provided for both the area and velocity at the inlets and outlets of the domain. Examples of the different boundary conditions will be provided in the following.
\paragraph{Inlet boundary condition:~} Typically at the inlet of the domain a flow profile (\inltt{Q-inflow}) is specified through a \inltt{USERDEFINEDTYPE} boundary conditioning . An example inlet condition for the parent artery of the previously bifurcation example is
\paragraph{Inlet boundary condition:~} The inlet condition may be specified algebraically in four different ways: as an area variation (\inltt{A-inflow}); a velocity profile (\inltt{U-inflow}); a volume flux (\inltt{Q-inflow}); or by prescribing the forward characteristic (\inltt{TimeDependent}). When prescribing a volume flux, it must be specified in the input file via the area, as illustrated below. Note that $u = 1.0$.
\begin{lstlisting}[style=XmlStyle]
<REGION REF="0">
<D VAR="A" USERDEFINEDTYPE="Q-inflow" VALUE="(7.112e-4)*(sin(7.854*t)
......
......@@ -22,6 +22,10 @@ IF( NEKTAR_SOLVER_PULSEWAVE )
EquationSystems/TimeDependentInflow.cpp
EquationSystems/QInflow.h
EquationSystems/QInflow.cpp
EquationSystems/AInflow.h
EquationSystems/AInflow.cpp
EquationSystems/UInflow.h
EquationSystems/UInflow.cpp
EquationSystems/TerminalOutflow.h
EquationSystems/TerminalOutflow.cpp
EquationSystems/ROutflow.h
......@@ -47,5 +51,7 @@ IF( NEKTAR_SOLVER_PULSEWAVE )
ADD_NEKTAR_TEST(VariableAreaTest)
ADD_NEKTAR_TEST(VariableMatPropTest)
ADD_NEKTAR_TEST(Q_inflow)
ADD_NEKTAR_TEST(A_inflow)
ADD_NEKTAR_TEST(U_inflow)
ADD_NEKTAR_TEST(RCR_boundary)
ENDIF( NEKTAR_SOLVER_PULSEWAVE )
///////////////////////////////////////////////////////////////////////////////
//
// File AInflow.cpp
//
// 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: AInflow class
//
///////////////////////////////////////////////////////////////////////////////
#include <PulseWaveSolver/EquationSystems/AInflow.h>
namespace Nektar
{
string AInflow::className = GetBoundaryFactory().RegisterCreatorFunction(
"A-inflow", AInflow::create, "Area inflow boundary condition");
/**
*
*/
AInflow::AInflow(Array<OneD, MultiRegions::ExpListSharedPtr> pVessel,
const LibUtilities::SessionReaderSharedPtr pSession,
PulseWavePressureAreaSharedPtr pressureArea)
: PulseWaveBoundary(pVessel, pSession, pressureArea)
{
// Constructor
}
/**
*
*/
AInflow::~AInflow()
{
// Destructor
}
void AInflow::v_DoBoundary(
const Array<OneD, const Array<OneD, NekDouble>> &inarray,
Array<OneD, Array<OneD, NekDouble>> &A_0,
Array<OneD, Array<OneD, NekDouble>> &beta, const NekDouble time, int omega,
int offset, int n)
{
NekDouble A;
NekDouble u;
NekDouble A_u;
NekDouble u_u;
NekDouble A_r;
NekDouble u_r;
NekDouble A_l;
NekDouble u_l;
Array<OneD, MultiRegions::ExpListSharedPtr> vessel(2);
// Pointers to the domains
vessel[0] = m_vessels[2 * omega];
vessel[1] = m_vessels[2 * omega + 1];
// Evaluates the time-dependent A
vessel[0]->EvaluateBoundaryConditions(time);
// Read the BC values from the input file
A = (vessel[0]->UpdateBndCondExpansion(n))->GetCoeffs()[0];
u = (vessel[1]->UpdateBndCondExpansion(n))->GetCoeffs()[0];
// Initial conditions in the inlet vessel
A_r = inarray[0][offset];
u_r = inarray[1][offset];
/* Fix the boundary conditions in the virtual vessel to ensure
upwind state matches the boundary condition at the next time step */
u_l = u_r;
A_l = pow(2 * sqrt(sqrt(A)) - sqrt(sqrt(A_r)), 4);
// Store the updated values in the boundary condition
(vessel[0]->UpdateBndCondExpansion(n))->UpdatePhys()[0] = A_l;
(vessel[1]->UpdateBndCondExpansion(n))->UpdatePhys()[0] = u_l;
}
} // namespace Nektar
///////////////////////////////////////////////////////////////////////////////
//
// File AInflow.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: AInflow header
//
///////////////////////////////////////////////////////////////////////////////
#ifndef NEKTAR_AINFLOW_H
#define NEKTAR_AINFLOW_H
#include <LibUtilities/Memory/NekMemoryManager.hpp>
#include <PulseWaveSolver/EquationSystems/PulseWaveBoundary.h>
#include <string>
namespace Nektar
{
// Forward declarations
class AInflow;
// Pointer to a PulseWaveOutflow object.
typedef std::shared_ptr<AInflow> AInflowSharedPtr;
// A global linear system.
class AInflow : public PulseWaveBoundary
{
public:
// Creates an instance of this class
static PulseWaveBoundarySharedPtr create(
Array<OneD, MultiRegions::ExpListSharedPtr> &pVessel,
const LibUtilities::SessionReaderSharedPtr &pSession,
PulseWavePressureAreaSharedPtr &pressureArea)
{
return MemoryManager<AInflow>::AllocateSharedPtr(pVessel, pSession,
pressureArea);
}
// Name of class
static std::string className;
AInflow(Array<OneD, MultiRegions::ExpListSharedPtr> pVessel,
const LibUtilities::SessionReaderSharedPtr pSession,
PulseWavePressureAreaSharedPtr pressureArea);
virtual ~AInflow();
protected:
virtual void v_DoBoundary(
const Array<OneD, const Array<OneD, NekDouble>> &inarray,
Array<OneD, Array<OneD, NekDouble>> &A_0,
Array<OneD, Array<OneD, NekDouble>> &beta, const NekDouble time,
int omega, int offset, int n);
};
} // namespace Nektar
#endif
///////////////////////////////////////////////////////////////////////////////
//
// File UInflow.cpp
//
// 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: UInflow class
//
///////////////////////////////////////////////////////////////////////////////
#include <PulseWaveSolver/EquationSystems/UInflow.h>
namespace Nektar
{
string UInflow::className = GetBoundaryFactory().RegisterCreatorFunction(
"U-inflow", UInflow::create, "Velocity inflow boundary condition");
/**
*
*/
// ExpListSharedPtr = 'Expansion list shared pointer'
UInflow::UInflow(Array<OneD, MultiRegions::ExpListSharedPtr> pVessel,
const LibUtilities::SessionReaderSharedPtr pSession,
PulseWavePressureAreaSharedPtr pressureArea)
: PulseWaveBoundary(pVessel, pSession, pressureArea)
{
// Constructor
}
/**
*
*/
UInflow::~UInflow()
{
// Destructor
}
void UInflow::v_DoBoundary(
const Array<OneD, const Array<OneD, NekDouble>> &inarray,
Array<OneD, Array<OneD, NekDouble>> &A_0,
Array<OneD, Array<OneD, NekDouble>> &beta, const NekDouble time, int omega,
int offset, int n)
{
NekDouble A;
NekDouble u;
NekDouble A_u;
NekDouble u_u;
NekDouble A_r;
NekDouble u_r;
NekDouble A_l;
NekDouble u_l;
Array<OneD, MultiRegions::ExpListSharedPtr> vessel(2);
// Pointers to the domains
vessel[0] = m_vessels[2 * omega];
vessel[1] = m_vessels[2 * omega + 1];
// Evaluates the time-dependent U
vessel[1]->EvaluateBoundaryConditions(time);
// Read the BC values from the input file
A = (vessel[0]->UpdateBndCondExpansion(n))->GetCoeffs()[0];
u = (vessel[1]->UpdateBndCondExpansion(n))->GetCoeffs()[0];
// Initial conditions in inlet vessel
A_r = inarray[0][offset];
u_r = inarray[1][offset];
/* Fix the boundary conditions in the virtual vessel to ensure
upwind state matches the boundary condition at the next time step */
A_l = A_r;
u_l = 2 * u - u_r;
// Store the updated values in the boundary condition
(vessel[0]->UpdateBndCondExpansion(n))->UpdatePhys()[0] = A_l;
(vessel[1]->UpdateBndCondExpansion(n))->UpdatePhys()[0] = u_l;
}
} // namespace Nektar
///////////////////////////////////////////////////////////////////////////////
//
// File UInflow.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: UInflow header
//
///////////////////////////////////////////////////////////////////////////////
#ifndef NEKTAR_UINFLOW_H
#define NEKTAR_UINFLOW_H
#include <LibUtilities/Memory/NekMemoryManager.hpp>
#include <PulseWaveSolver/EquationSystems/PulseWaveBoundary.h>
#include <string>
namespace Nektar
{
// Forward declarations
class UInflow;
/// Pointer to a PulseWaveOutflow object.
typedef std::shared_ptr<UInflow> UInflowSharedPtr;
/// A global linear system.
class UInflow : public PulseWaveBoundary
{
public:
/// Creates an instance of this class
static PulseWaveBoundarySharedPtr create(
Array<OneD, MultiRegions::ExpListSharedPtr> &pVessel,
const LibUtilities::SessionReaderSharedPtr &pSession,
PulseWavePressureAreaSharedPtr &pressureArea)
{
return MemoryManager<UInflow>::AllocateSharedPtr(pVessel, pSession,
pressureArea);
}
/// Name of class
static std::string className;
UInflow(Array<OneD, MultiRegions::ExpListSharedPtr> pVessel,
const LibUtilities::SessionReaderSharedPtr pSession,
PulseWavePressureAreaSharedPtr pressureArea);
virtual ~UInflow();
protected:
virtual void v_DoBoundary(
const Array<OneD, const Array<OneD, NekDouble>> &inarray,
Array<OneD, Array<OneD, NekDouble>> &A_0,
Array<OneD, Array<OneD, NekDouble>> &beta, const NekDouble time,
int omega, int offset, int n);
};
} // namespace Nektar
#endif
<?xml version="1.0" encoding="utf-8"?>
<test>
<description>A-inflow Riemann Solver, P=5</description>
<executable>PulseWaveSolver</executable>
<parameters>A_inflow.xml</parameters>
<files>
<file description="Session File">A_inflow.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value variable="A" tolerance="1e-12">14.7991</value>
<value variable="u" tolerance="1e-12">15.4943</value>
</metric>
<metric type="Linf" id="2">
<value variable="A" tolerance="1e-4">1.01308</value>
<value variable="u" tolerance="1e-4">6.50395</value>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8" ?>
<NEKTAR>
<GEOMETRY DIM="1" SPACE="1">
<VERTEX>
<V ID="0">-1.000e+02 0.000e+00 0.000e+00</V>
<V ID="1">-8.000e+01 0.000e+00 0.000e+00</V>
<V ID="2">-6.000e+01 0.000e+00 0.000e+00</V>
<V ID="3">-4.000e+01 0.000e+00 0.000e+00</V>
<V ID="4">-2.000e+01 0.000e+00 0.000e+00</V>
<V ID="5"> 0.000e+00 0.000e+00 0.000e+00</V>
<V ID="6"> 2.000e+01 0.00e+00 0.000e+00</V>
<V ID="7"> 4.000e+01 0.00e+00 0.000e+00</V>
<V ID="8"> 6.000e+01 0.00e+00 0.000e+00</V>
<V ID="9"> 8.000e+01 0.00e+00 0.000e+00</V>
<V ID="10"> 1.000e+02 0.00e+00 0.000e+00</V>
<V ID="11"> 1.200e+02 0.00e+00 0.000e+00</V>
</VERTEX>
<ELEMENT>
<S ID="0"> 0 1 </S>
<S ID="1"> 1 2 </S>
<S ID="2"> 2 3 </S>
<S ID="3"> 3 4 </S>
<S ID="4"> 4 5 </S>
<S ID="5"> 5 6 </S>
<S ID="6"> 6 7 </S>
<S ID="7"> 7 8 </S>
<S ID="8"> 8 9 </S>
<S ID="9"> 9 10 </S>
<S ID="10"> 10 11 </S>
</ELEMENT>
<COMPOSITE>
<C ID="0"> S[0-10] </C>
<C ID="1"> V[0] </C>
<C ID="2"> V[11] </C>
</COMPOSITE>
<DOMAIN>
<D ID="0"> C[0] </D>
</DOMAIN>
</GEOMETRY>
<EXPANSIONS>
<E COMPOSITE="C[0]" NUMMODES="7" FIELDS="A,u" TYPE="MODIFIED" />
</EXPANSIONS>
<CONDITIONS>
<PARAMETERS>
<P> TimeStep = 10e-4 </P>
<P> FinTime = 0.2 </P>
<P> NumSteps = FinTime/TimeStep </P>
<P> IO_CheckSteps = NumSteps/50 </P>
<P> IO_InfoSteps = 100 </P>
<P> T = 10 </P>
<P> omega = 2*PI/T </P>
<P> h0 = 1.0 </P>
<P> rho = 0.5 </P>
<P> nue = 0.5 </P>
<P> pext = 0.0 </P>
</PARAMETERS>
<SOLVERINFO>
<I PROPERTY="EQTYPE" VALUE="PulseWavePropagation"/>
<I PROPERTY="Projection" VALUE="DisContinuous" />
<I PROPERTY="AdvectionType" VALUE="WeakDG" />
<I PROPERTY="TimeIntegrationMethod" VALUE="ForwardEuler" />
<I PROPERTY="UpwindTypePulse" VALUE="UpwindPulse" />
</SOLVERINFO>
<VARIABLES>
<V ID="0"> A </V>
<V ID="1"> u </V>
</VARIABLES>
<BOUNDARYREGIONS>
<B ID="0"> C[1] </B>
<B ID="1"> C[2] </B>
</BOUNDARYREGIONS>
<BOUNDARYCONDITIONS>
<REGION REF="0">
<D VAR="A" USERDEFINEDTYPE="A-inflow" VALUE="1.5*sin(t)" />
<D VAR="u" USERDEFINEDTYPE="A-inflow" VALUE="1.0" />
</REGION>
<REGION REF="1">
<D VAR="A" VALUE="1.0" />
<D VAR="u" VALUE="1.0" />
</REGION>
</BOUNDARYCONDITIONS>
<FUNCTION NAME="InitialConditions">
<E VAR="A" VALUE="1.0" />
<E VAR="u" VALUE="1.0" />
</FUNCTION>
<FUNCTION NAME="A_0">
<E VAR="A_0" DOMAIN="0" VALUE="1.0" />
</FUNCTION>
<FUNCTION NAME="MaterialProperties">
<E VAR="beta" DOMAIN="0" VALUE="100" />
</FUNCTION>
<FUNCTION NAME="ExactSolution">
<E VAR="A" DOMAIN="0" VALUE="0" />
<E VAR="u" DOMAIN="0" VALUE="0" />
</FUNCTION>
</CONDITIONS>
</NEKTAR>
<?xml version="1.0" encoding="utf-8"?>
<test>
<description>U-inflow Riemann Solver, P=5</description>
<executable>PulseWaveSolver</executable>
<parameters>U_inflow.xml</parameters>
<files>
<file description="Session File">U_inflow.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value variable="A" tolerance="1e-12">14.8323</value>
<value variable="u" tolerance="1e-12">14.8314</value>
</metric>
<metric type="Linf" id="2">
<value variable="A" tolerance="1e-12">1.00008</value>
<value variable="u" tolerance="1e-12">1.0008</value>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8" ?>
<NEKTAR>
<GEOMETRY DIM="1" SPACE="1">
<VERTEX>
<V ID="0">-1.000e+02 0.000e+00 0.000e+00</V>
<V ID="1">-8.000e+01 0.000e+00 0.000e+00</V>
<V ID="2">-6.000e+01 0.000e+00 0.000e+00</V>
<V ID="3">-4.000e+01 0.000e+00 0.000e+00</V>
<V ID="4">-2.000e+01 0.000e+00 0.000e+00</V>
<V ID="5"> 0.000e+00 0.000e+00 0.000e+00</V>
<V ID="6"> 2.000e+01 0.00e+00 0.000e+00</V>
<V ID="7"> 4.000e+01 0.00e+00 0.000e+00</V>
<V ID="8"> 6.000e+01 0.00e+00 0.000e+00</V>
<V ID="9"> 8.000e+01 0.00e+00 0.000e+00</V>
<V ID="10"> 1.000e+02 0.00e+00 0.000e+00</V>
<V ID="11"> 1.200e+02 0.00e+00 0.000e+00</V>
</VERTEX>
<ELEMENT>
<S ID="0"> 0 1 </S>
<S ID="1"> 1 2 </S>
<S ID="2"> 2 3 </S>
<S ID="3"> 3 4 </S>
<S ID="4"> 4 5 </S>
<S ID="5"> 5 6 </S>
<S ID="6"> 6 7 </S>
<S ID="7"> 7 8 </S>
<S ID="8"> 8 9 </S>
<S ID="9"> 9 10 </S>
<S ID="10"> 10 11 </S>
</ELEMENT>
<COMPOSITE>
<C ID="0"> S[0-10] </C>
<C ID="1"> V[0] </C>
<C ID="2"> V[11] </C>
</COMPOSITE>
<DOMAIN>
<D ID="0"> C[0] </D>
</DOMAIN>
</GEOMETRY>
<EXPANSIONS>
<E COMPOSITE="C[0]" NUMMODES="7" FIELDS="A,u" TYPE="MODIFIED" />
</EXPANSIONS>
<CONDITIONS>
<PARAMETERS>
<P> TimeStep = 10e-4 </P>
<P> FinTime = 0.2 </P>
<P> NumSteps = FinTime/TimeStep </P>
<P> IO_CheckSteps = NumSteps/50 </P>
<P> IO_InfoSteps = 100 </P>
<P> T = 10 </P>
<P> omega = 2*PI/T </P>
<P> h0 = 1.0 </P>
<P> rho = 0.5 </P>
<P> nue = 0.5 </P>
<P> pext = 0.0 </P>
</PARAMETERS>
<SOLVERINFO>
<I PROPERTY="EQTYPE" VALUE="PulseWavePropagation"/>
<I PROPERTY="Projection" VALUE="DisContinuous" />
<I PROPERTY="AdvectionType" VALUE="WeakDG" />
<I PROPERTY="TimeIntegrationMethod" VALUE="ForwardEuler" />
<I PROPERTY="UpwindTypePulse" VALUE="UpwindPulse" />
</SOLVERINFO>
<VARIABLES>
<V ID="0"> A </V>
<V ID="1"> u </V>
</VARIABLES>
<BOUNDARYREGIONS>
<B ID="0"> C[1] </B>
<B ID="1"> C[2] </B>
</BOUNDARYREGIONS>
<BOUNDARYCONDITIONS>
<REGION REF="0">
<D VAR="A" USERDEFINEDTYPE="U-inflow" VALUE="1.5" />
<D VAR="u" USERDEFINEDTYPE="U-inflow" VALUE="1.0*cos(t)" />
</REGION>
<REGION REF="1">
<D VAR="A" VALUE="1.0" />
<D VAR="u" VALUE="1.0" />
</REGION>
</BOUNDARYCONDITIONS>
<FUNCTION NAME="InitialConditions">
<E VAR="A" VALUE="1.0" />
<E VAR="u" VALUE="1.0" />
</FUNCTION>
<FUNCTION NAME="A_0">
<E VAR="A_0" DOMAIN="0" VALUE="1.0" />
</FUNCTION>
<FUNCTION NAME="MaterialProperties">
<E VAR="beta" DOMAIN="0" VALUE="100" />
</FUNCTION>
<FUNCTION NAME="ExactSolution">
<E VAR="A" DOMAIN="0" VALUE="0" />
<E VAR="u" DOMAIN="0" VALUE="0" />
</FUNCTION>
</CONDITIONS>
</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