Chaste  Release::2018.1
ParabolicBoxDomainPdeModifier< DIM > Class Template Reference

#include <ParabolicBoxDomainPdeModifier.hpp>

+ Inheritance diagram for ParabolicBoxDomainPdeModifier< DIM >:
+ Collaboration diagram for ParabolicBoxDomainPdeModifier< DIM >:

Public Member Functions

 ParabolicBoxDomainPdeModifier (boost::shared_ptr< AbstractLinearPde< DIM, DIM > > pPde=boost::shared_ptr< AbstractLinearPde< DIM, DIM > >(), boost::shared_ptr< AbstractBoundaryCondition< DIM > > pBoundaryCondition=boost::shared_ptr< AbstractBoundaryCondition< DIM > >(), bool isNeumannBoundaryCondition=true, boost::shared_ptr< ChasteCuboid< DIM > > pMeshCuboid=boost::shared_ptr< ChasteCuboid< DIM > >(), double stepSize=1.0, Vec solution=nullptr)
 
virtual ~ParabolicBoxDomainPdeModifier ()
 
virtual void UpdateAtEndOfTimeStep (AbstractCellPopulation< DIM, DIM > &rCellPopulation)
 
virtual void SetupSolve (AbstractCellPopulation< DIM, DIM > &rCellPopulation, std::string outputDirectory)
 
virtual std::shared_ptr
< BoundaryConditionsContainer
< DIM, DIM, 1 > > 
ConstructBoundaryConditionsContainer (AbstractCellPopulation< DIM, DIM > &rCellPopulation)
 
void SetupInitialSolutionVector (AbstractCellPopulation< DIM, DIM > &rCellPopulation)
 
void OutputSimulationModifierParameters (out_stream &rParamsFile)
 
- Public Member Functions inherited from AbstractBoxDomainPdeModifier< DIM >
 AbstractBoxDomainPdeModifier (boost::shared_ptr< AbstractLinearPde< DIM, DIM > > pPde=boost::shared_ptr< AbstractLinearPde< DIM, DIM > >(), boost::shared_ptr< AbstractBoundaryCondition< DIM > > pBoundaryCondition=boost::shared_ptr< AbstractBoundaryCondition< DIM > >(), bool isNeumannBoundaryCondition=true, boost::shared_ptr< ChasteCuboid< DIM > > pMeshCuboid=boost::shared_ptr< ChasteCuboid< DIM > >(), double stepSize=1.0, Vec solution=nullptr)
 
virtual ~AbstractBoxDomainPdeModifier ()
 
double GetStepSize ()
 
void SetBcsOnBoxBoundary (bool setBcsOnBoxBoundary)
 
bool AreBcsSetOnBoxBoundary ()
 
void GenerateFeMesh (boost::shared_ptr< ChasteCuboid< DIM > > pMeshCuboid, double stepSize)
 
void UpdateCellData (AbstractCellPopulation< DIM, DIM > &rCellPopulation)
 
void InitialiseCellPdeElementMap (AbstractCellPopulation< DIM, DIM > &rCellPopulation)
 
void UpdateCellPdeElementMap (AbstractCellPopulation< DIM, DIM > &rCellPopulation)
 
- Public Member Functions inherited from AbstractPdeModifier< DIM >
 AbstractPdeModifier (boost::shared_ptr< AbstractLinearPde< DIM, DIM > > pPde=NULL, boost::shared_ptr< AbstractBoundaryCondition< DIM > > pBoundaryCondition=boost::shared_ptr< AbstractBoundaryCondition< DIM > >(), bool isNeumannBoundaryCondition=true, Vec solution=nullptr)
 
virtual ~AbstractPdeModifier ()
 
boost::shared_ptr
< AbstractLinearPde< DIM, DIM > > 
GetPde ()
 
boost::shared_ptr
< AbstractBoundaryCondition
< DIM > > 
GetBoundaryCondition ()
 
bool IsNeumannBoundaryCondition ()
 
void SetDependentVariableName (const std::string &rName)
 
std::string & rGetDependentVariableName ()
 
bool HasAveragedSourcePde ()
 
void SetUpSourceTermsForAveragedSourcePde (TetrahedralMesh< DIM, DIM > *pMesh, std::map< CellPtr, unsigned > *pCellPdeElementMap=nullptr)
 
Vec GetSolution ()
 
Vec GetSolution () const
 
TetrahedralMesh< DIM, DIM > * GetFeMesh () const
 
