Thank you Derek! I actually looked into MOOSE before my own implementation
but then I found this:

https://groups.google.com/forum/#!searchin/moose-users/central$20difference%7Csort:date/moose-users/FJnjdc7u6Xc/juFZpdXMBwAJ


Let me follow up the thread on MOOSE and continue there :)

Best,
Shawn

On Tue, May 21, 2019 at 5:37 AM Derek Gaston <fried...@gmail.com> wrote:

> Yep - vector_mult, reciprocal, and pointwise_mult are how we do explicit
> updating in MOOSE:
>
>
> https://github.com/idaholab/moose/blob/next/framework/src/timeintegrators/ActuallyExplicitEuler.C#L182
>
> Derek
>
>
> On Mon, May 20, 2019 at 2:38 PM Yuxiang Wang <yw...@virginia.edu> wrote:
>
>> Thank you Jed & John! That's extremely helpful.
>>
>> John - thank you so much for the insight and pointer to reciprocal() and
>> pointwise_mult()! As for adding additional NumericVector to the system -
>> do
>> you happen to know any example or code snippet that did this? What I am
>> doing now is creating a new ExplicitSystem and using its solution vector
>> as
>> the storage, which handles the initialization quite nicely but maybe is an
>> overkill.
>>
>> Best,
>> Shawn
>>
>> On Mon, May 20, 2019 at 7:11 AM Jed Brown <j...@jedbrown.org> wrote:
>>
>> > John Peterson <jwpeter...@gmail.com> writes:
>> >
>> > > On Sun, May 19, 2019 at 9:15 PM Yuxiang Wang <yw...@virginia.edu>
>> wrote:
>> > >
>> > >> Dear all,
>> > >>
>> > >> Sorry for the spam and being new to the field.
>> > >>
>> > >> I am currently trying to implement an elastodynamics problem with
>> > explicit
>> > >> method (central difference method, to be specific). I am planning to
>> use
>> > >> lumped mass matrix (and Rayleigh damping when needed), so the system
>> > matrix
>> > >> will be simply a diagonal matrix. Solving is therefore trivial - I
>> just
>> > >> need to do per-element division of the rhs by the diagonal entries to
>> > get
>> > >> the solution vector.
>> > >>
>> > >> For this problem, I have the option of just treating it as an
>> implicit
>> > >> system - fill the system.matrix with only diagonal components and
>> call
>> > the
>> > >> PETSc LU solver. This is very easy thanks to a lot of the libmesh
>> > >> infrastructure available. If I do so, should I be concerned about a
>> > >> significant slowdown? Or would PETSc be smart enough to realize that
>> > this
>> > >> is already diagonal matrix and be efficient in solving it?
>> > >>
>> > >
>> > > Yes, I'm pretty sure this will be significantly slower than doing a
>> > > "manual" inversion by taking the reciprocal of the matrix diagonal. I
>> > don't
>> > > know of anything in PETSc's LU solver that will detect this particular
>> > > special case. For an explicit code where you want every timestep to
>> be as
>> > > fast as possible, it will likely be prohibitively slow.
>> >
>> > If you have a sparse matrix with only the diagonal nonzero, then LU will
>> > create no fill and it'll actually be pretty fast (likely hard to measure
>> > compared to the cost of evaluating the explicit part), but -pc_type
>> > jacobi would also be an exact solver and is more precisely what you
>> > need.  Note that the default bjacobi/ilu is also an exact solver in this
>> > circumstance, as are many other preconditioners.
>> >
>> > > My other choice would be to create a NumericVector myself to store the
>> > >> diagonal system matrix entries, and perform the per-element division.
>> > This
>> > >> would take more work and will not be using the already well-tested
>> > libmesh
>> > >> infrastructure, so I am trying to see whether I can get away with
>> doing
>> > >> this without compromising on the performance.
>> > >
>> > >
>> > > This would probably work best. You can add additional vectors to
>> Systems
>> > > and assemble into them similarly to the way you assemble the
>> right-hand
>> > > side vector. Also note that NumericVectors have the reciprocal() API,
>> > which
>> > > will allow you to quickly compute the inverse, as well as
>> > pointwise_mult()
>> > > which should allow you to quickly apply it.
>> > >
>> > > --
>> > > John
>> > >
>> > > _______________________________________________
>> > > Libmesh-users mailing list
>> > > Libmesh-users@lists.sourceforge.net
>> > > https://lists.sourceforge.net/lists/listinfo/libmesh-users
>> >
>>
>>
>> --
>> 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
>>
>

-- 
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