A quick update -

The concern about the warning is the sparse matrix should be closed before
the vector multiplication. So this fixed it:

force_system.matrix->close();
force_system.matrix->vector_mult(*force_system.solution, *system.solution);

Sorry for the spam - hopefully this can be helpful for future searches that
hit this thread.

Best,
Shawn

On Thu, Feb 28, 2019 at 1:20 PM Yuxiang Wang <yw...@virginia.edu> wrote:

> One way I was thinking about to avoid this issue is to directly initialize
> a sparse matrix and use an explicit system, without creating an implicit
> system.
>
> Sorry about the dumb question, but I couldn't find a way to initialize a
> sparse matrix with given size. The closest one I can find is in
> implicit_system.C and seems more complicated than what I needed (simply an
> empty matrix of certain size). Could anyone please help?
>
> Best,
> Shawn
>
> On Mon, Feb 25, 2019 at 6:07 PM Yuxiang Wang <yw...@virginia.edu> wrote:
>
>> Dear all,
>>
>> In solving for linear elasticity, I would need to know the reaction
>> forces. This should be relatively easy - just use the stiffness matrix *
>> solution vector and we can get the reaction forces.
>>
>> I used a new system to store the unpenalized stiffness matrix as well as
>> the force values:
>>
>> // Initialize another system to store forces
>> LinearImplicitSystem & force_system =
>> equation_systems.add_system<LinearImplicitSystem> ("ForceSystem");
>>
>> force_system.add_variable("fx");
>> force_system.add_variable("fy");
>> force_system.add_variable("fz");
>>
>> I used `system` being the main equation system. During the assembly, I
>> just assembled two copies of the stiffness matrix, so I can leave one
>> unpenalized:
>> force_system.matrix->add_matrix (Ke, dof_indices);
>> dof_map.constrain_element_matrix_and_vector (Ke, Fe, dof_indices);
>> system.matrix->add_matrix (Ke, dof_indices);
>> system.rhs->add_vector (Fe, dof_indices);
>>
>> Lastly, I just used a vector_mult to get the actual reaction force:
>>
>> force_system.matrix->vector_mult(*force_system.solution, *system.solution
>> );
>>
>> It worked quite conveniently, because I can also export the nodal forces
>> that are already associated with the mesh. However, I did see a warning:
>>
>> Matrix A must be assembled before calling PetscVector::add_vector(v, A).
>> Please update your code, as this warning will become an error in a future
>> release.src/numerics/petsc_vector.C, line 235, compiled Sep 19 2018 at
>> 23:21:53 ***
>> *** Warning, This code is deprecated, and likely to be removed in future
>> library versions! src/numerics/petsc_vector.C, line 236, compiled Sep 19
>> 2018 at 23:21:53 ***
>>
>> Any ideas in how I can get around this issue?
>>
>> Best,
>> Shawn
>>
>> --
>> Yuxiang "Shawn" Wang, PhD
>> yw...@virginia.edu
>> +1 (434) 284-0836
>>
>
>
> --
> Yuxiang "Shawn" Wang, PhD
> yw...@virginia.edu
> +1 (434) 284-0836
>


-- 
Yuxiang "Shawn" Wang, PhD
yw...@virginia.edu
+1 (434) 284-0836

_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to