24 #ifndef PDE_INTERFACE_H_
25 #define PDE_INTERFACE_H_
30 #include <fe/fe_system.h>
31 #include <fe/fe_values.h>
32 #include <fe/mapping.h>
33 #include <lac/full_matrix.h>
34 #include <base/function.h>
63 template<
template<
int,
int>
class DH,
typename VECTOR,
int dealdim>
class EDC,
64 template<template<int, int> class DH, typename VECTOR, int dealdim> class FDC,
65 template<int, int> class DH, typename VECTOR, int dealdim>
100 ElementEquation(
const EDC<DH, VECTOR, dealdim>& ,
101 dealii::Vector<double> &,
124 StrongElementResidual(
const EDC<DH, VECTOR, dealdim>& ,
125 const EDC<DH, VECTOR, dealdim>& ,
153 ElementTimeEquation(
const EDC<DH, VECTOR, dealdim>& ,
154 dealii::Vector<double> &,
178 ElementTimeEquation_U(
const EDC<DH, VECTOR, dealdim>& ,
179 dealii::Vector<double> &,
200 ElementTimeEquation_UT(
const EDC<DH, VECTOR, dealdim>& ,
201 dealii::Vector<double> &,
225 ElementTimeEquation_UTT(
const EDC<DH, VECTOR, dealdim>& ,
226 dealii::Vector<double> &,
249 ElementTimeEquationExplicit(
const EDC<DH, VECTOR, dealdim>& ,
250 dealii::Vector<double> &,
267 ElementTimeEquationExplicit_U(
const EDC<DH, VECTOR, dealdim>& ,
268 dealii::Vector<double> &,
287 ElementTimeEquationExplicit_UT(
const EDC<DH, VECTOR, dealdim>& ,
288 dealii::Vector<double> &,
306 ElementTimeEquationExplicit_UTT(
const EDC<DH, VECTOR, dealdim>& ,
307 dealii::Vector<double> &,
327 ElementTimeEquationExplicit_UU(
const EDC<DH, VECTOR, dealdim>& ,
328 dealii::Vector<double> &,
356 ElementEquation_U(
const EDC<DH, VECTOR, dealdim>& ,
357 dealii::Vector<double> &,
379 StrongElementResidual_U(
const EDC<DH, VECTOR, dealdim>& ,
380 const EDC<DH, VECTOR, dealdim>& ,
409 ElementEquation_UT(
const EDC<DH, VECTOR, dealdim>& ,
410 dealii::Vector<double> &,
441 ElementEquation_UTT(
const EDC<DH, VECTOR, dealdim>& ,
442 dealii::Vector<double> &,
474 ElementEquation_Q(
const EDC<DH, VECTOR, dealdim>& ,
475 dealii::Vector<double> &,
506 ElementEquation_QT(
const EDC<DH, VECTOR, dealdim>& ,
507 dealii::Vector<double> &,
534 ElementEquation_QTT(
const EDC<DH, VECTOR, dealdim>& ,
535 dealii::Vector<double> &,
563 ElementEquation_UU(
const EDC<DH, VECTOR, dealdim>& ,
564 dealii::Vector<double> &,
594 ElementEquation_QU(
const EDC<DH, VECTOR, dealdim>& ,
595 dealii::Vector<double> &,
622 ElementEquation_UQ(
const EDC<DH, VECTOR, dealdim>& ,
623 dealii::Vector<double> &,
649 ElementEquation_QQ(
const EDC<DH, VECTOR, dealdim>& ,
650 dealii::Vector<double> &,
669 ElementRightHandSide(
const EDC<DH, VECTOR, dealdim>& ,
670 dealii::Vector<double> &,
697 ElementMatrix(
const EDC<DH, VECTOR, dealdim>& ,
698 dealii::FullMatrix<double> &,
717 ElementTimeMatrix(
const EDC<DH, VECTOR, dealdim>& ,
718 dealii::FullMatrix<double> &);
732 ElementTimeMatrix_T(
const EDC<DH, VECTOR, dealdim>& ,
733 dealii::FullMatrix<double> &);
750 ElementTimeMatrixExplicit(
const EDC<DH, VECTOR, dealdim>& ,
751 dealii::FullMatrix<double> &);
765 ElementTimeMatrixExplicit_T(
const EDC<DH, VECTOR, dealdim>& ,
766 dealii::FullMatrix<double> &);
794 ElementMatrix_T(
const EDC<DH, VECTOR, dealdim>& ,
795 dealii::FullMatrix<double> &,
817 ControlElementEquation(
const EDC<DH, VECTOR, dealdim>& ,
818 dealii::Vector<double> &,
833 ControlElementMatrix(
const EDC<DH, VECTOR, dealdim>& ,
834 dealii::FullMatrix<double> &,
854 StrongElementResidual_Control(
const EDC<DH, VECTOR, dealdim>& ,
855 const EDC<DH, VECTOR, dealdim>& ,
877 StrongFaceResidual_Control(
const FDC<DH, VECTOR, dealdim>& ,
878 const FDC<DH, VECTOR, dealdim>& ,
900 StrongBoundaryResidual_Control(
const FDC<DH, VECTOR, dealdim>& ,
901 const FDC<DH, VECTOR, dealdim>& ,
917 FaceEquation(
const FDC<DH, VECTOR, dealdim>& ,
918 dealii::Vector<double> &,
924 StrongFaceResidual(
const FDC<DH, VECTOR, dealdim>& ,
925 const FDC<DH, VECTOR, dealdim>& ,
932 FaceEquation_U(
const FDC<DH, VECTOR, dealdim>& ,
933 dealii::Vector<double> &,
940 StrongFaceResidual_U(
const FDC<DH, VECTOR, dealdim>& ,
941 const FDC<DH, VECTOR, dealdim>& ,
948 FaceEquation_UT(
const FDC<DH, VECTOR, dealdim>& ,
949 dealii::Vector<double> &,
956 FaceEquation_UTT(
const FDC<DH, VECTOR, dealdim>& ,
957 dealii::Vector<double> &,
964 FaceEquation_Q(
const FDC<DH, VECTOR, dealdim>& ,
965 dealii::Vector<double> &,
972 FaceEquation_QT(
const FDC<DH, VECTOR, dealdim>& ,
973 dealii::Vector<double> &,
980 FaceEquation_QTT(
const FDC<DH, VECTOR, dealdim>& ,
981 dealii::Vector<double> &,
988 FaceEquation_UU(
const FDC<DH, VECTOR, dealdim>& ,
989 dealii::Vector<double> &,
996 FaceEquation_QU(
const FDC<DH, VECTOR, dealdim>& ,
997 dealii::Vector<double> &,
1004 FaceEquation_UQ(
const FDC<DH, VECTOR, dealdim>& ,
1005 dealii::Vector<double> &,
1012 FaceEquation_QQ(
const FDC<DH, VECTOR, dealdim>& ,
1013 dealii::Vector<double> &,
1020 FaceRightHandSide(
const FDC<DH, VECTOR, dealdim>& ,
1021 dealii::Vector<double> &,
1030 FaceMatrix(
const FDC<DH, VECTOR, dealdim>& ,
1031 dealii::FullMatrix<double> &,
1038 FaceMatrix_T(
const FDC<DH, VECTOR, dealdim>& ,
1039 dealii::FullMatrix<double> &,
1047 InterfaceMatrix(
const FDC<DH, VECTOR, dealdim>& ,
1048 dealii::FullMatrix<double> &,
1055 InterfaceMatrix_T(
const FDC<DH, VECTOR, dealdim>& ,
1056 dealii::FullMatrix<double> &,
1063 InterfaceEquation(
const FDC<DH, VECTOR, dealdim>& ,
1064 dealii::Vector<double> &,
1071 InterfaceEquation_U(
const FDC<DH, VECTOR, dealdim>& ,
1072 dealii::Vector<double> &,
1080 BoundaryEquation(
const FDC<DH, VECTOR, dealdim>& ,
1081 dealii::Vector<double> &,
1088 StrongBoundaryResidual(
const FDC<DH, VECTOR, dealdim>& ,
1089 const FDC<DH, VECTOR, dealdim>& ,
1096 BoundaryEquation_U(
const FDC<DH, VECTOR, dealdim>&,
1097 dealii::Vector<double> &,
1104 StrongBoundaryResidual_U(
const FDC<DH, VECTOR, dealdim>& ,
1105 const FDC<DH, VECTOR, dealdim>& ,
1112 BoundaryEquation_UT(
const FDC<DH, VECTOR, dealdim>& ,
1113 dealii::Vector<double> &,
1120 BoundaryEquation_UTT(
const FDC<DH, VECTOR, dealdim>& ,
1121 dealii::Vector<double> &,
1128 BoundaryEquation_Q(
const FDC<DH, VECTOR, dealdim>& ,
1129 dealii::Vector<double> &,
1136 BoundaryEquation_QT(
const FDC<DH, VECTOR, dealdim>& ,
1137 dealii::Vector<double> &,
1144 BoundaryEquation_QTT(
const FDC<DH, VECTOR, dealdim>& ,
1145 dealii::Vector<double> &,
1152 BoundaryEquation_UU(
const FDC<DH, VECTOR, dealdim>& ,
1153 dealii::Vector<double> &,
1160 BoundaryEquation_QU(
const FDC<DH, VECTOR, dealdim>& ,
1161 dealii::Vector<double> &,
1168 BoundaryEquation_UQ(
const FDC<DH, VECTOR, dealdim>& ,
1169 dealii::Vector<double> &,
1176 BoundaryEquation_QQ(
const FDC<DH, VECTOR, dealdim>& ,
1177 dealii::Vector<double> &,
1184 BoundaryRightHandSide(
const FDC<DH, VECTOR, dealdim>& ,
1185 dealii::Vector<double> &,
1191 BoundaryMatrix(
const FDC<DH, VECTOR, dealdim>& ,
1192 dealii::FullMatrix<double> &,
1199 BoundaryMatrix_T(
const FDC<DH, VECTOR, dealdim>& ,
1200 dealii::FullMatrix<double> &,
1221 dealii::Vector<double> &local_vector,
1226 edc.GetFEValuesState();
1227 unsigned int n_dofs_per_element = edc.GetNDoFsPerElement();
1228 unsigned int n_q_points = edc.GetNQPoints();
1229 std::vector<dealii::Vector<double> > uvalues;
1230 uvalues.resize(n_q_points,
1231 dealii::Vector<double>(this->GetStateNComponents()));
1232 edc.GetValuesState(
"last_newton_solution", uvalues);
1234 dealii::Vector<double> f_values(
1235 dealii::Vector<double>(this->GetStateNComponents()));
1237 for (
unsigned int q_point = 0; q_point < n_q_points; q_point++)
1239 for (
unsigned int i = 0; i < n_dofs_per_element; i++)
1241 for (
unsigned int comp = 0; comp < this->GetStateNComponents();
1244 local_vector(i) += scale
1245 * (state_fe_values.shape_value_component(i, q_point, comp)
1246 * uvalues[q_point](comp))
1247 * state_fe_values.JxW(q_point);
1255 dealii::Vector<double> &,
double )
1261 dealii::Vector<double> &,
double )
1267 dealii::Vector<double> &,
double )
1273 dealii::Vector<double> &,
double )
1280 const EDC<DH, VECTOR, dealdim>& edc,
1281 dealii::Vector<double> &local_vector,
1285 edc.GetFEValuesState();
1286 unsigned int n_dofs_per_element = edc.GetNDoFsPerElement();
1287 unsigned int n_q_points = edc.GetNQPoints();
1289 dealii::Vector<double> f_values(
1290 dealii::Vector<double>(this->GetStateNComponents()));
1292 for (
unsigned int q_point = 0; q_point < n_q_points; q_point++)
1294 init_values->vector_value(state_fe_values.quadrature_point(q_point),
1297 for (
unsigned int i = 0; i < n_dofs_per_element; i++)
1299 for (
unsigned int comp = 0; comp < this->GetStateNComponents();
1302 local_vector(i) += scale
1304 * state_fe_values.shape_value_component(i, q_point,
1305 comp)) * state_fe_values.JxW(q_point);
1313 dealii::FullMatrix<double> &local_entry_matrix,
1318 edc.GetFEValuesState();
1319 unsigned int n_dofs_per_element = edc.GetNDoFsPerElement();
1320 unsigned int n_q_points = edc.GetNQPoints();
1322 for (
unsigned int q_point = 0; q_point < n_q_points; q_point++)
1324 for (
unsigned int i = 0; i < n_dofs_per_element; i++)
1326 for (
unsigned int j = 0; j < n_dofs_per_element; j++)
1328 for (
unsigned int comp = 0; comp < this->GetStateNComponents();
1331 local_entry_matrix(i, j) += scale
1332 * state_fe_values.shape_value_component(i, q_point, comp)
1333 * state_fe_values.shape_value_component(j, q_point, comp)
1334 * state_fe_values.JxW(q_point);
1346 virtual dealii::UpdateFlags
1347 GetUpdateFlags()
const;
1353 virtual dealii::UpdateFlags
1354 GetFaceUpdateFlags()
const;
1365 HasInterfaces()
const;
1370 SetProblemType(std::string type);
1374 virtual unsigned int
1375 GetControlNBlocks()
const;
1376 virtual unsigned int
1377 GetStateNBlocks()
const;
1378 virtual std::vector<unsigned int>&
1379 GetControlBlockComponent();
1380 virtual const std::vector<unsigned int>&
1381 GetControlBlockComponent()
const;
1382 virtual std::vector<unsigned int>&
1383 GetStateBlockComponent();
1384 virtual const std::vector<unsigned int>&
1385 GetStateBlockComponent()
const;
1397 GetStateNComponents()
const;
virtual void Init_ElementRhs(const dealii::Function< dealdim > *init_values, const EDC< DH, VECTOR, dealdim > &edc, dealii::Vector< double > &local_vector, double scale)
Definition: pdeinterface.h:1279
boost::function1< void, dealii::Vector< double > & > VectorResidualModifier
Definition: pdeinterface.h:1407
virtual void Init_ElementRhs_QT(const EDC< DH, VECTOR, dealdim > &, dealii::Vector< double > &, double)
Definition: pdeinterface.h:1260
virtual void Init_ElementEquation(const EDC< DH, VECTOR, dealdim > &edc, dealii::Vector< double > &local_vector, double scale, double)
Definition: pdeinterface.h:1220
Definition: pdeinterface.h:66
boost::function1< void, double & > ResidualModifier
Definition: pdeinterface.h:1406
virtual void Init_ElementRhs_QTT(const EDC< DH, VECTOR, dealdim > &, dealii::Vector< double > &, double)
Definition: pdeinterface.h:1266
virtual void Init_ElementRhs_QQ(const EDC< DH, VECTOR, dealdim > &, dealii::Vector< double > &, double)
Definition: pdeinterface.h:1272
virtual void Init_ElementMatrix(const EDC< DH, VECTOR, dealdim > &edc, dealii::FullMatrix< double > &local_entry_matrix, double scale, double)
Definition: pdeinterface.h:1312
std::string problem_type_
Definition: pdeinterface.h:1410
Definition: fevalues_wrapper.h:43
virtual void SetTime(double) const
Definition: pdeinterface.h:1390
virtual void Init_ElementRhs_Q(const EDC< DH, VECTOR, dealdim > &, dealii::Vector< double > &, double)
Definition: pdeinterface.h:1254