36 #include "EllipticGrowingDomainPdeModifier.hpp" 37 #include "CellBasedEllipticPdeSolver.hpp" 38 #include "AveragedSourceEllipticPde.hpp" 40 template<
unsigned DIM>
43 bool isNeumannBoundaryCondition,
47 isNeumannBoundaryCondition,
52 template<
unsigned DIM>
57 template<
unsigned DIM>
66 VecGetSize(this->
mSolution, &previous_solution_size);
70 bool is_previous_solution_size_correct = (previous_solution_size == (int)this->
mpFeMesh->
GetNumNodes());
74 if (is_previous_solution_size_correct)
77 VecDuplicate(this->
mSolution, &initial_guess);
91 if (is_previous_solution_size_correct)
93 this->
mSolution = solver.Solve(initial_guess);
104 if (old_solution_copy !=
nullptr)
113 template<
unsigned DIM>
118 EXCEPTION(
"EllipticGrowingDomainPdeModifier cannot be used with an AveragedSourceEllipticPde. Use an EllipticBoxDomainPdeModifier instead.");
128 template<
unsigned DIM>
145 template<
unsigned DIM>
virtual void UpdateAtEndOfOutputTimeStep(AbstractCellPopulation< DIM, DIM > &rCellPopulation)
virtual std::shared_ptr< BoundaryConditionsContainer< DIM, DIM, 1 > > ConstructBoundaryConditionsContainer()
void UpdateCellData(AbstractCellPopulation< DIM, DIM > &rCellPopulation)
#define EXCEPTION(message)
virtual void SetupSolve(AbstractCellPopulation< DIM, DIM > &rCellPopulation, std::string outputDirectory)
bool IsNeumannBoundaryCondition()
virtual unsigned GetNumNodes() const
BoundaryNodeIterator GetBoundaryNodeIteratorBegin() const
void OutputSimulationModifierParameters(out_stream &rParamsFile)
virtual ~EllipticGrowingDomainPdeModifier()
boost::shared_ptr< AbstractBoundaryCondition< DIM > > mpBoundaryCondition
#define EXPORT_TEMPLATE_CLASS_SAME_DIMS(CLASS)
virtual void SetupSolve(AbstractCellPopulation< DIM, DIM > &rCellPopulation, std::string outputDirectory)
void OutputSimulationModifierParameters(out_stream &rParamsFile)
void GenerateFeMesh(AbstractCellPopulation< DIM, DIM > &rCellPopulation)
virtual void UpdateAtEndOfTimeStep(AbstractCellPopulation< DIM, DIM > &rCellPopulation)
BoundaryNodeIterator GetBoundaryNodeIteratorEnd() const
EllipticGrowingDomainPdeModifier(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, Vec solution=nullptr)
boost::shared_ptr< AbstractLinearPde< DIM, DIM > > GetPde()
TetrahedralMesh< DIM, DIM > * mpFeMesh