Chaste
Release::3.4
|
#include <CellBasedPdeHandler.hpp>
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, unsigned > | mCellPdeElementMap |
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 |
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.
CellBasedPdeHandler< DIM >::CellBasedPdeHandler | ( | AbstractCellPopulation< DIM > * | pCellPopulation, |
bool | deleteMemberPointersInDestructor = false |
||
) |
Constructor.
pCellPopulation | pointer to a cell population |
deleteMemberPointersInDestructor | whether to delete member pointers in the destructor (defaults to false) |
Definition at line 48 of file CellBasedPdeHandler.cpp.
References AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM >::GetNumRealCells(), and CellBasedPdeHandler< DIM >::mpCellPopulation.
|
virtual |
Destructor.
Definition at line 65 of file CellBasedPdeHandler.cpp.
void CellBasedPdeHandler< DIM >::AddPdeAndBc | ( | PdeAndBoundaryConditions< DIM > * | pPdeAndBc | ) |
Pass a PDE and associated boundary conditions to the simulation.
pPdeAndBc | a pointer to a PdeAndBoundaryConditions object |
Definition at line 99 of file CellBasedPdeHandler.cpp.
References EXCEPTION, and PdeAndBoundaryConditions< DIM >::rGetDependentVariableName().
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().
|
virtual |
Helper method to construct the boundary conditions container for the PDE.
pPdeAndBc | a pointer to the PDE and BCs |
pMesh | the mesh on which to solve the PDE |
Reimplemented in CellBasedPdeHandlerOnCuboid< DIM >.
Definition at line 479 of file CellBasedPdeHandler.cpp.
References AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM >::Begin(), PdeAndBoundaryConditions< DIM >::GetBoundaryCondition(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorBegin(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryElementIteratorEnd(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryNodeIteratorBegin(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetBoundaryNodeIteratorEnd(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElement(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetNode(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetNumElements(), and PdeAndBoundaryConditions< DIM >::IsNeumannBoundaryCondition().
unsigned CellBasedPdeHandler< DIM >::FindCoarseElementContainingCell | ( | CellPtr | pCell | ) |
Find the index of the coarse mesh element containing a given cell.
pCell | the cell |
Definition at line 550 of file CellBasedPdeHandler.cpp.
References AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNode().
const AbstractCellPopulation< DIM > * CellBasedPdeHandler< DIM >::GetCellPopulation | ( | ) | const |
Get a pointer to the cell population.
Definition at line 87 of file CellBasedPdeHandler.cpp.
TetrahedralMesh< DIM, DIM > * CellBasedPdeHandler< DIM >::GetCoarsePdeMesh | ( | ) |
Definition at line 93 of file CellBasedPdeHandler.cpp.
bool CellBasedPdeHandler< DIM >::GetImposeBcsOnCoarseBoundary | ( | ) |
Definition at line 821 of file CellBasedPdeHandler.cpp.
unsigned CellBasedPdeHandler< DIM >::GetNumRadialIntervals | ( | ) |
Definition at line 827 of file CellBasedPdeHandler.cpp.
|
virtual |
rName | The 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.
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
rPoint | the position in space |
rVariable | the dependent variable of the PDE whose solution you want to find |
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.
bool CellBasedPdeHandler< DIM >::GetWriteAverageRadialPdeSolution | ( | ) |
Definition at line 809 of file CellBasedPdeHandler.cpp.
bool CellBasedPdeHandler< DIM >::GetWriteDailyAverageRadialPdeSolution | ( | ) |
Definition at line 815 of file CellBasedPdeHandler.cpp.
|
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.
void CellBasedPdeHandler< DIM >::OpenResultsFiles | ( | std::string | outputDirectory | ) |
Open results files and write initial conditions to file. Called by AbstractCellBasedSimulation::Solve().
outputDirectory | the 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().
|
virtual |
Output parameters to file.
rParamsFile | the 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().
|
protected |
Definition at line 846 of file CellBasedPdeHandler.cpp.
|
inlineprivate |
Archive the member variables.
archive | the archive |
version | the current version of this class |
Definition at line 78 of file CellBasedPdeHandler.hpp.
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.
setBcsOnCoarseBoundary | whether to impose the BCs on the edge of the cell population |
Definition at line 685 of file CellBasedPdeHandler.cpp.
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.
rName | The name of the quantity that we are averaging. |
numRadialIntervals | The number of radial intervals in which the average PDE solution is calculated (defaults to 10) |
writeDailyResults | Whether 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.
|
virtual |
Solve the PDE and write the solution to file.
samplingTimestepMultiple | the ratio of the number of actual timesteps to the number of timesteps at which results are written to file. |
Definition at line 308 of file CellBasedPdeHandler.cpp.
References AbstractCellPopulation< ELEMENT_DIM, SPACE_DIM >::Begin(), Element< ELEMENT_DIM, SPACE_DIM >::CalculateInterpolationWeights(), PetscTools::Destroy(), PdeAndBoundaryConditions< DIM >::DestroySolution(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), PdeAndBoundaryConditions< DIM >::GetPde(), PdeAndBoundaryConditions< DIM >::GetSolution(), SimulationTime::GetTime(), SimulationTime::GetTimeStep(), SimulationTime::GetTimeStepsElapsed(), PdeAndBoundaryConditions< DIM >::HasAveragedSourcePde(), SimulationTime::Instance(), PdeAndBoundaryConditions< DIM >::SetSolution(), and PdeAndBoundaryConditions< DIM >::SetUpSourceTermsForAveragedSourcePde().
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().
|
virtual |
Solve the PDE problem on a coarse mesh.
stepSize | horizontal and vertical distance between mesh points |
meshCuboid | the cuboid defining the size and location of the mesh. |
centreOnCellPopulation | whether 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().
|
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] ...
time | The 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().
|
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.
time | The 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().
|
friend |
Needed for serialization.
Definition at line 70 of file CellBasedPdeHandler.hpp.
|
protected |
The name of the quantity that gets averaged.
Definition at line 112 of file CellBasedPdeHandler.hpp.
Referenced by CellBasedPdeHandler< SPACE_DIM >::serialize().
|
protected |
Map between cells and the elements of the coarse PDE mesh containing them.
Definition at line 124 of file CellBasedPdeHandler.hpp.
|
protected |
Whether to delete member pointers in the destructor. Used in archiving.
Definition at line 130 of file CellBasedPdeHandler.hpp.
|
protected |
A cache of where the results are going (used for VTK writer).
Definition at line 97 of file CellBasedPdeHandler.hpp.
|
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().
|
protected |
File that the average radial PDE solution is written out to.
Definition at line 103 of file CellBasedPdeHandler.hpp.
|
protected |
Pointer to a cell population.
Definition at line 91 of file CellBasedPdeHandler.hpp.
Referenced by CellBasedPdeHandler< DIM >::CellBasedPdeHandler().
|
protected |
Coarse mesh on which to solve the PDE.
Definition at line 121 of file CellBasedPdeHandler.hpp.
|
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().
|
protected |
File that the values of the PDE solution are written out to.
Definition at line 100 of file CellBasedPdeHandler.hpp.
|
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().
|
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().
|
protected |
Whether to write the average radial PDE solution daily.
Definition at line 109 of file CellBasedPdeHandler.hpp.
Referenced by CellBasedPdeHandler< SPACE_DIM >::serialize().