virtual void UpdateAtEndOfOutputTimeStep (AbstractCellPopulation< DIM, DIM > &rCellPopulation)
 
virtual void UpdateAtEndOfSolve (AbstractCellPopulation< DIM, DIM > &rCellPopulation)
 
bool GetOutputGradient ()
 
void SetOutputGradient (bool outputGradient)
 
void SetOutputSolutionAtPdeNodes (bool outputSolutionAtPdeNodes)
 
- Public Member Functions inherited from AbstractCellBasedSimulationModifier< DIM, DIM >
 AbstractCellBasedSimulationModifier ()
 
virtual ~AbstractCellBasedSimulationModifier ()
 
virtual void UpdateAtEndOfTimeStep (AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM > &rCellPopulation)=0
 
virtual void UpdateAtEndOfOutputTimeStep (AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM > &rCellPopulation)
 
virtual void SetupSolve (AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM > &rCellPopulation, std::string outputDirectory)=0
 
virtual void UpdateAtEndOfSolve (AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM > &rCellPopulation)
 
void OutputSimulationModifierInfo (out_stream &rParamsFile)
 
- Public Member Functions inherited from Identifiable
virtual ~Identifiable ()
 
std::string GetIdentifier () const
 

Private Member Functions

template<class Archive >
void serialize (Archive &archive, const unsigned int version)
 

Friends

class TestParabolicBoxDomainPdeModifier
 
class boost::serialization::access
 

Additional Inherited Members

- Protected Attributes inherited from AbstractBoxDomainPdeModifier< DIM >
std::map< CellPtr, unsignedmCellPdeElementMap
 
boost::shared_ptr
< ChasteCuboid< DIM > > 
mpMeshCuboid
 
double mStepSize
 
bool mSetBcsOnBoxBoundary
 
- Protected Attributes inherited from AbstractPdeModifier< DIM >
boost::shared_ptr
< AbstractLinearPde< DIM, DIM > > 
mpPde
 
boost::shared_ptr
< AbstractBoundaryCondition
< DIM > > 
mpBoundaryCondition
 
bool mIsNeumannBoundaryCondition
 
std::string mDependentVariableName
 
Vec mSolution
 
TetrahedralMesh< DIM, DIM > * mpFeMesh
 
std::string mOutputDirectory
 
bool mOutputGradient
 
bool mOutputSolutionAtPdeNodes
 
out_stream mpVizPdeSolutionResultsFile
 
bool mDeleteFeMesh
 

Detailed Description

template<unsigned DIM>
class ParabolicBoxDomainPdeModifier< DIM >

A modifier class in which a linear parabolic PDE coupled to a cell-based simulation is solved on a coarse domain.

The finite element mesh used to solve the PDE numerically is a fixed tessellation of a cuboid (box), which must be supplied to the constructor. The value of the dependent variable is interpolated between coarse mesh nodes to obtain a value at each cell, which is stored and updated in a CellData item.

At each time step the boundary condition supplied to the constructor may be imposed either on the boundary of the box domain, or on the boundary of the cell population (which is assumed to lie within the box domain). This choice can be made using the AbstractBoxDomainPdeModifier method SetBcsOnBoxBoundary(), which is inherited by this class.

Examples of PDEs in the source folder that can be solved using this class are AveragedSourceParabolicPde and UniformSourceParabolicPde.

Definition at line 64 of file ParabolicBoxDomainPdeModifier.hpp.

Constructor & Destructor Documentation

template<unsigned DIM>
ParabolicBoxDomainPdeModifier< DIM >::ParabolicBoxDomainPdeModifier ( boost::shared_ptr< AbstractLinearPde< DIM, DIM > >  pPde = boost::shared_ptr<AbstractLinearPde<DIM,DIM> >(),
boost::shared_ptr< AbstractBoundaryCondition< DIM > >  pBoundaryCondition = boost::shared_ptr<AbstractBoundaryCondition<DIM> >(),
bool  isNeumannBoundaryCondition = true,
boost::shared_ptr< ChasteCuboid< DIM > >  pMeshCuboid = boost::shared_ptr<ChasteCuboid<DIM> >(),
double  stepSize = 1.0,
Vec  solution = nullptr 
)

Constructor.

Parameters
pPdeA shared pointer to a linear PDE object (defaults to NULL)
pBoundaryConditionA shared pointer to an abstract boundary condition (defaults to NULL, corresponding to a constant boundary condition with value zero)
isNeumannBoundaryConditionWhether the boundary condition is Neumann (defaults to true)
pMeshCuboidA shared pointer to a ChasteCuboid specifying the outer boundary for the FE mesh (defaults to NULL)
stepSizestep size to be used in the FE mesh (defaults to 1.0, i.e. the default cell size)
solutionsolution vector (defaults to NULL)

