@@ -74,18 +74,16 @@ void hierarchic_vec_nodal_soln(const Elem * elem,
7474 libmesh_assert_equal_to (refspace_nodes .size (), n_nodes );
7575 libmesh_assert_equal_to (elem_soln .size (), n_sf * dim );
7676
77+ // Zero before summation
78+ std ::fill (nodal_soln .begin (), nodal_soln .end (), 0 );
79+
7780 for (unsigned int n = 0 ; n < n_nodes ; n ++ )
7881 for (int d = 0 ; d != dim ; ++ d )
79- {
80- const unsigned int ni = n * dim + d ;
81- nodal_soln [ni ] = 0 ;
82-
83- // u_i = Sum (alpha_i phi_i); we're here only looking
84- // at vector components in direction d
85- for (unsigned int i = 0 ; i < n_sf ; i ++ )
86- nodal_soln [ni ] += elem_soln [i * dim + d ] *
87- FEInterface ::shape (fe_type , elem , i , refspace_nodes [n ]);
88- }
82+ // u_i = Sum (alpha_i phi_i); we're here only looking
83+ // at vector components in direction d
84+ for (unsigned int i = 0 ; i < n_sf ; i ++ )
85+ nodal_soln [n * dim + d ] += elem_soln [i * dim + d ] *
86+ FEInterface ::shape (fe_type , elem , i , refspace_nodes [n ]);
8987
9088}// void hierarchic_vec_nodal_soln
9189
@@ -95,71 +93,31 @@ void hierarchic_vec_nodal_soln(const Elem * elem,
9593 // Do full-specialization for every dimension, instead
9694 // of explicit instantiation at the end of this file.
9795 // This could be macro-ified so that it fits on one line...
98- template < >
99- void FE < 0 ,HIERARCHIC_VEC > ::nodal_soln (const Elem * elem ,
100- const Order order ,
101- const std ::vector < Number > & elem_soln ,
102- std ::vector < Number > & nodal_soln ,
103- const bool add_p_level )
104- { FE < 0 ,HIERARCHIC > ::nodal_soln (elem , order , elem_soln , nodal_soln , add_p_level ); }
105-
106- template < >
107- void FE < 1 ,HIERARCHIC_VEC > ::nodal_soln (const Elem * elem ,
108- const Order order ,
109- const std ::vector < Number > & elem_soln ,
110- std ::vector < Number > & nodal_soln ,
111- const bool add_p_level )
112- { FE < 1 ,HIERARCHIC > ::nodal_soln (elem , order , elem_soln , nodal_soln , add_p_level ); }
96+ LIBMESH_FE_NODAL_SOLN_DIM (HIERARCHIC_VEC , (FE < 0 , HIERARCHIC > ::nodal_soln ), 0 )
97+ LIBMESH_FE_NODAL_SOLN_DIM (HIERARCHIC_VEC , (FE < 1 , HIERARCHIC > ::nodal_soln ), 1 )
11398
11499template < >
115100void FE < 2 ,HIERARCHIC_VEC > ::nodal_soln (const Elem * elem ,
116101 const Order order ,
117102 const std ::vector < Number > & elem_soln ,
118103 std ::vector < Number > & nodal_soln ,
119104 const bool add_p_level )
120- { hierarchic_vec_nodal_soln (elem , order , elem_soln , 2 /*dimension */ , nodal_soln , add_p_level ); }
105+ { hierarchic_vec_nodal_soln (elem , order , elem_soln , 2 /*dim */ , nodal_soln , add_p_level ); }
121106
122107template < >
123108void FE < 3 ,HIERARCHIC_VEC > ::nodal_soln (const Elem * elem ,
124109 const Order order ,
125110 const std ::vector < Number > & elem_soln ,
126111 std ::vector < Number > & nodal_soln ,
127112 const bool add_p_level )
128- { hierarchic_vec_nodal_soln (elem , order , elem_soln , 3 /*dimension */ , nodal_soln , add_p_level ); }
113+ { hierarchic_vec_nodal_soln (elem , order , elem_soln , 3 /*dim */ , nodal_soln , add_p_level ); }
129114
130115LIBMESH_FE_SIDE_NODAL_SOLN (HIERARCHIC_VEC )
131116
132- template < >
133- void FE < 0 ,L2_HIERARCHIC_VEC > ::nodal_soln (const Elem * elem ,
134- const Order order ,
135- const std ::vector < Number > & elem_soln ,
136- std ::vector < Number > & nodal_soln ,
137- const bool add_p_level )
138- { FE < 0 ,HIERARCHIC_VEC > ::nodal_soln (elem , order , elem_soln , nodal_soln , add_p_level ); }
139-
140- template < >
141- void FE < 1 ,L2_HIERARCHIC_VEC > ::nodal_soln (const Elem * elem ,
142- const Order order ,
143- const std ::vector < Number > & elem_soln ,
144- std ::vector < Number > & nodal_soln ,
145- const bool add_p_level )
146- { FE < 1 ,HIERARCHIC_VEC > ::nodal_soln (elem , order , elem_soln , nodal_soln , add_p_level ); }
147-
148- template < >
149- void FE < 2 ,L2_HIERARCHIC_VEC > ::nodal_soln (const Elem * elem ,
150- const Order order ,
151- const std ::vector < Number > & elem_soln ,
152- std ::vector < Number > & nodal_soln ,
153- const bool add_p_level )
154- { FE < 2 ,HIERARCHIC_VEC > ::nodal_soln (elem , order , elem_soln , nodal_soln , add_p_level ); }
155-
156- template < >
157- void FE < 3 ,L2_HIERARCHIC_VEC > ::nodal_soln (const Elem * elem ,
158- const Order order ,
159- const std ::vector < Number > & elem_soln ,
160- std ::vector < Number > & nodal_soln ,
161- const bool add_p_level )
162- { FE < 3 ,HIERARCHIC_VEC > ::nodal_soln (elem , order , elem_soln , nodal_soln , add_p_level ); }
117+ LIBMESH_FE_NODAL_SOLN_DIM (L2_HIERARCHIC_VEC , (FE < 0 , HIERARCHIC_VEC > ::nodal_soln ), 0 )
118+ LIBMESH_FE_NODAL_SOLN_DIM (L2_HIERARCHIC_VEC , (FE < 1 , HIERARCHIC_VEC > ::nodal_soln ), 1 )
119+ LIBMESH_FE_NODAL_SOLN_DIM (L2_HIERARCHIC_VEC , (FE < 2 , HIERARCHIC_VEC > ::nodal_soln ), 2 )
120+ LIBMESH_FE_NODAL_SOLN_DIM (L2_HIERARCHIC_VEC , (FE < 3 , HIERARCHIC_VEC > ::nodal_soln ), 3 )
163121
164122LIBMESH_FE_SIDE_NODAL_SOLN (L2_HIERARCHIC_VEC )
165123
0 commit comments