27 #include <deal.II/lac/vector.h>
28 #include <deal.II/lac/block_sparsity_pattern.h>
29 #include <deal.II/lac/block_sparse_matrix.h>
30 #include <deal.II/numerics/matrix_tools.h>
31 #include <deal.II/numerics/vector_tools.h>
32 #include <deal.II/base/function.h>
55 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
66 Integrator(INTEGRATORDATACONT& idc1, INTEGRATORDATACONT& idc2);
93 template<
typename PROBLEM>
96 bool apply_boundary_values =
true);
115 template<
typename PROBLEM>
118 bool apply_boundary_values =
true);
137 template<
typename PROBLEM>
140 bool apply_boundary_values =
true);
154 template<
typename PROBLEM,
typename MATRIX>
170 template<
typename PROBLEM>
187 template<
typename PROBLEM>
202 template<
typename PROBLEM>
217 template<
typename PROBLEM>
234 template<
typename PROBLEM>
251 template<
typename PROBLEM>
268 template<
typename PROBLEM>
284 template<
typename PROBLEM>
303 template<
typename PROBLEM>
319 template<
typename PROBLEM>
338 template<
typename PROBLEM,
typename MATRIX>
379 AddParamData(std::string name,
const dealii::Vector<SCALAR>* new_data);
inline void
408 template<
typename PROBLEM,
class STH,
class EDC,
class FDC>
423 template<
typename PROBLEM>
428 inline INTEGRATORDATACONT&
431 inline INTEGRATORDATACONT&
440 inline const std::map<std::string, const VECTOR*>&
447 inline const std::map<std::string, const dealii::Vector<SCALAR>*>&
466 template<
template<
int,
int>
class DH>
468 InterpolateBoundaryValues(
471 const unsigned int color,
const dealii::Function<dim>&
function,
472 std::map<unsigned int, SCALAR>& boundary_values,
473 const std::vector<bool>& comp_mask)
const;
496 INTEGRATORDATACONT & idc1_;
497 INTEGRATORDATACONT & idc2_;
499 std::map<std::string, const VECTOR*> domain_data_;
500 std::map<std::string, const dealii::Vector<SCALAR>*> param_data_;
505 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
508 INTEGRATORDATACONT& idc)
509 : idc1_(idc), idc2_(idc)
513 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
516 INTEGRATORDATACONT& idc1, INTEGRATORDATACONT& idc2)
517 : idc1_(idc1), idc2_(idc2)
523 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
532 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
542 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
544 template<
typename PROBLEM>
547 PROBLEM& pde, VECTOR &residual,
bool apply_boundary_values)
551 unsigned int dofs_per_element;
552 dealii::Vector<SCALAR> local_vector;
553 std::vector<unsigned int> local_dof_indices;
555 const bool need_point_rhs = pde.HasPoints();
557 const auto& dof_handler =
558 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler();
560 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
562 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerEnd();
565 GetIntegratorDataContainer().InitializeEDC(pde.GetUpdateFlags(),
566 *(pde.GetBaseProblem().GetSpaceTimeHandler()), element,
567 this->GetParamData(), this->GetDomainData());
568 auto& edc = GetIntegratorDataContainer().GetElementDataContainer();
570 bool need_faces = pde.HasFaces();
571 bool need_interfaces = pde.HasInterfaces();
572 std::vector<unsigned int> boundary_equation_colors = pde.GetBoundaryEquationColors();
573 bool need_boundary_integrals = (boundary_equation_colors.size() > 0);
574 GetIntegratorDataContainer().InitializeFDC(pde.GetFaceUpdateFlags(),
575 *(pde.GetBaseProblem().GetSpaceTimeHandler()),
577 this->GetParamData(),
578 this->GetDomainData(),
580 auto & fdc = GetIntegratorDataContainer().GetFaceDataContainer();
582 for (; element[0] != endc[0]; element[0]++)
584 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
586 if (element[dh] == endc[dh])
589 "Elementnumbers in DoFHandlers are not matching!",
590 "Integrator::ComputeNonlinearResidual");
596 dofs_per_element = element[0]->get_fe().dofs_per_cell;
598 local_vector.reinit(dofs_per_element);
601 local_dof_indices.resize(0);
602 local_dof_indices.resize(dofs_per_element, 0);
606 pde.ElementEquation(edc, local_vector, 1., 1.);
607 pde.ElementRhs(edc, local_vector, -1.);
609 if(need_boundary_integrals && element[0]->at_boundary())
611 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
613 #if DEAL_II_VERSION_GTE(8,3,0)
614 if (element[0]->face(face)->at_boundary()
616 (find(boundary_equation_colors.begin(),boundary_equation_colors.end(),
617 element[0]->face(face)->boundary_id()) != boundary_equation_colors.end()))
619 if (element[0]->face(face)->at_boundary()
621 (find(boundary_equation_colors.begin(),boundary_equation_colors.end(),
622 element[0]->face(face)->boundary_indicator()) != boundary_equation_colors.end()))
626 pde.BoundaryEquation(fdc,local_vector, 1., 1.);
627 pde.BoundaryRhs(fdc,local_vector,-1.);
633 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
635 if (element[0]->neighbor_index(face) != -1)
638 pde.FaceEquation(fdc, local_vector, 1., 1.);
639 pde.FaceRhs(fdc, local_vector,-1.);
646 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
651 if(pde.AtInterface(element, face))
658 if (element[0]->neighbor(face)->has_children())
662 for (
unsigned int subface_no=0;
663 subface_no < element[0]->face(face)->n_children();
668 fdc.ReInit(face, subface_no);
671 pde.InterfaceEquation(fdc, local_vector, 1., 1.);
682 pde.InterfaceEquation(fdc, local_vector, 1., 1.);
689 element[0]->get_dof_indices(local_dof_indices);
690 for (
unsigned int i = 0; i < dofs_per_element; ++i)
692 residual(local_dof_indices[i]) += local_vector(i);
695 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
705 pde.PointRhs(this->GetParamData(), this->GetDomainData(), point_rhs,
707 residual += point_rhs;
710 AddPresetRightHandSide(-1.,residual);
712 if (apply_boundary_values)
714 ApplyNewtonBoundaryValues(pde, residual);
720 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
722 template<
typename PROBLEM>
725 PROBLEM& pde, VECTOR &residual,
bool apply_boundary_values)
731 unsigned int dofs_per_element;
733 dealii::Vector<SCALAR> local_vector;
735 std::vector<unsigned int> local_dof_indices;
737 const auto& dof_handler =
738 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler();
740 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
742 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerEnd();
745 GetIntegratorDataContainer().InitializeEDC(pde.GetUpdateFlags(),
746 *(pde.GetBaseProblem().GetSpaceTimeHandler()), element,
747 this->GetParamData(), this->GetDomainData());
748 auto& edc = GetIntegratorDataContainer().GetElementDataContainer();
750 bool need_faces = pde.HasFaces();
751 bool need_interfaces = pde.HasInterfaces();
752 std::vector<unsigned int> boundary_equation_colors = pde.GetBoundaryEquationColors();
753 bool need_boundary_integrals = (boundary_equation_colors.size() > 0);
755 GetIntegratorDataContainer().InitializeFDC(pde.GetFaceUpdateFlags(),
756 *(pde.GetBaseProblem().GetSpaceTimeHandler()),
758 this->GetParamData(),
759 this->GetDomainData(),
761 auto & fdc = GetIntegratorDataContainer().GetFaceDataContainer();
763 for (; element[0] != endc[0]; element[0]++)
765 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
767 if (element[dh] == endc[dh])
770 "Elementnumbers in DoFHandlers are not matching!",
771 "mIntegrator::ComputeNonlinearLhs");
776 dofs_per_element = element[0]->get_fe().dofs_per_cell;
778 local_vector.reinit(dofs_per_element);
781 local_dof_indices.resize(0);
782 local_dof_indices.resize(dofs_per_element, 0);
786 pde.ElementEquation(edc, local_vector, 1., 1.);
788 if(need_boundary_integrals)
790 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
792 #if DEAL_II_VERSION_GTE(8,3,0)
793 if (element[0]->face(face)->at_boundary()
795 (find(boundary_equation_colors.begin(),boundary_equation_colors.end(),
796 element[0]->face(face)->boundary_id()) != boundary_equation_colors.end()))
798 if (element[0]->face(face)->at_boundary()
800 (find(boundary_equation_colors.begin(),boundary_equation_colors.end(),
801 element[0]->face(face)->boundary_indicator()) != boundary_equation_colors.end()))
805 pde.BoundaryEquation(fdc,local_vector, 1., 1.);
811 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
813 if (element[0]->neighbor_index(face) != -1)
816 pde.FaceEquation(fdc, local_vector, 1., 1.);
824 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
829 if(pde.AtInterface(element, face))
836 if (element[0]->neighbor(face)->has_children())
840 for (
unsigned int subface_no=0;
841 subface_no < element[0]->face(face)->n_children();
846 fdc.ReInit(face, subface_no);
849 pde.InterfaceEquation(fdc, local_vector, 1., 1.);
860 pde.InterfaceEquation(fdc, local_vector, 1., 1.);
866 element[0]->get_dof_indices(local_dof_indices);
867 for (
unsigned int i = 0; i < dofs_per_element; ++i)
869 residual(local_dof_indices[i]) += local_vector(i);
872 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
878 if (apply_boundary_values)
880 ApplyNewtonBoundaryValues(pde, residual);
887 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
889 template<
typename PROBLEM>
892 PROBLEM& pde, VECTOR &residual,
bool apply_boundary_values)
896 unsigned int dofs_per_element;
897 dealii::Vector<SCALAR> local_vector;
898 std::vector<unsigned int> local_dof_indices;
900 const bool need_point_rhs = pde.HasPoints();
902 const auto& dof_handler =
903 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler();
905 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
907 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerEnd();
910 GetIntegratorDataContainer().InitializeEDC(pde.GetUpdateFlags(),
911 *(pde.GetBaseProblem().GetSpaceTimeHandler()), element,
912 this->GetParamData(), this->GetDomainData());
913 auto& edc = GetIntegratorDataContainer().GetElementDataContainer();
922 bool need_faces = pde.HasFaces();
923 std::vector<unsigned int> boundary_equation_colors = pde.GetBoundaryEquationColors();
924 bool need_boundary_integrals = (boundary_equation_colors.size() > 0);
926 GetIntegratorDataContainer().InitializeFDC(pde.GetFaceUpdateFlags(),
927 *(pde.GetBaseProblem().GetSpaceTimeHandler()),
929 this->GetParamData(),
930 this->GetDomainData());
931 auto & fdc = GetIntegratorDataContainer().GetFaceDataContainer();
933 for (; element[0] != endc[0]; element[0]++)
935 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
937 if (element[dh] == endc[dh])
940 "Elementnumbers in DoFHandlers are not matching!",
941 "Integrator::ComputeNonlinearRhs");
946 dofs_per_element = element[0]->get_fe().dofs_per_cell;
948 local_vector.reinit(dofs_per_element);
951 local_dof_indices.resize(0);
952 local_dof_indices.resize(dofs_per_element, 0);
953 pde.ElementRhs(edc, local_vector, 1.);
955 if(need_boundary_integrals)
957 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
959 #if DEAL_II_VERSION_GTE(8,3,0)
960 if (element[0]->face(face)->at_boundary()
962 (find(boundary_equation_colors.begin(),boundary_equation_colors.end(),
963 element[0]->face(face)->boundary_id()) != boundary_equation_colors.end()))
965 if (element[0]->face(face)->at_boundary()
967 (find(boundary_equation_colors.begin(),boundary_equation_colors.end(),
968 element[0]->face(face)->boundary_indicator()) != boundary_equation_colors.end()))
972 pde.BoundaryRhs(fdc,local_vector,1.);
978 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
980 if (element[0]->neighbor_index(face) != -1)
983 pde.FaceRhs(fdc, local_vector);
988 element[0]->get_dof_indices(local_dof_indices);
989 for (
unsigned int i = 0; i < dofs_per_element; ++i)
991 residual(local_dof_indices[i]) += local_vector(i);
994 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
1004 pde.PointRhs(this->GetParamData(), this->GetDomainData(), point_rhs,
1006 residual += point_rhs;
1009 AddPresetRightHandSide(1.,residual);
1011 if (apply_boundary_values)
1013 ApplyNewtonBoundaryValues(pde, residual);
1019 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1021 template<
typename PROBLEM,
typename MATRIX>
1024 PROBLEM& pde, MATRIX &matrix)
1028 unsigned int dofs_per_element;
1029 std::vector<unsigned int> local_dof_indices;
1031 const auto& dof_handler =
1032 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler();
1034 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
1036 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerEnd();
1038 GetIntegratorDataContainer().InitializeEDC(pde.GetUpdateFlags(),
1039 *(pde.GetBaseProblem().GetSpaceTimeHandler()), element,
1040 this->GetParamData(), this->GetDomainData());
1041 auto& edc = GetIntegratorDataContainer().GetElementDataContainer();
1044 unsigned int nbr_dofs_per_element;
1045 std::vector<unsigned int> nbr_local_dof_indices;
1047 bool need_faces = pde.HasFaces();
1048 bool need_interfaces = pde.HasInterfaces();
1049 std::vector<unsigned int> boundary_equation_colors = pde.GetBoundaryEquationColors();
1050 bool need_boundary_integrals = (boundary_equation_colors.size() > 0);
1052 GetIntegratorDataContainer().InitializeFDC(pde.GetFaceUpdateFlags(),
1053 *(pde.GetBaseProblem().GetSpaceTimeHandler()),
1055 this->GetParamData(),
1056 this->GetDomainData(),
1058 auto & fdc = GetIntegratorDataContainer().GetFaceDataContainer();
1060 for (; element[0] != endc[0]; element[0]++)
1062 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
1064 if (element[dh] == endc[dh])
1067 "Elementnumbers in DoFHandlers are not matching!",
1068 "Integrator::ComputeMatrix");
1072 dofs_per_element = element[0]->get_fe().dofs_per_cell;
1074 dealii::FullMatrix<SCALAR> local_matrix(dofs_per_element,
1078 local_dof_indices.resize(0);
1079 local_dof_indices.resize(dofs_per_element, 0);
1080 pde.ElementMatrix(edc, local_matrix);
1082 if(need_boundary_integrals)
1084 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
1086 #if DEAL_II_VERSION_GTE(8,3,0)
1087 if (element[0]->face(face)->at_boundary()
1089 (find(boundary_equation_colors.begin(),boundary_equation_colors.end(),
1090 element[0]->face(face)->boundary_id()) != boundary_equation_colors.end()))
1092 if (element[0]->face(face)->at_boundary()
1094 (find(boundary_equation_colors.begin(),boundary_equation_colors.end(),
1095 element[0]->face(face)->boundary_indicator()) != boundary_equation_colors.end()))
1099 pde.BoundaryMatrix(fdc, local_matrix);
1105 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
1107 if (element[0]->neighbor_index(face) != -1)
1110 pde.FaceMatrix(fdc, local_matrix);
1115 if( need_interfaces)
1117 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
1122 if(pde.AtInterface(element, face))
1129 if (element[0]->neighbor(face)->has_children())
1133 for (
unsigned int subface_no=0;
1134 subface_no < element[0]->face(face)->n_children();
1139 fdc.ReInit(face, subface_no);
1143 nbr_dofs_per_element = fdc.GetNbrNDoFsPerElement();
1144 nbr_local_dof_indices.resize(0);
1145 nbr_local_dof_indices.resize(nbr_dofs_per_element, 0);
1146 dealii::FullMatrix<SCALAR> local_interface_matrix(dofs_per_element,nbr_dofs_per_element );
1147 local_interface_matrix = 0;
1149 pde.InterfaceMatrix(fdc, local_interface_matrix);
1151 element[0]->get_dof_indices(local_dof_indices);
1152 element[0]->neighbor(face)->get_dof_indices(nbr_local_dof_indices);
1154 for (
unsigned int i = 0; i < dofs_per_element; ++i)
1156 for (
unsigned int j = 0; j < nbr_dofs_per_element; ++j)
1158 matrix.add(local_dof_indices[i], nbr_local_dof_indices[j],
1159 local_interface_matrix(i, j));
1172 nbr_dofs_per_element = fdc.GetNbrNDoFsPerElement();
1173 nbr_local_dof_indices.resize(0);
1174 nbr_local_dof_indices.resize(nbr_dofs_per_element, 0);
1175 dealii::FullMatrix<SCALAR> local_interface_matrix(dofs_per_element,nbr_dofs_per_element );
1176 local_interface_matrix = 0;
1178 pde.InterfaceMatrix(fdc, local_interface_matrix);
1180 element[0]->get_dof_indices(local_dof_indices);
1181 element[0]->neighbor(face)->get_dof_indices(nbr_local_dof_indices);
1183 for (
unsigned int i = 0; i < dofs_per_element; ++i)
1185 for (
unsigned int j = 0; j < nbr_dofs_per_element; ++j)
1187 matrix.add(local_dof_indices[i], nbr_local_dof_indices[j],
1188 local_interface_matrix(i, j));
1198 element[0]->get_dof_indices(local_dof_indices);
1199 for (
unsigned int i = 0; i < dofs_per_element; ++i)
1201 for (
unsigned int j = 0; j < dofs_per_element; ++j)
1203 matrix.add(local_dof_indices[i], local_dof_indices[j],
1204 local_matrix(i, j));
1208 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
1215 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1217 template<
typename PROBLEM>
1225 const auto& dof_handler =
1226 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler();
1228 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
1230 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerEnd();
1231 GetIntegratorDataContainerFunc().InitializeEDC(pde.GetUpdateFlags(),
1232 *(pde.GetBaseProblem().GetSpaceTimeHandler()), element,
1233 this->GetParamData(), this->GetDomainData());
1234 auto& edc = GetIntegratorDataContainerFunc().GetElementDataContainer();
1236 for (; element[0] != endc[0]; element[0]++)
1238 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
1240 if (element[dh] == endc[dh])
1243 "Elementnumbers in DoFHandlers are not matching!",
1244 "Integrator::ComputeDomainScalar");
1249 ret += pde.ElementFunctional(edc);
1251 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
1261 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1263 template<
typename PROBLEM>
1271 ret += pde.PointFunctional(this->GetParamData(),
1272 this->GetDomainData());
1279 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1281 template<
typename PROBLEM>
1290 const auto& dof_handler =
1291 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler();
1292 auto element = pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
1293 auto endc = pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerEnd();
1295 GetIntegratorDataContainerFunc().InitializeFDC(pde.GetFaceUpdateFlags(),
1296 *(pde.GetBaseProblem().GetSpaceTimeHandler()),
1298 this->GetParamData(),
1299 this->GetDomainData());
1300 auto & fdc = GetIntegratorDataContainerFunc().GetFaceDataContainer();
1302 std::vector<unsigned int> boundary_functional_colors = pde.GetBoundaryFunctionalColors();
1303 bool need_boundary_integrals = (boundary_functional_colors.size() > 0);
1304 if(!need_boundary_integrals)
1306 throw DOpEException(
"No boundary colors given!",
"Integrator::ComputeBoundaryScalar");
1309 for (;element[0]!=endc[0]; element[0]++)
1311 for(
unsigned int dh=1; dh<dof_handler.size(); dh++)
1313 if( element[dh] == endc[dh])
1315 throw DOpEException(
"Elementnumbers in DoFHandlers are not matching!",
"Integrator::ComputeBoundaryScalar");
1319 if(need_boundary_integrals)
1321 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
1323 #if DEAL_II_VERSION_GTE(8,3,0)
1324 if (element[0]->face(face)->at_boundary()
1326 (find(boundary_functional_colors.begin(),boundary_functional_colors.end(),
1327 element[0]->face(face)->boundary_id()) != boundary_functional_colors.end()))
1329 if (element[0]->face(face)->at_boundary()
1331 (find(boundary_functional_colors.begin(),boundary_functional_colors.end(),
1332 element[0]->face(face)->boundary_indicator()) != boundary_functional_colors.end()))
1336 ret += pde.BoundaryFunctional(fdc);
1340 for(
unsigned int dh=1; dh<dof_handler.size(); dh++)
1352 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1354 template<
typename PROBLEM>
1364 const auto& dof_handler =
1365 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler();
1366 auto element = pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
1367 auto endc = pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerEnd();
1369 GetIntegratorDataContainerFunc().InitializeFDC(pde.GetFaceUpdateFlags(),
1370 *(pde.GetBaseProblem().GetSpaceTimeHandler()),
1372 this->GetParamData(),
1373 this->GetDomainData());
1374 auto & fdc = GetIntegratorDataContainerFunc().GetFaceDataContainer();
1376 bool need_faces = pde.HasFaces();
1379 throw DOpEException(
"No faces required!",
"Integrator::ComputeFaceScalar");
1382 for (;element[0]!=endc[0]; element[0]++)
1384 for(
unsigned int dh=1; dh<dof_handler.size(); dh++)
1386 if( element[dh] == endc[dh])
1388 throw DOpEException(
"Elementnumbers in DoFHandlers are not matching!",
"Integrator::ComputeFaceScalar");
1394 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
1396 if (element[0]->neighbor_index(face) != -1)
1399 ret +=pde.FaceFunctional(fdc);
1403 for(
unsigned int dh=1; dh<dof_handler.size(); dh++)
1413 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1415 template<
typename PROBLEM>
1423 ret = pde.AlgebraicFunctional(this->GetParamData(),
1424 this->GetDomainData());
1431 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1433 template<
typename PROBLEM>
1436 PROBLEM& pde, VECTOR &residual)
1439 pde.AlgebraicResidual(residual, this->GetParamData(),
1440 this->GetDomainData());
1442 AddPresetRightHandSide(-1.,residual);
1447 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1449 template<
typename PROBLEM>
1452 PROBLEM& pde, VECTOR &constraints)
1455 pde.ComputeLocalControlConstraints(constraints, this->GetParamData(),
1456 this->GetDomainData());
1461 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1463 template<
typename PROBLEM>
1466 PROBLEM& , VECTOR &)
1473 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1475 template<
typename PROBLEM>
1478 PROBLEM& pde, VECTOR &u)
1485 std::vector<unsigned int> dirichlet_colors = pde.GetDirichletColors();
1486 for (
unsigned int i = 0; i < dirichlet_colors.size(); i++)
1488 unsigned int color = dirichlet_colors[i];
1489 std::vector<bool> comp_mask = pde.GetDirichletCompMask(color);
1490 std::map<unsigned int, SCALAR> boundary_values;
1492 InterpolateBoundaryValues( pde.GetBaseProblem().GetSpaceTimeHandler()->GetMapping(),
1493 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler()[0],
1495 pde.GetDirichletValues(color, this->GetParamData(),
1496 this->GetDomainData()), boundary_values, comp_mask);
1498 for (
typename std::map<unsigned int, SCALAR>::const_iterator p =
1499 boundary_values.begin(); p != boundary_values.end(); p++)
1501 u(p->first) = p->second;
1508 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1510 template<
typename PROBLEM>
1513 PROBLEM& pde, VECTOR &u)
1518 pde.GetDoFConstraints().condense(u);
1519 std::vector<unsigned int> dirichlet_colors = pde.GetDirichletColors();
1520 for (
unsigned int i = 0; i < dirichlet_colors.size(); i++)
1522 unsigned int color = dirichlet_colors[i];
1523 std::vector<bool> comp_mask = pde.GetDirichletCompMask(color);
1524 std::map<unsigned int, SCALAR> boundary_values;
1526 InterpolateBoundaryValues( pde.GetBaseProblem().GetSpaceTimeHandler()->GetMapping(),
1527 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler()[0],
1528 color, dealii::ZeroFunction<dim>(comp_mask.size()),
1529 boundary_values, comp_mask);
1531 for (
typename std::map<unsigned int, SCALAR>::const_iterator p =
1532 boundary_values.begin(); p != boundary_values.end(); p++)
1534 u(p->first) = p->second;
1540 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1542 template<
typename PROBLEM,
typename MATRIX>
1545 PROBLEM& pde, MATRIX& matrix, VECTOR &rhs, VECTOR &sol)
1549 pde.GetDoFConstraints().condense(rhs);
1550 pde.GetDoFConstraints().condense(matrix);
1551 std::vector<unsigned int> dirichlet_colors = pde.GetDirichletColors();
1552 for (
unsigned int i = 0; i < dirichlet_colors.size(); i++)
1554 unsigned int color = dirichlet_colors[i];
1555 std::vector<bool> comp_mask = pde.GetDirichletCompMask(color);
1556 std::map<unsigned int, SCALAR> boundary_values;
1558 InterpolateBoundaryValues( pde.GetBaseProblem().GetSpaceTimeHandler()->GetMapping(),
1559 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler()[0],
1560 color, dealii::ZeroFunction<dim>(comp_mask.size()),
1561 boundary_values, comp_mask);
1563 dealii::MatrixTools::apply_boundary_values(boundary_values, matrix,
1570 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1574 std::string name,
const VECTOR* new_data)
1576 if (domain_data_.find(name) != domain_data_.end())
1579 "Adding multiple Data with name " + name +
" is prohibited!",
1580 "Integrator::AddDomainData");
1582 domain_data_.insert(
1583 std::pair<std::string, const VECTOR*>(name, new_data));
1588 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1594 typename std::map<std::string, const VECTOR *>::iterator it =
1595 domain_data_.find(name);
1596 if (it == domain_data_.end())
1599 "Deleting Data " + name +
" is impossible! Data not found",
1600 "Integrator::DeleteDomainData");
1602 domain_data_.erase(it);
1607 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1609 const std::map<std::string, const VECTOR*>&
1612 return domain_data_;
1617 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1621 std::string name,
const dealii::Vector<SCALAR>* new_data)
1623 if (param_data_.find(name) != param_data_.end())
1626 "Adding multiple Data with name " + name +
" is prohibited!",
1627 "Integrator::AddParamData");
1630 std::pair<std::string,
const dealii::Vector<SCALAR>*>(name,
1636 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1642 typename std::map<std::string, const dealii::Vector<SCALAR>*>::iterator it =
1643 param_data_.find(name);
1644 if (it == param_data_.end())
1647 "Deleting Data " + name +
" is impossible! Data not found",
1648 "Integrator::DeleteParamData");
1650 param_data_.erase(it);
1655 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1657 const std::map<std::string, const dealii::Vector<SCALAR>*>&
1665 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1667 template<
typename PROBLEM,
class STH,
class EDC,
class FDC>
1675 std::vector<double> element_sum(n_error_comps, 0);
1676 element_sum.resize(n_error_comps, 0);
1679 const auto& dof_handler =
1680 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler();
1682 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
1684 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerEnd();
1686 const auto& dof_handler_weight = dwrc.
GetWeightSTH().GetDoFHandler();
1687 auto element_weight = dwrc.
GetWeightSTH().GetDoFHandlerBeginActive();
1688 auto endc_high = dwrc.
GetWeightSTH().GetDoFHandlerEnd();
1692 GetIntegratorDataContainer().InitializeEDC(
1694 *(pde.GetBaseProblem().GetSpaceTimeHandler()), element,
1695 this->GetParamData(), this->GetDomainData());
1696 auto& edc = GetIntegratorDataContainer().GetElementDataContainer();
1698 dwrc.
GetWeightIDC().InitializeEDC(pde.GetUpdateFlags(),
1699 dwrc.
GetWeightSTH(), element_weight, this->GetParamData(),
1706 typename std::map<typename dealii::Triangulation<dim>::face_iterator,std::vector<double> >
1711 auto element_it = element[0];
1712 std::vector<double> face_init(n_error_comps,-1e20);
1713 for (; element_it != endc[0]; element_it++)
1715 for (
unsigned int face_no=0;face_no<GeometryInfo<dim>::faces_per_cell; ++face_no)
1717 face_integrals[element_it->face(face_no)] = face_init;
1726 GetIntegratorDataContainer().InitializeFDC(dwrc.
GetWeightIDC().GetFaceQuad(),
1727 pde.GetFaceUpdateFlags(),
1728 *(pde.GetBaseProblem().GetSpaceTimeHandler()),
1730 this->GetParamData(),
1731 this->GetDomainData(),
1733 auto & fdc = GetIntegratorDataContainer().GetFaceDataContainer();
1735 dwrc.
GetWeightIDC().InitializeFDC(pde.GetFaceUpdateFlags(),
1738 this->GetParamData(),
1742 for (
unsigned int element_index = 0; element[0] != endc[0];
1743 element[0]++, element_index++)
1745 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
1747 if (element[dh] == endc[dh])
1750 "Elementnumbers in DoFHandlers are not matching!",
1751 "Integrator::ComputeRefinementIndicators");
1754 for (
unsigned int dh = 0; dh < dof_handler_weight.size(); dh++)
1756 if (element_weight[dh] == endc_high[dh])
1759 "Elementnumbers in DoFHandlers are not matching!",
1760 "Integrator::ComputeRefinementIndicators");
1763 element_sum.clear();
1764 element_sum.resize(n_error_comps, 0);
1767 edc_weight.ReInit();
1770 pde.ElementErrorContribution(edc, dwrc, element_sum, 1.);
1771 for(
unsigned int l =0; l < n_error_comps; l ++)
1777 element_sum.clear();
1778 element_sum.resize(n_error_comps, 0);
1784 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
1786 auto face_it = element[0]->face(face);
1789 if(face_it->at_boundary())
1793 pde.BoundaryErrorContribution(fdc, dwrc, element_sum, 1.);
1795 Assert (face_integrals.find (element[0]->face(face)) != face_integrals.end(),
1796 ExcInternalError());
1797 Assert (face_integrals[element[0]->face(face)] == face_init,
1798 ExcInternalError());
1800 face_integrals[element[0]->face(face)] = element_sum;
1801 element_sum.clear();
1802 element_sum.resize(n_error_comps,0.);
1810 if (element[0]->neighbor(face)->has_children())
1813 std::vector<double> sum(n_error_comps,0.);
1814 for (
unsigned int subface_no=0;
1815 subface_no < element[0]->face(face)->n_children();
1820 fdc.ReInit(face, subface_no);
1824 pde.FaceErrorContribution(fdc, dwrc, element_sum, 1.);
1825 for(
unsigned int l =0; l < n_error_comps; l ++)
1827 sum[l] += element_sum[l];
1829 face_integrals[element[0]->neighbor_child_on_subface(face, subface_no)
1830 ->face(element[0]->neighbor_of_neighbor(face))] = element_sum;
1831 element_sum.clear();
1832 element_sum.resize(n_error_comps,0);
1835 Assert (face_integrals.find (element[0]->face(face)) != face_integrals.end(),
1836 ExcInternalError());
1837 Assert (face_integrals[element[0]->face(face)] == face_init,
1838 ExcInternalError());
1840 face_integrals[element[0]->face(face)] = sum;
1841 element_sum.clear();
1842 element_sum.resize(n_error_comps,0);
1848 Assert(element[0]->neighbor(face)->level() <= element[0]->level(),ExcInternalError());
1851 if(element[0]->level() == element[0]->neighbor(face)->level()
1852 && element[0]->index() < element[0]->neighbor(face)->index())
1858 pde.FaceErrorContribution(fdc, dwrc, element_sum, 1.);
1859 Assert (face_integrals.find (element[0]->face(face)) != face_integrals.end(),
1860 ExcInternalError());
1861 Assert (face_integrals[element[0]->face(face)] == face_init,
1862 ExcInternalError());
1864 face_integrals[element[0]->face(face)] = element_sum;
1865 element_sum.clear();
1866 element_sum.resize(n_error_comps,0);
1871 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
1875 for (
unsigned int dh = 0; dh < dof_handler_weight.size(); dh++)
1877 element_weight[dh]++;
1882 unsigned int present_element = 0;
1884 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
1886 element[0] !=endc[0]; element[0]++, ++present_element)
1888 for (
unsigned int face_no = 0;
1889 face_no < GeometryInfo<dim>::faces_per_cell; ++face_no)
1892 face_integrals.find(element[0]->face(face_no)) != face_integrals.end(),
1893 ExcInternalError());
1894 if(element[0]->face(face_no)->at_boundary())
1896 for(
unsigned int l =0; l < n_error_comps; l ++)
1899 face_integrals[element[0]->face(face_no)][l];
1908 for(
unsigned int l =0; l < n_error_comps; l ++)
1911 0.5*face_integrals[element[0]->face(face_no)][l];
1924 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
1926 template<
typename PROBLEM>
1933 std::vector<double> element_sum(2, 0);
1934 element_sum.resize(2, 0);
1936 const auto& dof_handler =
1937 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandler();
1939 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
1941 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerEnd();
1947 for (; wd != wend; wd++)
1949 AddDomainData(wd->first, wd->second);
1955 GetIntegratorDataContainer().InitializeEDC(pde.GetUpdateFlags(),
1956 *(pde.GetBaseProblem().GetSpaceTimeHandler()), element,
1957 this->GetParamData(), this->GetDomainData());
1958 auto& edc = GetIntegratorDataContainer().GetElementDataContainer();
1961 typename std::map<typename dealii::Triangulation<dim>::face_iterator,std::vector<double> >
1964 auto element_it = element[0];
1965 std::vector<double> face_init(2,-1e20);
1966 for (; element_it != endc[0]; element_it++)
1968 for (
unsigned int face_no=0;face_no<GeometryInfo<dim>::faces_per_cell; ++face_no)
1970 face_integrals[element_it->face(face_no)] = face_init;
1979 GetIntegratorDataContainer().InitializeFDC(
1980 pde.GetFaceUpdateFlags(),
1981 *(pde.GetBaseProblem().GetSpaceTimeHandler()),
1983 this->GetParamData(),
1984 this->GetDomainData(),
1986 auto & fdc = GetIntegratorDataContainer().GetFaceDataContainer();
1988 for (
unsigned int element_index = 0; element[0] != endc[0];
1989 element[0]++, element_index++)
1991 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
1993 if (element[dh] == endc[dh])
1996 "Elementnumbers in DoFHandlers are not matching!",
1997 "Integrator::ComputeRefinementIndicators");
2001 element_sum.clear();
2002 element_sum.resize(2, 0);
2007 pde.ElementErrorContribution(edc, dwrc, element_sum, 1.);
2010 element_sum.clear();
2011 element_sum.resize(2, 0);
2016 for (
unsigned int face=0; face < dealii::GeometryInfo<dim>::faces_per_cell; ++face)
2018 auto face_it = element[0]->face(face);
2021 if(face_it->at_boundary())
2024 #if deal_II_dimension > 1
2025 dwrc.
InitFace(element[0]->face(face)->diameter());
2027 dwrc.
InitFace(element[0]->diameter());
2029 pde.BoundaryErrorContribution(fdc, dwrc, element_sum, 1.);
2031 Assert (face_integrals.find (element[0]->face(face)) != face_integrals.end(),
2032 ExcInternalError());
2033 Assert (face_integrals[element[0]->face(face)] == face_init,
2034 ExcInternalError());
2035 face_integrals[element[0]->face(face)] = element_sum;
2036 element_sum.clear();
2037 element_sum.resize(2,0.);
2045 if (element[0]->neighbor(face)->has_children())
2048 std::vector<double> sum(2,0.);
2049 for (
unsigned int subface_no=0;
2050 subface_no < element[0]->face(face)->n_children();
2055 fdc.ReInit(face, subface_no);
2057 #if deal_II_dimension > 1
2058 dwrc.
InitFace(element[0]->face(face)->diameter());
2060 dwrc.
InitFace(element[0]->diameter());
2063 pde.FaceErrorContribution(fdc, dwrc, element_sum, 1.);
2064 sum[0]= element_sum[0];
2065 sum[1]= element_sum[1];
2066 element_sum.clear();
2067 element_sum.resize(2,0);
2068 face_integrals[element[0]->neighbor_child_on_subface(face, subface_no)
2069 ->face(element[0]->neighbor_of_neighbor(face))] = element_sum;
2070 element_sum.clear();
2071 element_sum.resize(2,0.);
2074 Assert (face_integrals.find (element[0]->face(face)) != face_integrals.end(),
2075 ExcInternalError());
2076 Assert (face_integrals[element[0]->face(face)] == face_init,
2077 ExcInternalError());
2079 face_integrals[element[0]->face(face)] = sum;
2086 Assert(element[0]->neighbor(face)->level() <= element[0]->level(),ExcInternalError());
2089 if(element[0]->level() == element[0]->neighbor(face)->level()
2090 && element[0]->index() < element[0]->neighbor(face)->index())
2094 #if deal_II_dimension > 1
2095 dwrc.
InitFace(element[0]->face(face)->diameter());
2097 dwrc.
InitFace(element[0]->diameter());
2100 pde.FaceErrorContribution(fdc, dwrc, element_sum, 1.);
2101 Assert (face_integrals.find (element[0]->face(face)) != face_integrals.end(),
2102 ExcInternalError());
2103 Assert (face_integrals[element[0]->face(face)] == face_init,
2104 ExcInternalError());
2106 face_integrals[element[0]->face(face)] = element_sum;
2107 element_sum.clear();
2108 element_sum.resize(2,0);
2115 for (
unsigned int dh = 1; dh < dof_handler.size(); dh++)
2122 unsigned int present_element = 0;
2124 pde.GetBaseProblem().GetSpaceTimeHandler()->GetDoFHandlerBeginActive();
2126 element[0] !=endc[0]; element[0]++, ++present_element)
2127 for (
unsigned int face_no = 0;
2128 face_no < GeometryInfo<dim>::faces_per_cell; ++face_no)
2131 face_integrals.find(element[0]->face(face_no)) != face_integrals.end(),
2132 ExcInternalError());
2134 0.5 * face_integrals[element[0]->face(face_no)][0];
2136 0.5 * face_integrals[element[0]->face(face_no)][1];
2142 for (; wd != wend; wd++)
2144 DeleteDomainData(wd->first);
2151 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
2161 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
2171 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
2173 template<
template<
int,
int>
class DH>
2178 const unsigned int color,
const dealii::Function<dim>&
function,
2179 std::map<unsigned int, SCALAR>& boundary_values,
2180 const std::vector<bool>& comp_mask)
const
2184 dealii::VectorTools::interpolate_boundary_values(mapping[0],
2186 boundary_values, comp_mask);
2190 template<
typename INTEGRATORDATACONT,
typename VECTOR,
typename SCALAR,
2194 VECTOR &residual)
const
2196 typename std::map<std::string, const VECTOR *>::const_iterator it =
2197 domain_data_.find(
"fixed_rhs");
2198 if (it != domain_data_.end())
2200 assert(residual.size() == it->second->size());
2201 residual.add(s,*(it->second));
SCALAR ComputeDomainScalar(PROBLEM &pde)
Definition: integrator.h:1219
Definition: mapping_wrapper.h:48
const std::map< std::string, const VECTOR * > & GetWeightData() const
Definition: dwrdatacontainer.h:398
SCALAR ComputeBoundaryScalar(PROBLEM &pde)
Definition: integrator.h:1283
void AddParamData(std::string name, const dealii::Vector< SCALAR > *new_data)
Definition: integrator.h:1620
void ComputeNonlinearLhs(PROBLEM &pde, VECTOR &residual, bool apply_boundary_values=true)
Definition: integrator.h:724
virtual EDC & GetElementWeight() const =0
~Integrator()
Definition: integrator.h:525
SCALAR ComputePointScalar(PROBLEM &pde)
Definition: integrator.h:1265
Definition: integrator.h:57
void ApplyInitialBoundaryValues(PROBLEM &pde, VECTOR &u)
Definition: integrator.h:1477
Vector< double > & GetPrimalErrorIndicators()
Definition: dwrdatacontainer.h:233
void ComputeLocalControlConstraints(PROBLEM &pde, VECTOR &constraints)
Definition: integrator.h:1451
void ComputeMatrix(PROBLEM &pde, MATRIX &matrix)
Definition: integrator.h:1023
const DOFHANDLER< dim, dim > & GetDEALDoFHandler() const
Definition: dofhandler_wrapper.h:69
void ComputeRefinementIndicators(PROBLEM &pde, DWRDataContainer< STH, INTEGRATORDATACONT, EDC, FDC, VECTOR > &dwrc)
Definition: integrator.h:1669
const Vector< double > & GetErrorIndicators() const
Definition: dwrdatacontainer.h:213
const std::map< std::string, const dealii::Vector< SCALAR > * > & GetParamData() const
Definition: integrator.h:1658
INTEGRATORDATACONT & GetIntegratorDataContainerFunc() const
Definition: integrator.h:2164
Vector< double > & GetDualErrorIndicators()
Definition: dwrdatacontainer.h:251
virtual STH & GetWeightSTH()=0
SCALAR ComputeFaceScalar(PROBLEM &pde)
Definition: integrator.h:1356
void AddPresetRightHandSide(double s, VECTOR &residual) const
Definition: integrator.h:2193
void DeleteParamData(std::string name)
Definition: integrator.h:1639
void DeleteDomainData(std::string name)
Definition: integrator.h:1591
Integrator(INTEGRATORDATACONT &idc1)
Definition: integrator.h:507
Definition: residualestimator.h:38
SCALAR ComputeAlgebraicScalar(PROBLEM &pde)
Definition: integrator.h:1417
void AddDomainData(std::string name, const VECTOR *new_data)
Definition: integrator.h:1573
void ApplyTransposedInitialBoundaryValues(PROBLEM &pde, VECTOR &u)
Definition: integrator.h:1465
virtual FDC & GetFaceWeight() const =0
INTEGRATORDATACONT & GetIntegratorDataContainer() const
Definition: integrator.h:2154
unsigned int GetNErrorComps() const
Definition: dwrdatacontainer.h:317
virtual void InitFace(double)=0
void ReInit()
Definition: integrator.h:535
virtual IDC & GetWeightIDC()=0
Definition: dopeexception.h:35
void ApplyNewtonBoundaryValues(PROBLEM &pde, VECTOR &u)
Definition: integrator.h:1512
void ComputeNonlinearAlgebraicResidual(PROBLEM &pde, VECTOR &residual)
Definition: integrator.h:1435
Definition: dwrdatacontainer.h:545
void ComputeNonlinearRhs(PROBLEM &pde, VECTOR &residual, bool apply_boundary_values=true)
Definition: integrator.h:891
virtual void InitElement(double)=0
void ComputeNonlinearResidual(PROBLEM &pde, VECTOR &residual, bool apply_boundary_values=true)
Definition: integrator.h:546
const std::map< std::string, const VECTOR * > & GetDomainData() const
Definition: integrator.h:1610