55 this->GenerateFeMesh(rCellPopulation);
61 VecGetSize(this->mSolution, &previous_solution_size);
65 const bool is_previous_solution_size_correct = (previous_solution_size ==
static_cast<int>(this->mpFeMesh->GetNumNodes()));
69 if (is_previous_solution_size_correct)
72 VecDuplicate(this->mSolution, &initial_guess);
73 VecCopy(this->mSolution, initial_guess);
78 std::shared_ptr<BoundaryConditionsContainer<DIM,DIM,1> > p_bcc = this->ConstructBoundaryConditionsContainer();
86 if (is_previous_solution_size_correct)
88 this->mSolution = solver.
Solve(initial_guess);
94 Vec old_solution_copy = this->mSolution;
96 this->mSolution = solver.
Solve();
99 if (old_solution_copy !=
nullptr)
105 this->UpdateCellData(rCellPopulation);
129 assert(!(this->IsNeumannBoundaryCondition()));
130 for (
auto node_iter = this->mpFeMesh->GetBoundaryNodeIteratorBegin();
131 node_iter != this->mpFeMesh->GetBoundaryNodeIteratorEnd();
134 p_bcc->AddDirichletBoundaryCondition(*node_iter, this->mpBoundaryCondition.get());
135 this->mIsDirichletBoundaryNode[(*node_iter)->GetIndex()] = 1.0;
void OutputSimulationModifierParameters(out_stream &rParamsFile) override
void SetupSolve(AbstractCellPopulation< DIM, DIM > &rCellPopulation, std::string outputDirectory) override
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)
void OutputSimulationModifierParameters(out_stream &rParamsFile) override
void UpdateAtEndOfTimeStep(AbstractCellPopulation< DIM, DIM > &rCellPopulation) override
virtual std::shared_ptr< BoundaryConditionsContainer< DIM, DIM, 1 > > ConstructBoundaryConditionsContainer()