@@ -54,57 +54,40 @@ T PetscVector<T>::sum () const
5454}
5555
5656
57+
5758template < typename T >
58- Real PetscVector < T > ::l1_norm () const
59+ template < NormType N >
60+ Real PetscVector < T > ::norm () const
5961{
62+ parallel_object_only ();
63+
6064 this -> _restore_array ();
6165 libmesh_assert (this -> closed ());
6266
6367 PetscReal value = 0. ;
6468
65- LibmeshPetscCall (VecNorm (_vec , NORM_1 , & value ));
69+ LibmeshPetscCall (VecNorm (_vec , N , & value ));
6670
6771 return static_cast < Real > (value );
6872}
69-
70-
71-
73+ template < typename T >
74+ Real PetscVector < T > ::l1_norm () const
75+ {
76+ return PetscVector < T > ::norm < NORM_1 > ( );
77+ }
7278template < typename T >
7379Real PetscVector < T > ::l2_norm () const
7480{
75- parallel_object_only ();
76-
77- this -> _restore_array ();
78- libmesh_assert (this -> closed ());
79-
80- PetscReal value = 0. ;
81-
82- LibmeshPetscCall (VecNorm (_vec , NORM_2 , & value ));
83-
84- return static_cast < Real > (value );
81+ return PetscVector < T > ::norm < NORM_2 > ( );
8582}
86-
87-
88-
89-
9083template < typename T >
9184Real PetscVector < T > ::linfty_norm () const
9285{
93- parallel_object_only ();
94-
95- this -> _restore_array ();
96- libmesh_assert (this -> closed ());
97-
98- PetscReal value = 0. ;
99-
100- LibmeshPetscCall (VecNorm (_vec , NORM_INFINITY , & value ));
101-
102- return static_cast < Real > (value );
86+ return PetscVector < T > ::norm < NORM_INFINITY > ( );
10387}
10488
10589
10690
107-
10891template < typename T >
10992NumericVector < T > &
11093PetscVector < T > ::operator += (const NumericVector < T > & v )
0 commit comments