Ceci est une ancienne révision du document !
UMFPACK
Installation
nemo | 4.4 | /usr/local/UMFPACKv4.4 | compilé avec sunperflib |
shrek | /usr/local/UMFPACKv4.4 | compilé avec K. Goto's BLAS |
Utilisation
- /usr/local/UMFPACKv4.4/UMFPACK/Lib/libumfpack.a
- /usr/local/UMFPACKv4.4/AMD/Lib/libamd.a
- /usr/local/UMFPACKv4.4/UMFPACK/Include
- /usr/local/UMFPACKv4.4/AMD/Include
- /local/apps/src/UMFPACKv4.4/UMFPACK/Demo/
Utilisation de umfpack dans un code fortran:
- umfpack est écrit en C
- il existe une interface fortran 77, utilisable en fortran 90
- prendre pour exemple le fichier Demo/umf4hb64.f dans /local/apps/src/UMFPACKv4.4/UMFPACK/Demo/ sur nemo
- dans son fichier, ajouter les lignes suivantes:
call umf4def (control) ! met les parametres par defauts control (1) = 1 call umf4pcon (control) call umf4sym (N, N, Ap, Ai, Ax, symbolic, control, info) ! pre-order and symbolic analysis call umf4num (Ap, Ai, Ax, symbolic, numeric, control, info) call umf4fsym (symbolic) call umf4sol (sys, x, RHSV, numeric, control, info) call umf4fnum (numeric) call umf4pinf (control, info)
Pour cela, il faut bien entendu lier votre programme avec le programme umf4_f77wrapper.c, de la facon suivante:
cc -o umf4_f77wrapper.o -DDLONG -m64 -I/usr/local/UMFPACKv4.4/UMFPACK/Include -c umf4_f77wrapper.c f90 -o poisson3d_umfpack.o -g -fast -C -e -fpp -stackvar -xcheck=init_local -fpover -ftrap=%none -Xlist -fsimple=0 -fns=no -dalign -O4 -KPIC -xmodel=medium -m64 -c poisson3d_umfpack.f90 f90 -g -fast -C -e -fpp -stackvar -xcheck=init_local -fpover -ftrap=%none -Xlist -fsimple=0 -fns=no -dalign -O4 -KPIC -xmodel=medium -m64 -o poisson3d_umfpack poisson3d_umfpack.o umf4_f77wrapper.o /usr/local/UMFPACKv4.4/UMFPACK/Lib/libumfpack.a /usr/local/UMFPACKv4.4/AMD/Lib/libamd.a -xlic_lib=sunperf
Config
- on édite Make.include et Make.solaris (voir lien sur Make.solaris_amd64) avant de compiler
diff /local/apps/src/UMFPACKv4.4/UMFPACK/Make/Make.include-ori /local/apps/src/UMFPACKv4.4/UMFPACK/Make/Make.include 50c50 < CONFIG = -DNBLAS --- > CONFIG = 63c63 < # include ../Make/Make.solaris --- > include ../Make/Make.solaris
et
diff /local2/fboyer/UMFPACKv4.4/UMFPACK/Make/Make.solaris /local/apps/src/UMFPACKv4.4/UMFPACK/Make/Make.solaris 5a6 > 11,13c12,14 < CC = cc < CFLAGS = -Xc -xO5 -KPIC -dalign -xtarget=generic64 < F77FLAGS = -xO5 -KPIC -dalign -m64 --- > CC = cc > CFLAGS = -xO5 -xdepend -DLP64 -xprefetch=auto -xprefetch_level=3 -xipo=2 -m64 -xmodel=medium > F77FLAGS = -xO5 -xdepend -DLP64 -xprefetch=auto -xprefetch_level=3 -xipo=2 -m64 -xmodel=medium 22d22 < #LIB = -xlic_lib=sunperf -lfai -lfsu -lfui -lsunperf -lm -lsunmath 30c30 < LIB = -xlic_lib=sunperf -lfai -lfsu -lfui -lm --- > LIB = -L/opt/studio12/SUNWspro/lib/amd64 -R/opt/studio12/SUNWspro/lib/amd64 -lsunperf -lm -lpicl -lmtsk
- 64 bits uniquement
- il y a un bug dans les programmes de test, corrige dans umf4hb64.f
diff /local/apps/src/UMFPACKv4.4/UMFPACK/Demo/umf4hb64.f-ori /local/apps/src/UMFPACKv4.4/UMFPACK/Demo/umf4hb64.f 331c331 < $ n, nz, Ap (n+1), Ai (n), j, i, p --- > $ n, nz, Ap (n+1), Ai (nz), j, i, p
Tests
- prendre le source ici
module load ss12 cc -o umfpack_simple -m64 umfpack_simple.c -I/usr/local/UMFPACKv4.4/UMFPACK/Include -R/usr/local/UMFPACKv4.4/UMFPACK/Lib -L/usr/local/UMFPACKv4.4/UMFPACK/Lib -R/usr/local/UMFPACKv4.4/AMD/Lib -L/usr/local/UMFPACKv4.4/AMD/Lib -lumfpack -lamd -xlic_lib=sunperf
ou
module load ss12u1 cc -o umfpack_simple -m64 umfpack_simple.c -I/usr/local/UMFPACKv4.4/UMFPACK/Include -R/usr/local/UMFPACKv4.4/UMFPACK/Lib -L/usr/local/UMFPACKv4.4/UMFPACK/Lib -R/usr/local/UMFPACKv4.4/AMD/Lib -L/usr/local/UMFPACKv4.4/AMD/Lib -lumfpack -lamd -xlic_lib=sunperf -lm