umfpack

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/local2/fboyer/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
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
  • umfpack.1259156775.txt.gz
  • Dernière modification : 2017/08/25 09:55
  • (modification externe)