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> &);
853 StrongElementResidual_Control(
const EDC<DH, VECTOR, dealdim>& ,
854 const EDC<DH, VECTOR, dealdim>& ,
876 StrongFaceResidual_Control(
const FDC<DH, VECTOR, dealdim>& ,
877 const FDC<DH, VECTOR, dealdim>& ,
899 StrongBoundaryResidual_Control(
const FDC<DH, VECTOR, dealdim>& ,
900 const FDC<DH, VECTOR, dealdim>& ,
916 FaceEquation(
const FDC<DH, VECTOR, dealdim>& ,
917 dealii::Vector<double> &,
923 StrongFaceResidual(
const FDC<DH, VECTOR, dealdim>& ,
924 const FDC<DH, VECTOR, dealdim>& ,
931 FaceEquation_U(
const FDC<DH, VECTOR, dealdim>& ,
932 dealii::Vector<double> &,
939 StrongFaceResidual_U(
const FDC<DH, VECTOR, dealdim>& ,
940 const FDC<DH, VECTOR, dealdim>& ,
947 FaceEquation_UT(
const FDC<DH, VECTOR, dealdim>& ,
948 dealii::Vector<double> &,
955 FaceEquation_UTT(
const FDC<DH, VECTOR, dealdim>& ,
956 dealii::Vector<double> &,
963 FaceEquation_Q(
const FDC<DH, VECTOR, dealdim>& ,
964 dealii::Vector<double> &,
971 FaceEquation_QT(
const FDC<DH, VECTOR, dealdim>& ,
972 dealii::Vector<double> &,
979 FaceEquation_QTT(
const FDC<DH, VECTOR, dealdim>& ,
980 dealii::Vector<double> &,
987 FaceEquation_UU(
const FDC<DH, VECTOR, dealdim>& ,
988 dealii::Vector<double> &,
995 FaceEquation_QU(
const FDC<DH, VECTOR, dealdim>& ,
996 dealii::Vector<double> &,
1003 FaceEquation_UQ(
const FDC<DH, VECTOR, dealdim>& ,
1004 dealii::Vector<double> &,
1011 FaceEquation_QQ(
const FDC<DH, VECTOR, dealdim>& ,
1012 dealii::Vector<double> &,
1019 FaceRightHandSide(
const FDC<DH, VECTOR, dealdim>& ,
1020 dealii::Vector<double> &,
1029 FaceMatrix(
const FDC<DH, VECTOR, dealdim>& ,
1030 dealii::FullMatrix<double> &,
1037 FaceMatrix_T(
const FDC<DH, VECTOR, dealdim>& ,
1038 dealii::FullMatrix<double> &,
1046 InterfaceMatrix(
const FDC<DH, VECTOR, dealdim>& ,
1047 dealii::FullMatrix<double> &,
1054 InterfaceMatrix_T(
const FDC<DH, VECTOR, dealdim>& ,
1055 dealii::FullMatrix<double> &,
1062 InterfaceEquation(
const FDC<DH, VECTOR, dealdim>& ,
1063 dealii::Vector<double> &,
1070 InterfaceEquation_U(
const FDC<DH, VECTOR, dealdim>& ,
1071 dealii::Vector<double> &,
1079 BoundaryEquation(
const FDC<DH, VECTOR, dealdim>& ,
1080 dealii::Vector<double> &,
1087 StrongBoundaryResidual(
const FDC<DH, VECTOR, dealdim>& ,
1088 const FDC<DH, VECTOR, dealdim>& ,
1095 BoundaryEquation_U(
const FDC<DH, VECTOR, dealdim>&,
1096 dealii::Vector<double> &,
1103 StrongBoundaryResidual_U(
const FDC<DH, VECTOR, dealdim>& ,
1104 const FDC<DH, VECTOR, dealdim>& ,
1111 BoundaryEquation_UT(
const FDC<DH, VECTOR, dealdim>& ,
1112 dealii::Vector<double> &,
1119 BoundaryEquation_UTT(
const FDC<DH, VECTOR, dealdim>& ,
1120 dealii::Vector<double> &,
1127 BoundaryEquation_Q(
const FDC<DH, VECTOR, dealdim>& ,
1128 dealii::Vector<double> &,
1135 BoundaryEquation_QT(
const FDC<DH, VECTOR, dealdim>& ,
1136 dealii::Vector<double> &,
1143 BoundaryEquation_QTT(
const FDC<DH, VECTOR, dealdim>& ,
1144 dealii::Vector<double> &,
1151 BoundaryEquation_UU(
const FDC<DH, VECTOR, dealdim>& ,
1152 dealii::Vector<double> &,
1159 BoundaryEquation_QU(
const FDC<DH, VECTOR, dealdim>& ,
1160 dealii::Vector<double> &,
1167 BoundaryEquation_UQ(
const FDC<DH, VECTOR, dealdim>& ,
1168 dealii::Vector<double> &,
1175 BoundaryEquation_QQ(
const FDC<DH, VECTOR, dealdim>& ,
1176 dealii::Vector<double> &,
1183 BoundaryRightHandSide(
const FDC<DH, VECTOR, dealdim>& ,
1184 dealii::Vector<double> &,
1190 BoundaryMatrix(
const FDC<DH, VECTOR, dealdim>& ,
1191 dealii::FullMatrix<double> &,
1198 BoundaryMatrix_T(
const FDC<DH, VECTOR, dealdim>& ,
1199 dealii::FullMatrix<double> &,
1220 dealii::Vector<double> &local_vector,
1225 edc.GetFEValuesState();
1226 unsigned int n_dofs_per_element = edc.GetNDoFsPerElement();
1227 unsigned int n_q_points = edc.GetNQPoints();
1228 std::vector<dealii::Vector<double> > uvalues;
1229 uvalues.resize(n_q_points,
1230 dealii::Vector<double>(this->GetStateNComponents()));
1231 edc.GetValuesState(
"last_newton_solution", uvalues);
1233 dealii::Vector<double> f_values(
1234 dealii::Vector<double>(this->GetStateNComponents()));
1236 for (
unsigned int q_point = 0; q_point < n_q_points; q_point++)
1238 for (
unsigned int i = 0; i < n_dofs_per_element; i++)
1240 for (
unsigned int comp = 0; comp < this->GetStateNComponents();
1243 local_vector(i) += scale
1244 * (state_fe_values.shape_value_component(i, q_point, comp)
1245 * uvalues[q_point](comp))
1246 * state_fe_values.JxW(q_point);
1254 dealii::Vector<double> &,
double )
1260 dealii::Vector<double> &,
double )
1266 dealii::Vector<double> &,
double )
1272 dealii::Vector<double> &,
double )
1279 const EDC<DH, VECTOR, dealdim>& edc,
1280 dealii::Vector<double> &local_vector,
1284 edc.GetFEValuesState();
1285 unsigned int n_dofs_per_element = edc.GetNDoFsPerElement();
1286 unsigned int n_q_points = edc.GetNQPoints();
1288 dealii::Vector<double> f_values(
1289 dealii::Vector<double>(this->GetStateNComponents()));
1291 for (
unsigned int q_point = 0; q_point < n_q_points; q_point++)
1293 init_values->vector_value(state_fe_values.quadrature_point(q_point),
1296 for (
unsigned int i = 0; i < n_dofs_per_element; i++)
1298 for (
unsigned int comp = 0; comp < this->GetStateNComponents();
1301 local_vector(i) += scale
1303 * state_fe_values.shape_value_component(i, q_point,
1304 comp)) * state_fe_values.JxW(q_point);
1312 dealii::FullMatrix<double> &local_entry_matrix,
1317 edc.GetFEValuesState();
1318 unsigned int n_dofs_per_element = edc.GetNDoFsPerElement();
1319 unsigned int n_q_points = edc.GetNQPoints();
1321 for (
unsigned int q_point = 0; q_point < n_q_points; q_point++)
1323 for (
unsigned int i = 0; i < n_dofs_per_element; i++)
1325 for (
unsigned int j = 0; j < n_dofs_per_element; j++)
1327 for (
unsigned int comp = 0; comp < this->GetStateNComponents();
1330 local_entry_matrix(i, j) += scale
1331 * state_fe_values.shape_value_component(i, q_point, comp)
1332 * state_fe_values.shape_value_component(j, q_point, comp)
1333 * state_fe_values.JxW(q_point);
1345 virtual dealii::UpdateFlags
1346 GetUpdateFlags()
const;
1352 virtual dealii::UpdateFlags
1353 GetFaceUpdateFlags()
const;
1364 HasInterfaces()
const;
1369 SetProblemType(std::string type);
1373 virtual unsigned int
1374 GetControlNBlocks()
const;
1375 virtual unsigned int
1376 GetStateNBlocks()
const;
1377 virtual std::vector<unsigned int>&
1378 GetControlBlockComponent();
1379 virtual const std::vector<unsigned int>&
1380 GetControlBlockComponent()
const;
1381 virtual std::vector<unsigned int>&
1382 GetStateBlockComponent();
1383 virtual const std::vector<unsigned int>&
1384 GetStateBlockComponent()
const;
1396 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:1278
boost::function1< void, dealii::Vector< double > & > VectorResidualModifier
Definition: pdeinterface.h:1406
virtual void Init_ElementRhs_QT(const EDC< DH, VECTOR, dealdim > &, dealii::Vector< double > &, double)
Definition: pdeinterface.h:1259
virtual void Init_ElementEquation(const EDC< DH, VECTOR, dealdim > &edc, dealii::Vector< double > &local_vector, double scale, double)
Definition: pdeinterface.h:1219
Definition: pdeinterface.h:66
boost::function1< void, double & > ResidualModifier
Definition: pdeinterface.h:1405
virtual void Init_ElementRhs_QTT(const EDC< DH, VECTOR, dealdim > &, dealii::Vector< double > &, double)
Definition: pdeinterface.h:1265
virtual void Init_ElementRhs_QQ(const EDC< DH, VECTOR, dealdim > &, dealii::Vector< double > &, double)
Definition: pdeinterface.h:1271
virtual void Init_ElementMatrix(const EDC< DH, VECTOR, dealdim > &edc, dealii::FullMatrix< double > &local_entry_matrix, double scale, double)
Definition: pdeinterface.h:1311
Definition: fevalues_wrapper.h:43
virtual void SetTime(double) const
Definition: pdeinterface.h:1389
virtual void Init_ElementRhs_Q(const EDC< DH, VECTOR, dealdim > &, dealii::Vector< double > &, double)
Definition: pdeinterface.h:1253
std::string _problem_type
Definition: pdeinterface.h:1409