619 *
(-2 / (this->width * this->width) *
647 *
virtual void vector_value(
const Point<dim> &p,
653 *
for (
unsigned int d = 0;
d < dim; ++
d)
655 *
v[dim] = solution.value(p);
728 *
(this->width * this->width) *
742 * <a name=
"TheHDGsolverclass"></a>
777 *
void postprocess();
778 *
void refine_grid(
const unsigned int cycle);
787 *
struct ScratchData;
806 *
ScratchData & scratch,
902 * <a name=
"TheHDGclassimplementation"></a>
908 * <a name=
"Constructor"></a>
932 * <a name=
"HDGsetup_system"></a>
944 *
dof_handler.distribute_dofs(fe);
947 *
std::cout <<
" Number of degrees of freedom: " << dof_handler.n_dofs()
950 *
solution.
reinit(dof_handler.n_dofs());
956 *
constraints.clear();
965 *
constraints.close();
978 *
sparsity_pattern.copy_from(
dsp, fe.n_dofs_per_face());
980 *
system_matrix.
reinit(sparsity_pattern);
988 * <a name=
"HDGPerTaskData"></a>
1007 *
template <
int dim>
1012 *
std::vector<types::global_dof_index> dof_indices;
1018 *
, cell_vector(n_dofs)
1019 *
, dof_indices(n_dofs)
1029 * <a name=
"HDGScratchData"></a>
1030 * <
h4>HDG::ScratchData</
h4>
1045 *
template <
int dim>
1046 *
struct HDG<dim>::ScratchData
1059 *
std::vector<Tensor<1, dim>>
q_phi;
1061 *
std::vector<double>
u_phi;
1063 *
std::vector<double>
tr_phi;
1095 *
,
tr_phi(fe.n_dofs_per_cell())
1109 *
for (unsigned
int i = 0; i < fe.n_dofs_per_cell(); ++i)
1111 *
if (fe.has_support_on_face(i,
face_no))
1116 *
ScratchData(
const ScratchData &
sd)
1118 *
sd.fe_values_local.get_quadrature(),
1119 *
sd.fe_values_local.get_update_flags())
1121 *
sd.fe_face_values_local.get_quadrature(),
1122 *
sd.fe_face_values_local.get_update_flags())
1123 *
, fe_face_values(
sd.fe_face_values.get_fe(),
1124 *
sd.fe_face_values.get_quadrature(),
1125 *
sd.fe_face_values.get_update_flags())
1149 * <a name=
"HDGPostProcessScratchData"></a>
1156 *
template <
int dim>
1178 *
,
cell_matrix(fe.n_dofs_per_cell(), fe.n_dofs_per_cell())
1185 *
sd.fe_values_local.get_quadrature(),
1186 *
sd.fe_values_local.get_update_flags())
1187 *
, fe_values(
sd.fe_values.get_fe(),
1188 *
sd.fe_values.get_quadrature(),
1189 *
sd.fe_values.get_update_flags())
1203 * <a name=
"HDGassemble_system"></a>
1210 * local solution (
true).
1239 *
ScratchData scratch(fe,
1248 *
dof_handler.
end(),
1261 * <a name=
"HDGassemble_system_one_cell"></a>
1268 *
template <
int dim>
1271 *
ScratchData & scratch,
1282 *
const unsigned int n_q_points =
1283 *
scratch.fe_values_local.get_quadrature().
size();
1285 *
scratch.fe_face_values_local.get_quadrature().
size();
1288 *
scratch.fe_values_local.get_fe().n_dofs_per_cell();
1293 *
scratch.ll_matrix = 0;
1294 *
scratch.l_rhs = 0;
1295 *
if (!task_data.trace_reconstruct)
1297 *
scratch.lf_matrix = 0;
1298 *
scratch.fl_matrix = 0;
1299 *
task_data.cell_matrix = 0;
1300 *
task_data.cell_vector = 0;
1309 * store
the values at
each quadrature point
for the basis functions,
the
1314 *
for (
unsigned int q = 0;
q < n_q_points; ++
q)
1316 *
const double rhs_value = scratch.right_hand_side.value(
1317 *
scratch.fe_values_local.quadrature_point(
q));
1319 *
scratch.fe_values_local.quadrature_point(
q));
1320 *
const double JxW = scratch.fe_values_local.JxW(
q);
1323 *
scratch.q_phi[
k] = scratch.fe_values_local[
fluxes].value(
k,
q);
1324 *
scratch.q_phi_div[
k] =
1325 *
scratch.fe_values_local[
fluxes].divergence(
k,
q);
1326 *
scratch.u_phi[
k] = scratch.fe_values_local[
scalar].value(
k,
q);
1327 *
scratch.u_phi_grad[
k] =
1328 *
scratch.fe_values_local[
scalar].gradient(
k,
q);
1333 *
scratch.ll_matrix(i,
j) +=
1334 *
(scratch.q_phi[i] * scratch.q_phi[
j] -
1335 *
scratch.q_phi_div[i] * scratch.u_phi[
j] +
1336 *
scratch.u_phi[i] * scratch.q_phi_div[
j] -
1337 *
(scratch.u_phi_grad[i] *
convection) * scratch.u_phi[
j]) *
1339 *
scratch.l_rhs(i) += scratch.u_phi[i] *
rhs_value * JxW;
1350 *
for (
const auto face_no : cell->face_indices())
1361 *
if (task_data.trace_reconstruct)
1362 *
scratch.fe_face_values.get_function_values(solution,
1363 *
scratch.trace_values);
1367 *
const double JxW = scratch.fe_face_values.JxW(
q);
1369 *
scratch.fe_face_values.quadrature_point(
q);
1371 *
scratch.fe_face_values.normal_vector(
q);
1373 *
scratch.convection_velocity.value(quadrature_point);
1393 *
for (
unsigned int k = 0;
1394 *
k < scratch.fe_local_support_on_face[
face_no].
size();
1397 *
const unsigned int kk =
1398 *
scratch.fe_local_support_on_face[
face_no][
k];
1399 *
scratch.q_phi[
k] =
1400 *
scratch.fe_face_values_local[
fluxes].value(
kk,
q);
1401 *
scratch.u_phi[
k] =
1402 *
scratch.fe_face_values_local[
scalar].value(
kk,
q);
1410 * local-local, local-face, face-local,
and face-face.
The
1416 *
if (!task_data.trace_reconstruct)
1418 *
for (
unsigned int k = 0;
1421 *
scratch.tr_phi[
k] = scratch.fe_face_values.shape_value(
1422 *
scratch.fe_support_on_face[
face_no][
k],
q);
1423 *
for (
unsigned int i = 0;
1424 *
i < scratch.fe_local_support_on_face[
face_no].
size();
1426 *
for (
unsigned int j = 0;
1430 *
const unsigned int ii =
1431 *
scratch.fe_local_support_on_face[
face_no][i];
1432 *
const unsigned int jj =
1433 *
scratch.fe_support_on_face[
face_no][
j];
1434 *
scratch.lf_matrix(
ii,
jj) +=
1435 *
((scratch.q_phi[i] * normal +
1437 *
scratch.tr_phi[
j]) *
1448 *
scratch.fl_matrix(
jj,
ii) -=
1449 *
((scratch.q_phi[i] * normal +
1451 *
scratch.tr_phi[
j]) *
1455 *
for (
unsigned int i = 0;
1458 *
for (
unsigned int j = 0;
1462 *
const unsigned int ii =
1463 *
scratch.fe_support_on_face[
face_no][i];
1464 *
const unsigned int jj =
1465 *
scratch.fe_support_on_face[
face_no][
j];
1466 *
task_data.cell_matrix(
ii,
jj) +=
1468 *
scratch.tr_phi[
j]) *
1472 *
if (cell->face(
face_no)->at_boundary() &&
1473 *
(cell->face(
face_no)->boundary_id() == 1))
1476 *
-scratch.exact_solution.gradient(quadrature_point) *
1479 *
scratch.exact_solution.value(quadrature_point);
1480 *
for (
unsigned int i = 0;
1484 *
const unsigned int ii =
1485 *
scratch.fe_support_on_face[
face_no][i];
1486 *
task_data.cell_vector(
ii) +=
1499 *
for (
unsigned int i = 0;
1500 *
i < scratch.fe_local_support_on_face[
face_no].
size();
1502 *
for (
unsigned int j = 0;
1503 *
j < scratch.fe_local_support_on_face[
face_no].
size();
1506 *
const unsigned int ii =
1507 *
scratch.fe_local_support_on_face[
face_no][i];
1508 *
const unsigned int jj =
1509 *
scratch.fe_local_support_on_face[
face_no][
j];
1510 *
scratch.ll_matrix(
ii,
jj) +=
1511 *
tau_stab * scratch.u_phi[i] * scratch.u_phi[
j] * JxW;
1524 *
if (task_data.trace_reconstruct)
1525 *
for (
unsigned int i = 0;
1526 *
i < scratch.fe_local_support_on_face[
face_no].
size();
1529 *
const unsigned int ii =
1530 *
scratch.fe_local_support_on_face[
face_no][i];
1531 *
scratch.l_rhs(
ii) -=
1532 *
(scratch.q_phi[i] * normal +
1534 *
scratch.trace_values[
q] * JxW;
1547 *
scratch.ll_matrix.gauss_jordan();
1555 *
if (task_data.trace_reconstruct ==
false)
1557 *
scratch.fl_matrix.mmult(scratch.tmp_matrix, scratch.ll_matrix);
1558 *
scratch.tmp_matrix.vmult_add(task_data.cell_vector, scratch.l_rhs);
1559 *
scratch.tmp_matrix.mmult(task_data.cell_matrix,
1560 *
scratch.lf_matrix,
1562 *
cell->get_dof_indices(task_data.dof_indices);
1573 *
scratch.ll_matrix.vmult(scratch.tmp_rhs, scratch.l_rhs);
1583 * <a name=
"HDGcopy_local_to_global"></a>
1589 *
template <
int dim>
1592 *
if (data.trace_reconstruct ==
false)
1593 *
constraints.distribute_local_to_global(data.cell_matrix,
1605 * <a name=
"HDGsolve"></a>
1606 * <
h4>HDG::solve</
h4>
1611 *
template <
int dim>
1619 *
std::cout <<
" Number of BiCGStab iterations: "
1620 *
<< solver_control.last_step() << std::endl;
1622 *
system_matrix.clear();
1623 *
sparsity_pattern.
reinit(0, 0, 0, 1);
1625 *
constraints.distribute(solution);
1643 * <a name=
"HDGpostprocess"></a>
1644 * <
h4>HDG::postprocess</
h4>
1690 *
unsigned int & data) {
1691 * this->postprocess_one_cell(cell, scratch, data);
1693 *
std::function<
void(
const unsigned int &)>(),
1714 *
std::pair<unsigned int, unsigned int>(0, dim), dim + 1);
1759 * <a name=
"HDGpostprocess_one_cell"></a>
1785 *
template <
int dim>
1795 *
scratch.fe_values.
reinit(cell);
1800 *
const unsigned int n_q_points = scratch.fe_values.get_quadrature().
size();
1801 *
const unsigned int dofs_per_cell = scratch.fe_values.dofs_per_cell;
1804 *
scratch.u_values);
1806 *
scratch.u_gradients);
1809 *
for (
unsigned int i = 1; i < dofs_per_cell; ++i)
1811 *
for (
unsigned int j = 0;
j < dofs_per_cell; ++
j)
1814 *
for (
unsigned int q = 0;
q < n_q_points; ++
q)
1815 *
sum += (scratch.fe_values.shape_grad(i,
q) *
1816 *
scratch.fe_values.shape_grad(
j,
q)) *
1817 *
scratch.fe_values.JxW(
q);
1818 *
scratch.cell_matrix(i,
j) =
sum;
1822 *
for (
unsigned int q = 0;
q < n_q_points; ++
q)
1823 *
sum -= (scratch.fe_values.shape_grad(i,
q) * scratch.u_gradients[
q]) *
1824 *
scratch.fe_values.JxW(
q);
1825 *
scratch.cell_rhs(i) =
sum;
1827 *
for (
unsigned int j = 0;
j < dofs_per_cell; ++
j)
1830 *
for (
unsigned int q = 0;
q < n_q_points; ++
q)
1831 *
sum += scratch.fe_values.shape_value(
j,
q) * scratch.fe_values.JxW(
q);
1832 *
scratch.cell_matrix(0,
j) =
sum;
1836 *
for (
unsigned int q = 0;
q < n_q_points; ++
q)
1837 *
sum += scratch.u_values[
q] * scratch.fe_values.JxW(
q);
1838 *
scratch.cell_rhs(0) =
sum;
1849 *
scratch.cell_matrix.gauss_jordan();
1850 *
scratch.cell_matrix.vmult(scratch.cell_sol, scratch.cell_rhs);
1851 *
cell->distribute_local_to_global(scratch.cell_sol,
solution_u_post);
1859 * <a name=
"HDGoutput_results"></a>
1871 *
template <
int dim>
1884 *
Assert(
false, ExcNotImplemented());
1903 *
std::vector<std::string> names(dim,
"gradient");
1904 *
names.emplace_back(
"solution");
1905 *
std::vector<DataComponentInterpretation::DataComponentInterpretation>
1922 *
std::vector<std::string>
post_name(1,
"u_post");
1923 *
std::vector<DataComponentInterpretation::DataComponentInterpretation>
1930 *
data_out.build_patches(fe.degree);
1931 *
data_out.write_vtk(output);
1947 *
std::vector<std::string>
face_name(1,
"u_hat");
1948 *
std::vector<DataComponentInterpretation::DataComponentInterpretation>
1963 * <a name=
"HDGrefine_grid"></a>
1964 * <
h4>HDG::refine_grid</
h4>
1973 * elements
per direction.
1982 *
template <
int dim>
2010 *
std::map<types::boundary_id, const Function<dim> *>
2045 *
if (face->at_boundary())
2048 *
face->set_boundary_id(1);
2054 * <a name=
"HDGrun"></a>
2061 *
template <
int dim>
2064 *
for (
unsigned int cycle = 0; cycle < 10; ++cycle)
2066 *
std::cout <<
"Cycle " << cycle <<
':' << std::endl;
2068 *
refine_grid(cycle);
2105 *
const unsigned int dim = 2;
2112 * @
ref step_7
"step-7".
2116 *
std::cout <<
"Solving with Q1 elements, adaptive refinement"
2118 *
<<
"============================================="
2125 *
std::cout << std::endl;
2129 *
std::cout <<
"Solving with Q1 elements, global refinement" << std::endl
2130 *
<<
"===========================================" << std::endl
2136 *
std::cout << std::endl;
2140 *
std::cout <<
"Solving with Q3 elements, global refinement" << std::endl
2141 *
<<
"===========================================" << std::endl
2147 *
std::cout << std::endl;
2150 *
catch (std::exception &exc)
2152 *
std::cerr << std::endl
2154 *
<<
"----------------------------------------------------"
2156 *
std::cerr <<
"Exception on processing: " << std::endl
2157 *
<< exc.what() << std::endl
2158 *
<<
"Aborting!" << std::endl
2159 *
<<
"----------------------------------------------------"
2165 *
std::cerr << std::endl
2167 *
<<
"----------------------------------------------------"
2169 *
std::cerr <<
"Unknown exception!" << std::endl
2170 *
<<
"Aborting!" << std::endl
2171 *
<<
"----------------------------------------------------"
2182<a name=
"Programoutput"></a><
h3>
Program output</
h3>
2214<table
align=
"center">
2216 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.sol_2.png" alt=
""></
td>
2217 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.sol_3.png" alt=
""></
td>
2220 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.sol_4.png" alt=
""></
td>
2221 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.sol_8.png" alt=
""></
td>
2232<table
align=
"center">
2234 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.post_2.png" alt=
""></
td>
2235 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.post_3.png" alt=
""></
td>
2238 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.post_4.png" alt=
""></
td>
2239 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.post_8.png" alt=
""></
td>
2249<table
align=
"center">
2251 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.sol_q3_2.png" alt=
""></
td>
2252 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.post_q3_2.png" alt=
""></
td>
2266 16 80 1.804e+01 2.207e+01 1.798e+01
2267 31 170 9.874e+00 1.322e+01 9.798e+00
2268 61 314 7.452e-01 3.793e+00 4.891e-01
2269 121 634 3.240e-01 1.511e+00 2.616e-01
2270 238 1198 8.585e-02 8.212e-01 1.808e-02
2271 454 2290 4.802e-02 5.178e-01 2.195e-02
2272 898 4378 2.561e-02 2.947e-01 4.318e-03
2273 1720 7864 1.306e-02 1.664e-01 2.978e-03
2274 3271 14638 7.025e-03 9.815e-02 1.075e-03
2275 6217 27214 4.119e-03 6.407e-02 9.975e-04
2279 16 80 1.804e+01 - 2.207e+01 - 1.798e+01 -
2280 36 168 6.125e+00 2.66 9.472e+00 2.09 6.084e+00 2.67
2281 64 288 9.785e-01 6.38 4.260e+00 2.78 7.102e-01 7.47
2282 144 624 2.730e-01 3.15 1.866e+00 2.04 6.115e-02 6.05
2283 256 1088 1.493e-01 2.10 1.046e+00 2.01 2.880e-02 2.62
2284 576 2400 6.965e-02 1.88 4.846e-01 1.90 9.204e-03 2.81
2285 1024 4224 4.018e-02 1.91 2.784e-01 1.93 4.027e-03 2.87
2286 2304 9408 1.831e-02 1.94 1.264e-01 1.95 1.236e-03 2.91
2287 4096 16640 1.043e-02 1.96 7.185e-02 1.96 5.306e-04 2.94
2288 9216 37248 4.690e-03 1.97 3.228e-02 1.97 1.599e-04 2.96
2292 16 160 3.613e-01 - 1.891e+00 - 3.020e-01 -
2293 36 336 6.411e-02 4.26 5.081e-01 3.24 3.238e-02 5.51
2294 64 576 3.480e-02 2.12 2.533e-01 2.42 5.277e-03 6.31
2295 144 1248 8.297e-03 3.54 5.924e-02 3.58 6.330e-04 5.23
2296 256 2176 2.254e-03 4.53 1.636e-02 4.47 1.403e-04 5.24
2297 576 4800 4.558e-04 3.94 3.277e-03 3.96 1.844e-05 5.01
2298 1024 8448 1.471e-04 3.93 1.052e-03 3.95 4.378e-06 5.00
2299 2304 18816 2.956e-05 3.96 2.104e-04 3.97 5.750e-07 5.01
2300 4096 33280 9.428e-06 3.97 6.697e-05 3.98 1.362e-07 5.01
2301 9216 74496 1.876e-06 3.98 1.330e-05 3.99 1.788e-08 5.01
2317variable at
fifth order.
2323 8 144 7.122e+00 1.941e+01 6.102e+00
2324 29 500 3.309e+00 1.023e+01 2.145e+00
2325 113 1792 2.204e+00 1.023e+01 1.912e+00
2326 379 5732 6.085e-01 5.008e+00 2.233e-01
2327 1317 19412 1.543e-01 1.464e+00 4.196e-02
2328 4579 64768 5.058e-02 5.611e-01 9.521e-03
2329 14596 199552 2.129e-02 3.122e-01 4.569e-03
2330 46180 611400 1.033e-02 1.622e-01 1.684e-03
2331144859 1864212 5.007e-03 8.371e-02 7.364e-04
2332451060 5684508 2.518e-03 4.562e-02 3.070e-04
2336 8 144 7.122e+00 - 1.941e+01 - 6.102e+00 -
2337 27 432 5.491e+00 0.64 2.184e+01 -0.29 4.448e+00 0.78
2338 64 960 3.646e+00 1.42 1.299e+01 1.81 3.306e+00 1.03
2339 216 3024 1.595e+00 2.04 8.550e+00 1.03 1.441e+00 2.05
2340 512 6912 6.922e-01 2.90 5.306e+00 1.66 2.511e-01 6.07
2341 1728 22464 2.915e-01 2.13 2.490e+00 1.87 8.588e-02 2.65
2342 4096 52224 1.684e-01 1.91 1.453e+00 1.87 4.055e-02 2.61
2343 13824 172800 7.972e-02 1.84 6.861e-01 1.85 1.335e-02 2.74
2344 32768 405504 4.637e-02 1.88 3.984e-01 1.89 5.932e-03 2.82
2345110592 1354752 2.133e-02 1.92 1.830e-01 1.92 1.851e-03 2.87
2349 8 576 5.670e+00 - 1.868e+01 - 5.462e+00 -
2350 27 1728 1.048e+00 4.16 6.988e+00 2.42 8.011e-01 4.73
2351 64 3840 2.831e-01 4.55 2.710e+00 3.29 1.363e-01 6.16
2352 216 12096 7.883e-02 3.15 7.721e-01 3.10 2.158e-02 4.55
2353 512 27648 3.642e-02 2.68 3.305e-01 2.95 5.231e-03 4.93
2354 1728 89856 8.546e-03 3.58 7.581e-02 3.63 7.640e-04 4.74
2355 4096 208896 2.598e-03 4.14 2.313e-02 4.13 1.783e-04 5.06
2356 13824 691200 5.314e-04 3.91 4.697e-03 3.93 2.355e-05 4.99
2357 32768 1622016 1.723e-04 3.91 1.517e-03 3.93 5.602e-06 4.99
2358110592 5419008 3.482e-05 3.94 3.055e-04 3.95 7.374e-07 5.00
2384<table
align=
"center">
2386 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.2d_plain.png" width=
"400" alt=
""></
td>
2387 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.2dt_plain.png" width=
"400" alt=
""></
td>
2401<table
align=
"center">
2403 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.2d_post.png" width=
"400" alt=
""></
td>
2404 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.2dt_post.png" width=
"400" alt=
""></
td>
2415<table
align=
"center">
2417 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.2d_postb.png" width=
"400" alt=
""></
td>
2418 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.2dt_postb.png" width=
"400" alt=
""></
td>
2449<table
align=
"center">
2451 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.3d_plain.png" width=
"400" alt=
""></
td>
2452 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.3dt_plain.png" width=
"400" alt=
""></
td>
2455 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.3d_post.png" width=
"400" alt=
""></
td>
2456 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.3dt_post.png" width=
"400" alt=
""></
td>
2459 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.3d_postb.png" width=
"400" alt=
""></
td>
2460 <
td><
img src=
"https://www.dealii.org/images/steps/developer/step-51.3dt_postb.png" width=
"400" alt=
""></
td>
2479<a name=
"Possibilitiesforimprovements"></a><
h3>Possibilities
for improvements</
h3>
2492<table
align=
"center" class=
"doxtable">
2575<a name=
"PlainProg"></a>
value_type * data() const noexcept
void reinit(value_type *starting_element, const std::size_t n_elements)
void mmult(FullMatrix< number2 > &C, const FullMatrix< number2 > &B, const bool adding=false) const
static void estimate(const Mapping< dim, spacedim > &mapping, const DoFHandler< dim, spacedim > &dof, const Quadrature< dim - 1 > &quadrature, const std::map< types::boundary_id, const Function< spacedim, typename InputVector::value_type > * > &neumann_bc, const InputVector &solution, Vector< float > &error, const ComponentMask &component_mask=ComponentMask(), const Function< spacedim > *coefficients=nullptr, const unsigned int n_threads=numbers::invalid_unsigned_int, const types::subdomain_id subdomain_id=numbers::invalid_subdomain_id, const types::material_id material_id=numbers::invalid_material_id, const Strategy strategy=cell_diameter_over_24)
__global__ void reduction(Number *result, const Number *v, const size_type N)
__global__ void set(Number *val, const Number s, const size_type N)
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
typename ActiveSelector::active_cell_iterator active_cell_iterator
void loop(ITERATOR begin, std_cxx20::type_identity_t< ITERATOR > end, DOFINFO &dinfo, INFOBOX &info, const std::function< void(DOFINFO &, typename INFOBOX::CellInfo &)> &cell_worker, const std::function< void(DOFINFO &, typename INFOBOX::CellInfo &)> &boundary_worker, const std::function< void(DOFINFO &, DOFINFO &, typename INFOBOX::CellInfo &, typename INFOBOX::CellInfo &)> &face_worker, ASSEMBLER &assembler, const LoopControl &lctrl=LoopControl())
void make_hanging_node_constraints(const DoFHandler< dim, spacedim > &dof_handler, AffineConstraints< number > &constraints)
void make_sparsity_pattern(const DoFHandler< dim, spacedim > &dof_handler, SparsityPatternBase &sparsity_pattern, const AffineConstraints< number > &constraints=AffineConstraints< number >(), const bool keep_constrained_dofs=true, const types::subdomain_id subdomain_id=numbers::invalid_subdomain_id)
@ update_values
Shape function values.
@ update_normal_vectors
Normal vectors.
@ update_JxW_values
Transformed quadrature weights.
@ update_gradients
Shape function gradients.
@ update_quadrature_points
Transformed quadrature points.
void apply(const Kokkos::TeamPolicy< MemorySpace::Default::kokkos_space::execution_space >::member_type &team_member, const Kokkos::View< Number *, MemorySpace::Default::kokkos_space > shape_data, const ViewTypeIn in, ViewTypeOut out)
@ component_is_part_of_vector
Expression fabs(const Expression &x)
Expression sign(const Expression &x)
void subdivided_hyper_cube(Triangulation< dim, spacedim > &tria, const unsigned int repetitions, const double left=0., const double right=1., const bool colorize=false)
void refine(Triangulation< dim, spacedim > &tria, const Vector< Number > &criteria, const double threshold, const unsigned int max_to_mark=numbers::invalid_unsigned_int)
void refine_and_coarsen_fixed_number(Triangulation< dim, spacedim > &triangulation, const Vector< Number > &criteria, const double top_fraction_of_cells, const double bottom_fraction_of_cells, const unsigned int max_n_cells=std::numeric_limits< unsigned int >::max())
@ matrix
Contents is actually a matrix.
@ general
No special properties.
void cell_matrix(FullMatrix< double > &M, const FEValuesBase< dim > &fe, const FEValuesBase< dim > &fetest, const ArrayView< const std::vector< double > > &velocity, const double factor=1.)
double norm(const FEValuesBase< dim > &fe, const ArrayView< const std::vector< Tensor< 1, dim > > > &Du)
void L2(Vector< number > &result, const FEValuesBase< dim > &fe, const std::vector< double > &input, const double factor=1.)
SymmetricTensor< 2, dim, Number > C(const Tensor< 2, dim, Number > &F)
Tensor< 2, dim, Number > w(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
constexpr ReturnType< rank, T >::value_type & extract(T &t, const ArrayType &indices)
void call(const std::function< RT()> &function, internal::return_value< RT > &ret_val)
VectorType::value_type * end(VectorType &V)
T sum(const T &t, const MPI_Comm mpi_communicator)
std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)
void run(const Iterator &begin, const std_cxx20::type_identity_t< Iterator > &end, Worker worker, Copier copier, const ScratchData &sample_scratch_data, const CopyData &sample_copy_data, const unsigned int queue_length, const unsigned int chunk_size)
void run(const std::vector< std::vector< Iterator > > &colored_iterators, Worker worker, Copier copier, const ScratchData &sample_scratch_data, const CopyData &sample_copy_data, const unsigned int queue_length=2 *MultithreadInfo::n_threads(), const unsigned int chunk_size=8)
void copy(const T *begin, const T *end, U *dest)
int(&) functions(const void *v1, const void *v2)
void assemble(const MeshWorker::DoFInfoBox< dim, DOFINFO > &dinfo, A *assembler)
void reinit(MatrixBlock< MatrixType > &v, const BlockSparsityPattern &p)
void set_dof_values(const DoFCellAccessor< dim, spacedim, lda > &cell, const Vector< number > &local_values, OutputVector &values, const bool perform_check)
static constexpr double PI
::VectorizedArray< Number, width > exp(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > pow(const ::VectorizedArray< Number, width > &, const Number p)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)
const ::parallel::distributed::Triangulation< dim, spacedim > * triangulation
DEAL_II_HOST constexpr SymmetricTensor< 2, dim, Number > invert(const SymmetricTensor< 2, dim, Number > &)
DEAL_II_HOST constexpr Number trace(const SymmetricTensor< 2, dim2, Number > &)