[petsc-users] Use block Jacobi preconditioner with SNES
Ali Reza Khaz'ali
arkhazali at cc.iut.ac.ir
Mon Aug 27 03:12:36 CDT 2018
> Okay, interesting. I take it you either are not running in parallel
or need to have several subdomains (of varying size) per process.
> One approach would be to use PCASM (with zero overlap, it is
equivalent to Block Jacobi) and then use -mat_partitioning_type to
select a partitioner (could be a general graph partitioner or could by a
custom implementation that you provide). I don't know if this would
feel overly clumsy or ultimately be a cleaner and more generic approach.
Thanks for the answer. I'm still running a serial code. I plan to
parallelized it after finding a suitable solver. Unfortunately, I do not
know how to use PCASM, and therefore, I'm going to learn it. In
addition, I found another possible solution with MATNEST. However, I do
not know if MATNEST is suitable for my application or if it can be used
with SNES. I'd be grateful if you could kindly guide me about it.
> Lets discuss this point a bit further. I assume your system is
sparse. Sparse direct solvers can solve systems fairly efficiently for
hundreds of thousands of unknowns. How big do you want? Also, do you
plan on having more than 500K unknowns per process? If not, why not just
use sparse direct solvers on each process?
Thanks for the answer. My system is sparse, and also a variable sized
block matrix. For example, for a small size simulation, I have about 7K
unknowns. For ONE TIME STEP, Intel MKL PARDISO took about 30 minutes to
solve my system, while occupying about 2.5GB out of my 4GB RAM. Since I
have to simulate at least 10000 time steps, the runtime (and the
required RAM) would be unacceptable.
> If none of the suggestions provided is to your taste, why not just
build the preconditioner matrix yourself? Seems your have precise
requirements and the relevant info of the individual blocks, so you
should be able to construct the preconditioner, either using A (original
operator) or directly from the discrete problem.
Thanks for your answer. As I stated, I have built a preconditioner for
it. My preconditioner does not require a large memory, however, it has a
low performance (even on GPU). Therefore, I'm trying to use PETSc
functions and modules to solve the system more efficiently. I do not
think there is any other library more suited than PETSc for the job.
Best Regards,
Ali
More information about the petsc-users
mailing list