Comments (10)
@valonbb have you tried the HYPRE_ILU options? This is the replacement for EUCLID and I believe some of the options have support for zero diagonals. Alternatively, you can perturb your input matrix with small entries corresponding to the zero pivots, prior to calling EUCLID.
from hypre.
@oseikuffuor1 Initially that is what I have done, used HYPRE_ILU, rather than EUCLID, but I have found its behaviour to not be very robust with varying number of mpi processes. Replacing zero pivots with small entries sound like a good idea, what range of "small numbers" (relative to drop tol or min/max of matrix at hand) would you recommend to use to replace zero pivots?
Thanks a lot for all your help.
from hypre.
@valonbb something small, relative to the entries in the matrix should be good. droptol * min/max is fine if you know what min and max are. You can also pick something a few orders of magnitude smaller than your min (nonzero) diagonal entry.
Have you tried any reordering techniques (RCM, AMD, etc)? If you have access to the matrix info, you could also keep the zero (or small) diagonals close to the lower part of the matrix to increase the chances of nonzero pivots during the factorization.
from hypre.
@oseikuffuor1 Thank you for your suggestions. I have not actually tried using any reordering techniques, as it does not seem that EUCLID supports that explicitly, but sure that can be done before EUCLID is called.
you could also keep the zero (or small) diagonals close to the lower part of the matrix to increase the chances of nonzero pivots during the factorization.
Yes, I have access to matrix. Would this mean some further permutation of matrix to push smaller diagonal values on the lower part? I am not sure if I understood this correctly.
Thanks a lot for all your help, very much appreciated
from hypre.
@valonbb Yes, if you have access to the matrix, then permuting like you said could help. Keep in mind that depending on the structure of the matrix, that will also affect the fill-in pattern of the resulting factorization. I assume if you are using EUCLID then you are relying on ILU(k) routines? Also, did perturbing small entries not help?
from hypre.
@oseikuffuor1 Yes perturbing small entries actually help and it does seem to work well so far - thanks a lot for your suggestion and all your help. You are certainly right, this would depend on the structure of the matrix and so affecting fill-ins in the factorization. Yes, I am relying on ILUK as I think EUCLID supports ILUT in the sequential operation, only?
from hypre.
@valonbb Yes EUCLID's ILUT can only be used sequentially, unfortunately. Curious, are you using the block Jacobi option for EUCLID or the default parallel ILU option? I am still surprised that HYPRE_ILU does not work for your problem. Are you able to share what the structure of your system looks like?
from hypre.
Hi @oseikuffuor1,
Thanks a lot for your reply and apologise that it is taking this long from my side to reply.
I am mainly using EUCLID default option PILU, rather than block Jacobi. Although, the pivot is now fixed based on your suggestions – thanks a lot for your help, I find EUCLID to be relatively slow compare to ILU (sequentially).
I am indeed able to share matrix structure with you, please find attached the matrix in IJ format and matrix market format, hopefully this helps.
A.txt - matrix market format
IJ.A.txt - IJ format
For this problem I have used BiCGSTAB solver and ILU preconditioner along with these parameters:
HYPRE_BiCGSTABSetMaxIter(solver, 1000);
HYPRE_BiCGSTABSetTol(solver, 1,0e-10);
HYPRE_ILUSetMaxIter(precond, 1);
HYPRE_ILUSetTol(precond, 0.);
HYPRE_ILUSetType(precond, 31); /* I have also used other options here: 0, 1, 10, 11, 31 */
HYPRE_ILUSetDropThreshold(precond, 1.0e-3);
When I run this sequentially, that is using mpirun -np 1 – I get
number of iterations = 9
final residual norm = 1.98434e-11
Whereas using 2 processes – mpirun -np 2
number of iterations: 1000
final residual norm: 0.99994
Suggesting that solution has not converged. I find similar behaviour with changing the type of ilu and also varying number of processors. Also, increasing maximum number of iterations does not seem to help.
I very much appreciate your time to look after this - thanks a lot for all your help.
from hypre.
@valonbb thanks for the data. Can you also share the data for the two processor case? You can use hypre's IJMatrixPrint routine and it should print the matrix decomposed as you have it on the two processors (so two systems, one for each processor).
from hypre.
@oseikuffuor1 yes, please find below the matrix decomposed across processors:
IJ.out.A.00001.txt
IJ.out.A.00000.txt
Thanks a lot for your help.
from hypre.
Related Issues (20)
- Minimal HYPRE CUDA Example
- HYPRE CUDA build problems
- print vector all the same
- HYPRE CUDA examples only work in Debug builds HOT 3
- tar files for previous releases (to track down the cause of increased iteration counts when upgrading from 2.0.0) HOT 3
- Relative error floor for AMS in semi-definite Maxwell problems
- the setup time accounts for 77%
- changed default settings from 2.0.0 to 2.30.0 HOT 3
- Bad convergence using BoomerAMG for system of equations and InterpType doesn't work HOT 2
- New hypre release 2.31.0 HOT 6
- ParCSRAAt for nonsquare matrices HOT 1
- INSTALL.md: add Macports option for macOS
- Broken link in docs
- Requesting information on cmake for applications
- Improve GPU-aware MPI option
- When using AMS_PCG to solve multiple right-hand sides iteratively, I've noticed a continuous increase in memory usage.
- Could NOT find HYPRE (missing: HYPRE_LIBRARIES HYPRE_INCLUDE_DIRS)
- Floating point exception inf pcg.c HOT 1
- Can we find a minimal self-contained gpu example of using hypre ij interface nad its related solver?
- Best configuration to BoomerAMG on CPUs
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hypre.