Definition at line 40 of file ParabolicBoxDomainPdeModifier.cpp.

template<unsigned DIM>
ParabolicBoxDomainPdeModifier< DIM >::~ParabolicBoxDomainPdeModifier ( )
virtual

Destructor.

Definition at line 56 of file ParabolicBoxDomainPdeModifier.cpp.

Member Function Documentation

template<unsigned DIM>
std::shared_ptr< BoundaryConditionsContainer< DIM, DIM, 1 > > ParabolicBoxDomainPdeModifier< DIM >::ConstructBoundaryConditionsContainer ( AbstractCellPopulation< DIM, DIM > &  rCellPopulation)
virtual

Helper method to construct the boundary conditions container for the PDE.

Parameters
rCellPopulationreference to the cell population
Returns
the full boundary conditions container

Definition at line 108 of file ParabolicBoxDomainPdeModifier.cpp.

References EXCEPTION, AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorBegin(), and AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryNodeIteratorBegin().

template<unsigned DIM>
void ParabolicBoxDomainPdeModifier< DIM >::OutputSimulationModifierParameters ( out_stream &  rParamsFile)
virtual

Overridden OutputSimulationModifierParameters() method. Output any simulation modifier parameters to file.

Parameters
rParamsFilethe file stream to which the parameters are output

Reimplemented from AbstractBoxDomainPdeModifier< DIM >.

Definition at line 165 of file ParabolicBoxDomainPdeModifier.cpp.

References AbstractBoxDomainPdeModifier< DIM >::OutputSimulationModifierParameters().

template<unsigned DIM>
template<class Archive >
void ParabolicBoxDomainPdeModifier< DIM >::serialize ( Archive &  archive,
const unsigned int  version 
)
inlineprivate

Boost Serialization method for archiving/checkpointing. Archives the object and its member variables.

Parameters
archiveThe boost archive.
versionThe current version of this class.

Definition at line 80 of file ParabolicBoxDomainPdeModifier.hpp.

template<unsigned DIM>
void ParabolicBoxDomainPdeModifier< DIM >::SetupInitialSolutionVector ( AbstractCellPopulation< DIM, DIM > &  rCellPopulation)

Helper method to initialise the PDE solution using the CellData.

Here we assume a homogeneous initial consition.

Parameters
rCellPopulationreference to the cell population

Definition at line 144 of file ParabolicBoxDomainPdeModifier.cpp.

References AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM >::Begin(), PetscTools::CreateAndSetVec(), AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM >::End(), and UNUSED_OPT.

template<unsigned DIM>
void ParabolicBoxDomainPdeModifier< DIM >::SetupSolve ( AbstractCellPopulation< DIM, DIM > &  rCellPopulation,
std::string  outputDirectory 
)
virtual

Overridden SetupSolve() method.

Specifies what to do in the simulation before the start of the time loop.

Parameters
rCellPopulationreference to the cell population
outputDirectorythe output directory, relative to where Chaste output is stored

Reimplemented from AbstractBoxDomainPdeModifier< DIM >.

Definition at line 96 of file ParabolicBoxDomainPdeModifier.cpp.

References AbstractBoxDomainPdeModifier< DIM >::SetupSolve().

template<unsigned DIM>
void ParabolicBoxDomainPdeModifier< DIM >::UpdateAtEndOfTimeStep ( AbstractCellPopulation< DIM, DIM > &  rCellPopulation)
virtual

Overridden UpdateAtEndOfTimeStep() method.

Specifies what to do in the simulation at the end of each time step.

Parameters
rCellPopulationreference to the cell population
Todo:
Investigate more than one PDE time step per spatial step

Implements AbstractPdeModifier< DIM >.

Definition at line 61 of file ParabolicBoxDomainPdeModifier.cpp.

References PetscTools::Destroy(), SimulationTime::Instance(), and AbstractDynamicLinearPdeSolver< ELEMENT_DIM, SPACE_DIM, 1 >::SetTimes().

Friends And Related Function Documentation

template<unsigned DIM>
friend class boost::serialization::access
friend

Needed for serialization.

Definition at line 71 of file ParabolicBoxDomainPdeModifier.hpp.


The documentation for this class was generated from the following files: