1657 LOG_SCOPE (
"project_vertices",
"GenericProjector");
1663 std::vector<unsigned short> extra_hanging_dofs;
1666 if (extra_hanging_dofs.size() <= v_num)
1667 extra_hanging_dofs.resize(v_num+1,
false);
1668 extra_hanging_dofs[v_num] =
1672 for (
const auto & v_pair : range)
1674 const Node & vertex = *v_pair.first;
1675 const Elem & elem = *std::get<0>(v_pair.second);
1676 const unsigned int n = std::get<1>(v_pair.second);
1677 const var_set & vertex_vars = std::get<2>(v_pair.second);
1685 for (
const auto & var : vertex_vars)
1688 const FEType & base_fe_type = variable.
type();
1689 const unsigned int var_component =
1692 if (base_fe_type.family ==
SCALAR)
1698 libmesh_assert_equal_to(vertex.n_comp(sys_num, var), 0);
1703 const dof_id_type id = vertex.dof_number(sys_num, var, 0);
1705 const FValue val =
f.eval_at_node
1707 vertex, extra_hanging_dofs[var],
system.
time);
1708 insert_id(
id, val, vertex.processor_id());
1710 else if (cont ==
C_ONE)
1713 const dof_id_type first_id = vertex.dof_number(sys_num, var, 0);
1720 const int dim = elem.dim();
1730 libmesh_assert_equal_to(
dim, e.dim());
1733 #ifdef LIBMESH_ENABLE_AMR
1734 bool is_parent_vertex =
false;
1737 const int i_am_child =
1740 elem.parent()->is_vertex_on_parent(i_am_child, n);
1743 const bool is_parent_vertex =
false;
1747 if (base_fe_type.family ==
HERMITE)
1754 extra_hanging_dofs[var],
1756 insert_id(first_id, val, vertex.processor_id());
1758 VectorValue<FValue> grad =
1764 extra_hanging_dofs[var],
1772 vertex.processor_id());
1779 Point nxminus = elem.point(n),
1780 nxplus = elem.point(n);
1781 nxminus(0) -= delta_x;
1782 nxplus(0) += delta_x;
1783 VectorValue<FValue> gxminus =
1788 VectorValue<FValue> gxplus =
1795 vertex.processor_id());
1798 (gxplus(1) - gxminus(1)) / 2. / delta_x,
1799 vertex.processor_id());
1806 vertex.processor_id());
1809 (gxplus(2) - gxminus(2)) / 2. / delta_x,
1810 vertex.processor_id());
1813 Point nyminus = elem.point(n),
1814 nyplus = elem.point(n);
1815 nyminus(1) -= delta_x;
1816 nyplus(1) += delta_x;
1817 VectorValue<FValue> gyminus =
1822 VectorValue<FValue> gyplus =
1829 (gyplus(2) - gyminus(2)) / 2. / delta_x,
1830 vertex.processor_id());
1832 Point nxmym = elem.point(n),
1833 nxmyp = elem.point(n),
1834 nxpym = elem.point(n),
1835 nxpyp = elem.point(n);
1836 nxmym(0) -= delta_x;
1837 nxmym(1) -= delta_x;
1838 nxmyp(0) -= delta_x;
1839 nxmyp(1) += delta_x;
1840 nxpym(0) += delta_x;
1841 nxpym(1) -= delta_x;
1842 nxpyp(0) += delta_x;
1843 nxpyp(1) += delta_x;
1844 VectorValue<FValue> gxmym =
1849 VectorValue<FValue> gxmyp =
1854 VectorValue<FValue> gxpym =
1859 VectorValue<FValue> gxpyp =
1864 FValue gxzplus = (gxpyp(2) - gxmyp(2))
1866 FValue gxzminus = (gxpym(2) - gxmym(2))
1870 (gxzplus - gxzminus) / 2. / delta_x,
1871 vertex.processor_id());
1873 #endif // LIBMESH_DIM > 2
1875 #endif // LIBMESH_DIM > 1
1882 libmesh_assert_equal_to
1884 (
dim, base_fe_type, elem.type(),
1885 elem.get_node_index(&vertex)),
1886 (
unsigned int)(1 +
dim));
1889 vertex, extra_hanging_dofs[var],
1891 insert_id(first_id, val, vertex.processor_id());
1892 VectorValue<FValue> grad =
1895 vertex, extra_hanging_dofs[var],
1897 g->eval_at_point(
context, var_component, vertex,
1899 for (
int i=0; i!=
dim; ++i)
1901 vertex.processor_id());
1905 libmesh_error_msg(
"Unknown continuity " << cont);