Chaste  Release::3.4
CellBasedPdeHandler< DIM > Class Template Reference

#include <CellBasedPdeHandler.hpp>

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

Public Member Functions

 CellBasedPdeHandler (AbstractCellPopulation< DIM > *pCellPopulation, bool deleteMemberPointersInDestructor=false)
 
virtual ~CellBasedPdeHandler ()
 
const AbstractCellPopulation
< DIM > * 
GetCellPopulation () const
 
TetrahedralMesh< DIM, DIM > * GetCoarsePdeMesh ()
 
void OpenResultsFiles (std::string outputDirectory)
 
void CloseResultsFiles ()
 
bool GetWriteAverageRadialPdeSolution ()
 
bool GetWriteDailyAverageRadialPdeSolution ()
 
void UpdateCellPdeElementMap ()
 
bool GetImposeBcsOnCoarseBoundary ()
 
unsigned GetNumRadialIntervals ()
 
virtual void SolvePdeAndWriteResultsToFile (unsigned samplingTimestepMultiple)
 
virtual std::auto_ptr
< BoundaryConditionsContainer
< DIM, DIM, 1 > > 
ConstructBoundaryConditionsContainer (PdeAndBoundaryConditions< DIM > *pPdeAndBc, TetrahedralMesh< DIM, DIM > *pMesh)
 
double GetPdeSolutionAtPoint (const c_vector< double, DIM > &rPoint, const std::string &rVariable)
 
unsigned FindCoarseElementContainingCell (CellPtr pCell)
 
virtual Vec GetPdeSolution (const std::string &rName="")
 
void SetWriteAverageRadialPdeSolution (const std::string &rName, unsigned numRadialIntervals=10, bool writeDailyResults=false)
 
void SetImposeBcsOnCoarseBoundary (bool setBcsOnCoarseBoundary)
 
virtual void UseCoarsePdeMesh (double stepSize, ChasteCuboid< DIM > meshCuboid, bool centreOnCellPopulation=false)
 
void AddPdeAndBc (PdeAndBoundaryConditions< DIM > *pPdeAndBc)
 
virtual void OutputParameters (out_stream &rParamsFile)
 
- Public Member Functions inherited from Identifiable
virtual ~Identifiable ()
 
std::string GetIdentifier () const
 

Protected Member Functions

void InitialiseCellPdeElementMap ()
 
virtual void WritePdeSolution (double time)
 
void WriteAverageRadialPdeSolution (double time)
 
bool PdeSolveNeedsCoarseMesh ()
 

Protected Attributes

AbstractCellPopulation< DIM > * mpCellPopulation
 
std::vector
< PdeAndBoundaryConditions
< DIM > * > 
mPdeAndBcCollection
 
std::string mDirPath
 
out_stream mpVizPdeSolutionResultsFile
 
out_stream mpAverageRadialPdeSolutionResultsFile
 
bool mWriteAverageRadialPdeSolution
 
bool mWriteDailyAverageRadialPdeSolution
 
std::string mAverageRadialSolutionVariableName
 
bool mSetBcsOnCoarseBoundary
 
unsigned mNumRadialIntervals
 
TetrahedralMesh< DIM, DIM > * mpCoarsePdeMesh
 
std::map< CellPtr, unsignedmCellPdeElementMap
 
bool mDeleteMemberPointersInDestructor
 

Private Member Functions

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

Friends

class TestCellBasedPdeHandler
 
class TestOffLatticeSimulationWithPdes
 
class TestOnLatticeSimulationWithPdes
 
class boost::serialization::access
 

Detailed Description

template<unsigned DIM>
class CellBasedPdeHandler< DIM >

A helper class, containing code for handling the numerical solution of one or more PDEs (using the finite element method) associated with a cell-based simulation object.

By letting AbstractCellBasedSimulation have a pointer to an object of this type as a member variable, we separate out all PDE-related functionality into this class, and thus obviate the need for specialized cell-based simulation subclasses.

Definition at line 60 of file CellBasedPdeHandler.hpp.

Constructor & Destructor Documentation

template<unsigned DIM>
CellBasedPdeHandler< DIM >::CellBasedPdeHandler ( AbstractCellPopulation< DIM > *  pCellPopulation,
bool  deleteMemberPointersInDestructor = false 
)

Constructor.

