@@ -23,6 +23,8 @@ public:
2323
2424 CPPUNIT_TEST ( testGetArray );
2525
26+ CPPUNIT_TEST ( testPetscOperations );
27+
2628 CPPUNIT_TEST_SUITE_END ();
2729
2830 void testGetArray ()
@@ -77,6 +79,41 @@ public:
7779 v .restore_array ();
7880 }
7981
82+ void testPetscOperations ()
83+ {
84+ PetscVector < Number > v1 (* my_comm , global_size , local_size );
85+ auto v2 = v1 .clone ();
86+
87+ const libMesh ::dof_id_type
88+ first = v1 .first_local_index (),
89+ last = v1 .last_local_index ();
90+
91+ for (libMesh ::dof_id_type n = first ; n != last ; n ++ )
92+ {
93+ v1 .set (n , static_cast < libMesh ::Number > (n + 1 ));
94+ v2 -> set (n , static_cast < libMesh ::Number > (2 * (n + 1 )));
95+ }
96+ v1 .close ();
97+ v2 -> close ();
98+
99+ auto v_working_ptr = v1 .clone ();
100+ auto & v_working = * v_working_ptr ;
101+
102+ v_working .pointwise_mult (v1 , * v2 );
103+
104+ for (libMesh ::dof_id_type n = first ; n != last ; n ++ )
105+ LIBMESH_ASSERT_FP_EQUAL (libMesh ::libmesh_real (v_working (n )),
106+ libMesh ::Real ((n + 1 )* 2 * (n + 1 )),
107+ libMesh ::TOLERANCE * libMesh ::TOLERANCE );
108+
109+ v_working .pointwise_divide (v1 , * v2 );
110+
111+ for (libMesh ::dof_id_type n = first ; n != last ; n ++ )
112+ LIBMESH_ASSERT_FP_EQUAL (libMesh ::libmesh_real (v_working (n )),
113+ libMesh ::Real (0.5 ),
114+ libMesh ::TOLERANCE * libMesh ::TOLERANCE );
115+ }
116+
80117};
81118
82119CPPUNIT_TEST_SUITE_REGISTRATION ( PetscVectorTest );
0 commit comments