109 vmult(dealii::LinearAlgebra::distributed::Vector<double> &dst,
110 const dealii::LinearAlgebra::distributed::Vector<double> &src)
const;
142 [[maybe_unused]]
const unsigned int index,
143 [[maybe_unused]]
double &scalar_IC,
144 [[maybe_unused]] Vector<double> &vector_IC) = 0;
159 [[maybe_unused]]
const unsigned int index,
160 [[maybe_unused]]
const unsigned int direction,
161 [[maybe_unused]]
const double time,
162 [[maybe_unused]]
double &scalar_BC,
163 [[maybe_unused]] Vector<double> &vector_BC) = 0;
168 unsigned int totalDOFs;
172 const AttributesList &var_attributes;
173 const AttributesList &pp_attributes;
176 const static unsigned int CIJ_tensor_size = 2 * dim - 1 + dim / 3;
190 std::vector<SimplifiedGrainRepresentation<dim>> simplified_grain_representations;
213 parallel::distributed::Triangulation<dim> triangulation;
218 std::vector<FESystem<dim> *> FESet;
225 std::vector<const AffineConstraints<double> *> constraintsDirichletSet,
230 std::vector<const DoFHandler<dim> *> dofHandlersSet;
237 std::vector<const IndexSet *> locally_relevant_dofsSet;
240 std::vector<AffineConstraints<double> *> constraintsDirichletSet_nonconst,
241 constraintsOtherSet_nonconst;
243 std::vector<DoFHandler<dim> *> dofHandlersSet_nonconst;
245 std::vector<IndexSet *> locally_relevant_dofsSet_nonconst;
248 std::vector<dealii::LinearAlgebra::distributed::Vector<double> *> solutionSet;
251 std::vector<dealii::LinearAlgebra::distributed::Vector<double> *> residualSet;
254 std::vector<parallel::distributed::SolutionTransfer<
256 dealii::LinearAlgebra::distributed::Vector<double>> *>
264 MatrixFree<dim, double> matrixFreeObject;
268 dealii::LinearAlgebra::distributed::Vector<double> invMscalar;
272 dealii::LinearAlgebra::distributed::Vector<double> invMvector;
275 dealii::LinearAlgebra::distributed::Vector<double> dU_vector, dU_scalar;
279 unsigned int currentFieldIndex;
286 updateExplicitSolution(
unsigned int fieldIndex);
290 updateImplicitSolution(
unsigned int fieldIndex,
unsigned int nonlinear_iteration_index);
294 applyBCs(
unsigned int fieldIndex);
309 computeExplicitRHS();
311 computeNonexplicitRHS();
316 getLHS(
const MatrixFree<dim, double> &data,
317 dealii::LinearAlgebra::distributed::Vector<double> &dst,
318 const dealii::LinearAlgebra::distributed::Vector<double> &src,
319 const std::pair<unsigned int, unsigned int> &cell_range)
const;
321 bool generatingInitialGuess;
323 getLaplaceLHS(
const MatrixFree<dim, double> &data,
324 dealii::LinearAlgebra::distributed::Vector<double> &dst,
325 const dealii::LinearAlgebra::distributed::Vector<double> &src,
326 const std::pair<unsigned int, unsigned int> &cell_range)
const;
329 setNonlinearEqInitialGuess();
331 computeLaplaceRHS(
unsigned int fieldIndex);
333 getLaplaceRHS(
const MatrixFree<dim, double> &data,
334 dealii::LinearAlgebra::distributed::Vector<double> &dst,
335 const dealii::LinearAlgebra::distributed::Vector<double> &src,
336 const std::pair<unsigned int, unsigned int> &cell_range)
const;
343 const MatrixFree<dim, double> &data,
344 std::vector<dealii::LinearAlgebra::distributed::Vector<double> *> &dst,
345 const std::vector<dealii::LinearAlgebra::distributed::Vector<double> *> &src,
346 const std::pair<unsigned int, unsigned int> &cell_range)
const;
350 const MatrixFree<dim, double> &data,
351 std::vector<dealii::LinearAlgebra::distributed::Vector<double> *> &dst,
352 const std::vector<dealii::LinearAlgebra::distributed::Vector<double> *> &src,
353 const std::pair<unsigned int, unsigned int> &cell_range)
const;
359 [[maybe_unused]]
const Point<dim, VectorizedArray<double>> q_point_loc,
360 [[maybe_unused]]
const VectorizedArray<double>
element_volume)
const = 0;
363 nonExplicitEquationRHS(
366 [[maybe_unused]]
const Point<dim, VectorizedArray<double>> q_point_loc,
367 [[maybe_unused]]
const VectorizedArray<double>
element_volume)
const = 0;
370 equationLHS([[maybe_unused]]
variableContainer<dim, degree, VectorizedArray<double>>
372 [[maybe_unused]]
const Point<dim, VectorizedArray<double>> q_point_loc,
373 [[maybe_unused]]
const VectorizedArray<double>
element_volume)
const = 0;
381 [[maybe_unused]]
const Point<dim, VectorizedArray<double>> q_point_loc,
382 [[maybe_unused]]
const VectorizedArray<double>
element_volume)
const {};
384 computePostProcessedFields(
385 std::vector<dealii::LinearAlgebra::distributed::Vector<double> *> &postProcessedSet);
388 getPostProcessedFields(
389 const MatrixFree<dim, double> &data,
390 std::vector<dealii::LinearAlgebra::distributed::Vector<double> *> &dst,
391 const std::vector<dealii::LinearAlgebra::distributed::Vector<double> *> &src,
392 const std::pair<unsigned int, unsigned int> &cell_range);
397 std::vector<std::map<types::global_dof_index, double> *> valuesDirichletSet;
401 markBoundaries(parallel::distributed::Triangulation<dim> &)
const;
414 setPeriodicityConstraints(AffineConstraints<double> *,
const DoFHandler<dim> *)
const;
428 const DoFHandler<dim> *dof_handler,
429 const Point<dim> target_point = Point<dim>())
const;
436 applyInitialConditions();
446 load_checkpoint_triangulation();
448 load_checkpoint_fields();
450 load_checkpoint_time_info();
453 move_file(
const std::string &,
const std::string &);
456 verify_checkpoint_file_exists(
const std::string &filename);
462 std::vector<nucleus<dim>> nuclei;
467 std::vector<nucleus<dim>>
470 getLocalNucleiList(std::vector<
nucleus<dim>> &newnuclei)
const;
472 safetyCheckNewNuclei(std::vector<
nucleus<dim>> newnuclei,
473 std::vector<unsigned int> &conflict_ids);
475 refineMeshNearNuclei(std::vector<
nucleus<dim>> newnuclei);
477 weightedDistanceFromNucleusCenter(
const Point<dim, double> center,
478 const std::vector<double> &semiaxes,
479 const Point<dim, double> q_point_loc,
480 const unsigned int var_index)
const;
481 VectorizedArray<double>
482 weightedDistanceFromNucleusCenter(
const Point<dim, double> center,
483 const std::vector<double> &semiaxes,
484 const Point<dim, VectorizedArray<double>> q_point_loc,
485 const unsigned int var_index)
const;
489 [[nodiscard]]
virtual double
493 [[maybe_unused]]
unsigned int variable_index)
const
501 getFieldIndex(std::string _name);
506 double &integratedField,
508 std::vector<dealii::LinearAlgebra::distributed::Vector<double> *> variableSet);
512 bool isTimeDependentBVP;
516 bool hasExplicitEquation;
517 bool hasNonExplicitEquation;
520 unsigned int currentIncrement, currentOutput, currentCheckpoint,
521 current_grain_reassignment;
524 mutable TimerOutput computing_timer;
526 bool first_integrated_var_output_complete;
529 double integrated_var;
530 unsigned int integral_index;
531 std::mutex assembler_lock;