Parameters
pCellPopulationpointer to a cell population
deleteMemberPointersInDestructorwhether to delete member pointers in the destructor (defaults to false)
Todo:
change to exceptions (#1891)

Definition at line 48 of file CellBasedPdeHandler.cpp.

References AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM >::GetNumRealCells(), and CellBasedPdeHandler< DIM >::mpCellPopulation.

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

Destructor.

Definition at line 65 of file CellBasedPdeHandler.cpp.

Member Function Documentation

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::AddPdeAndBc ( PdeAndBoundaryConditions< DIM > *  pPdeAndBc)

Pass a PDE and associated boundary conditions to the simulation.

Parameters
pPdeAndBca pointer to a PdeAndBoundaryConditions object

Definition at line 99 of file CellBasedPdeHandler.cpp.

References EXCEPTION, and PdeAndBoundaryConditions< DIM >::rGetDependentVariableName().

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::CloseResultsFiles ( )

Close results files. Called by AbstractCellBasedSimulation::Solve().

Definition at line 227 of file CellBasedPdeHandler.cpp.

References PetscTools::AmMaster(), and SimulationTime::Instance().

template<unsigned DIM>
unsigned CellBasedPdeHandler< DIM >::FindCoarseElementContainingCell ( CellPtr  pCell)

Find the index of the coarse mesh element containing a given cell.

Parameters
pCellthe cell
Returns
the element index.

Definition at line 550 of file CellBasedPdeHandler.cpp.

References AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNode().

template<unsigned DIM>
const AbstractCellPopulation< DIM > * CellBasedPdeHandler< DIM >::GetCellPopulation ( ) const

Get a pointer to the cell population.

Returns
a const pointer to mpCellPopulation

Definition at line 87 of file CellBasedPdeHandler.cpp.

template<unsigned DIM>
TetrahedralMesh< DIM, DIM > * CellBasedPdeHandler< DIM >::GetCoarsePdeMesh ( )
Returns
mpCoarsePdeMesh

Definition at line 93 of file CellBasedPdeHandler.cpp.

template<unsigned DIM>
bool CellBasedPdeHandler< DIM >::GetImposeBcsOnCoarseBoundary ( )
Returns
mSetBcsOnCoarseBoundary

Definition at line 821 of file CellBasedPdeHandler.cpp.

template<unsigned DIM>
unsigned CellBasedPdeHandler< DIM >::GetNumRadialIntervals ( )
Returns
mNumRadialIntervals

Definition at line 827 of file CellBasedPdeHandler.cpp.

template<unsigned DIM>
Vec CellBasedPdeHandler< DIM >::GetPdeSolution ( const std::string &  rName = "")
virtual
Returns
the solution to the PDE at this time step.
Parameters
rNameThe name of the dependent variable for the PDE in the vector mPdeAndBcCollection. This defaults to an empty string in the case there is only one PDE.

Definition at line 116 of file CellBasedPdeHandler.cpp.

References EXCEPTION.

template<unsigned DIM>
double CellBasedPdeHandler< DIM >::GetPdeSolutionAtPoint ( const c_vector< double, DIM > &  rPoint,
const std::string &  rVariable 
)

Find the solution of one of the PDEs at a point in space

Parameters
rPointthe position in space
rVariablethe dependent variable of the PDE whose solution you want to find
Returns
the solution of the required PDE at the given point.

Definition at line 750 of file CellBasedPdeHandler.cpp.

References Element< ELEMENT_DIM, SPACE_DIM >::CalculateInterpolationWeights(), EXCEPTION, AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetContainingElementIndex(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex(), PdeAndBoundaryConditions< DIM >::GetSolution(), and NEVER_REACHED.

template<unsigned DIM>
bool CellBasedPdeHandler< DIM >::GetWriteAverageRadialPdeSolution ( )
Returns
mWriteAverageRadialPdeSolution

Definition at line 809 of file CellBasedPdeHandler.cpp.

template<unsigned DIM>
bool CellBasedPdeHandler< DIM >::GetWriteDailyAverageRadialPdeSolution ( )
Returns
mWriteDailyAverageRadialPdeSolution

Definition at line 815 of file CellBasedPdeHandler.cpp.

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::InitialiseCellPdeElementMap ( )
protected

Initialise mCellPdeElementMap.

This method is only called Solve(), but is written as a separate method for testing purposes.

Definition at line 138 of file CellBasedPdeHandler.cpp.

References AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM >::Begin(), and EXCEPTION.

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::OpenResultsFiles ( std::string  outputDirectory)

Open results files and write initial conditions to file. Called by AbstractCellBasedSimulation::Solve().

Parameters
outputDirectorythe output directory, relative to where Chaste output is stored

Definition at line 173 of file CellBasedPdeHandler.cpp.

References PetscTools::AmMaster(), EXCEPTION, ChasteCuboid< SPACE_DIM >::GetWidth(), OutputFileHandler::OpenOutputFile(), and AbstractTetrahedralMeshWriter< ELEMENT_DIM, SPACE_DIM >::WriteFilesUsingMesh().

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::OutputParameters ( out_stream &  rParamsFile)
virtual

Output parameters to file.

Parameters
rParamsFilethe file stream to which the parameters are output

Reimplemented in CellBasedPdeHandlerOnCuboid< DIM >.

Definition at line 833 of file CellBasedPdeHandler.cpp.

Referenced by CellBasedPdeHandlerOnCuboid< DIM >::OutputParameters().

template<unsigned DIM>
bool CellBasedPdeHandler< DIM >::PdeSolveNeedsCoarseMesh ( )
protected
Returns
Whether the population being used requires the use of separate `coarse` mesh to solve PDEs

Definition at line 846 of file CellBasedPdeHandler.cpp.

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

Archive the member variables.

Parameters
archivethe archive
versionthe current version of this class

Definition at line 78 of file CellBasedPdeHandler.hpp.

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::SetImposeBcsOnCoarseBoundary ( bool  setBcsOnCoarseBoundary)

Impose the PDE boundary conditions on the edge of the cell population when using the coarse mesh. The default option is to impose the condition on the boundary of the coarse mesh.

Parameters
setBcsOnCoarseBoundarywhether to impose the BCs on the edge of the cell population

Definition at line 685 of file CellBasedPdeHandler.cpp.

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::SetWriteAverageRadialPdeSolution ( const std::string &  rName,
unsigned  numRadialIntervals = 10,
bool  writeDailyResults = false 
)

Write the final (and optionally also the daily) average radial PDE solution to file.

Parameters
rNameThe name of the quantity that we are averaging.
numRadialIntervalsThe number of radial intervals in which the average PDE solution is calculated (defaults to 10)
writeDailyResultsWhether to record the average radial PDE solution at the end of each day of the simulation (defaults to false)

Definition at line 676 of file CellBasedPdeHandler.cpp.

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::SolvePdeAndWriteResultsToFile ( unsigned  samplingTimestepMultiple)
virtual
template<unsigned DIM>
void CellBasedPdeHandler< DIM >::UpdateCellPdeElementMap ( )

Update the mCellPdeElementMap

This method should be called before sending the element map to a PDE class to ensure map is up to date.

Definition at line 159 of file CellBasedPdeHandler.cpp.

References AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM >::Begin().

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::UseCoarsePdeMesh ( double  stepSize,
ChasteCuboid< DIM >  meshCuboid,
bool  centreOnCellPopulation = false 
)
virtual

Solve the PDE problem on a coarse mesh.

Parameters
stepSizehorizontal and vertical distance between mesh points
meshCuboidthe cuboid defining the size and location of the mesh.
centreOnCellPopulationwhether to centre the coarse mesh on the centre of the cell population.

Definition at line 242 of file CellBasedPdeHandler.cpp.

References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::ConstructRegularSlabMesh(), EXCEPTION, ChasteCuboid< SPACE_DIM >::GetWidth(), NEVER_REACHED, ChastePoint< DIM >::rGetLocation(), ChasteCuboid< SPACE_DIM >::rGetLowerCorner(), and ChasteCuboid< SPACE_DIM >::rGetUpperCorner().

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::WriteAverageRadialPdeSolution ( double  time)
protected

Write the average radial PDE solution to file at a specified time.

Outputs a line of space-separated values of the form: [time] [radius interval 0] [average solution 0] [radius interval 1] [average solution 1] ...

Parameters
timeThe time at which to record the average radial PDE solution

Definition at line 691 of file CellBasedPdeHandler.cpp.

References AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM >::Begin().

template<unsigned DIM>
void CellBasedPdeHandler< DIM >::WritePdeSolution ( double  time)
protectedvirtual

Write the PDE solution to file at a specified time.

Outputs a line of space-separated values of the form: [time] [node 0 index] [node 0 x-pos] [node 0 y-pos] [node 0 z-pos] [node 0 solution] ...

where [node 0 index] is equal to 0 if mpCoarsePdeMesh exists, otherwise [node 0 index] is the location index corresponding to the cell first encountered by the cell population Iterator, and so on.

Parameters
timeThe time at which to record the PDE solution

Definition at line 582 of file CellBasedPdeHandler.cpp.

References VtkMeshWriter< ELEMENT_DIM, SPACE_DIM >::AddPointData(), PetscTools::AmMaster(), AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM >::Begin(), PdeAndBoundaryConditions< DIM >::GetSolution(), SimulationTime::GetTimeStepsElapsed(), SimulationTime::Instance(), NEVER_REACHED, PdeAndBoundaryConditions< DIM >::rGetDependentVariableName(), and VtkMeshWriter< ELEMENT_DIM, SPACE_DIM >::WriteFilesUsingMesh().

Friends And Related Function Documentation

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

Needed for serialization.

Definition at line 70 of file CellBasedPdeHandler.hpp.

Member Data Documentation

template<unsigned DIM>
std::string CellBasedPdeHandler< DIM >::mAverageRadialSolutionVariableName
protected

The name of the quantity that gets averaged.

Definition at line 112 of file CellBasedPdeHandler.hpp.

Referenced by CellBasedPdeHandler< SPACE_DIM >::serialize().

template<unsigned DIM>
std::map<CellPtr, unsigned> CellBasedPdeHandler< DIM >::mCellPdeElementMap
protected

Map between cells and the elements of the coarse PDE mesh containing them.

Definition at line 124 of file CellBasedPdeHandler.hpp.

template<unsigned DIM>
bool CellBasedPdeHandler< DIM >::mDeleteMemberPointersInDestructor
protected

Whether to delete member pointers in the destructor. Used in archiving.

Definition at line 130 of file CellBasedPdeHandler.hpp.

template<unsigned DIM>
std::string CellBasedPdeHandler< DIM >::mDirPath
protected

A cache of where the results are going (used for VTK writer).

Definition at line 97 of file CellBasedPdeHandler.hpp.

template<unsigned DIM>
unsigned CellBasedPdeHandler< DIM >::mNumRadialIntervals
protected

Number of radial 'bins' used to calculate the average radial PDE solution.

Definition at line 118 of file CellBasedPdeHandler.hpp.

Referenced by CellBasedPdeHandler< SPACE_DIM >::serialize().

template<unsigned DIM>
out_stream CellBasedPdeHandler< DIM >::mpAverageRadialPdeSolutionResultsFile
protected

File that the average radial PDE solution is written out to.

Definition at line 103 of file CellBasedPdeHandler.hpp.

template<unsigned DIM>
AbstractCellPopulation<DIM>* CellBasedPdeHandler< DIM >::mpCellPopulation
protected

Pointer to a cell population.

Definition at line 91 of file CellBasedPdeHandler.hpp.

Referenced by CellBasedPdeHandler< DIM >::CellBasedPdeHandler().

template<unsigned DIM>
TetrahedralMesh<DIM,DIM>* CellBasedPdeHandler< DIM >::mpCoarsePdeMesh
protected

Coarse mesh on which to solve the PDE.

Definition at line 121 of file CellBasedPdeHandler.hpp.

template<unsigned DIM>
std::vector<PdeAndBoundaryConditions<DIM>*> CellBasedPdeHandler< DIM >::mPdeAndBcCollection
protected

Vector of pointers to linear elliptic PDE objects with additional boundary condition information.

Definition at line 94 of file CellBasedPdeHandler.hpp.

Referenced by CellBasedPdeHandler< SPACE_DIM >::serialize().

template<unsigned DIM>
out_stream CellBasedPdeHandler< DIM >::mpVizPdeSolutionResultsFile
protected

File that the values of the PDE solution are written out to.

Definition at line 100 of file CellBasedPdeHandler.hpp.

template<unsigned DIM>
bool CellBasedPdeHandler< DIM >::mSetBcsOnCoarseBoundary
protected

Whether to set the boundary condition on the edge of the coarse mesh rather than the cell population.

Definition at line 115 of file CellBasedPdeHandler.hpp.

Referenced by CellBasedPdeHandler< SPACE_DIM >::serialize().

template<unsigned DIM>
bool CellBasedPdeHandler< DIM >::mWriteAverageRadialPdeSolution
protected

Whether to write to file the average radial PDE solution.

Definition at line 106 of file CellBasedPdeHandler.hpp.

Referenced by CellBasedPdeHandler< SPACE_DIM >::serialize().

template<unsigned DIM>
bool CellBasedPdeHandler< DIM >::mWriteDailyAverageRadialPdeSolution
protected

Whether to write the average radial PDE solution daily.

Definition at line 109 of file CellBasedPdeHandler.hpp.

Referenced by CellBasedPdeHandler< SPACE_DIM >::serialize().


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