[37219] trunk/dports/math
mmoll at macports.org
mmoll at macports.org
Fri May 30 08:52:14 PDT 2008
Revision: 37219
http://trac.macosforge.org/projects/macports/changeset/37219
Author: mmoll at macports.org
Date: 2008-05-30 08:52:10 -0700 (Fri, 30 May 2008)
Log Message:
-----------
math/slepc: new port, includes a fragile check of which fortran library to use for the arpack variant.
Added Paths:
-----------
trunk/dports/math/slepc/
trunk/dports/math/slepc/Portfile
trunk/dports/math/slepc/files/
trunk/dports/math/slepc/files/patch-slepc-2.3.3-7.diff
Added: trunk/dports/math/slepc/Portfile
===================================================================
--- trunk/dports/math/slepc/Portfile (rev 0)
+++ trunk/dports/math/slepc/Portfile 2008-05-30 15:52:10 UTC (rev 37219)
@@ -0,0 +1,78 @@
+# $Id$
+
+PortSystem 1.0
+
+name slepc
+version 2.3.3
+categories math science
+maintainers mmoll
+description Scalable Library for Eigenvalue Problem Computations
+long_description SLEPc is a software library for the solution of large \
+ scale sparse eigenvalue problems on parallel computers. It is an \
+ extension of PETSc and can be used for either standard or generalized \
+ eigenproblems, with real or complex arithmetic. It can also be used for \
+ computing a partial SVD of a large, sparse, rectangular matrix.
+platforms darwin
+homepage http://www.grycap.upv.es/slepc
+master_sites http://www.grycap.upv.es/slepc/download/distrib
+distname ${name}-${version}
+
+# fixed up patch from official site:
+# (1) removed one patch that was rejected by patch,
+# (2) official path assumed "patch -p1", whereas MacPorts assumes "patch -p0".
+patchfiles patch-${distname}-7.diff
+
+checksums md5 5f9172c12f95ea0bebc73d45f4cdcaa0 \
+ sha1 17ffa8507ae81102178e5041e1f57c20cb9143c2
+
+depends_lib-append port:petsc
+
+extract.suffix .tgz
+configure.env-append PETSC_DIR=${prefix}/lib/petsc PETSC_ARCH=darwin \
+ SLEPC_DIR=${worksrcpath}
+configure.cmd ${worksrcpath}/config/configure.py
+configure.args --prefix=${prefix}/lib/petsc
+build.env PETSC_DIR=${prefix}/lib/petsc PETSC_ARCH=darwin \
+ SLEPC_DIR=${worksrcpath}
+destroot.env PETSC_DIR=${prefix}/lib/petsc PETSC_ARCH=darwin \
+ SLEPC_DIR=${worksrcpath}
+destroot.destdir SLEPC_INSTALL_DIR=${destroot}${prefix}/lib/petsc
+
+variant arpack description {compile with ARPACK support} {
+ pre-fetch {
+ if {![file exists ${prefix}/lib/libparpack.a]} {
+ return -code error "Please install the mpi variant of arpack first."
+ }
+ }
+ # This is a rather fragile way to figure out where the fortran library can be
+ # found that is needed to link against libparpack.a:
+ if {[file exists ${prefix}/lib/gcc43]} {
+ set fortrandir ${prefix}/lib/gcc43
+ } else {
+ if {[file exists ${prefix}/lib/gcc42]} {
+ set fortrandir ${prefix}/lib/gcc42
+ } else {
+ if {[file exists ${prefix}/lib/g95]} {
+ set fortrandir ${prefix}/lib/gcc95
+ } else {
+ return -code error "Please install a fortran compiler by installing one of the following ports: gcc42, gcc43, or g95."
+ }
+ }
+ }
+ depends_lib-append port:arpack
+ configure.args-append --with-arpack-dir=${fortrandir} \
+ --with-arpack-flags=-lparpack,-larpack,-lgfortran,-lmpi_f77
+}
+
+post-activate {
+ ui_msg "********************************************************"
+ ui_msg "* Add the following lines to your .bash_profile if you *"
+ ui_msg "* plan to use the PETSC/SLEPC makefile rules in *"
+ ui_msg "* $prefix/lib/petsc/bmake: *"
+ ui_msg "* *"
+ ui_msg "* export PETSC_DIR=${prefix}/lib/petsc *"
+ ui_msg "* export PETSC_ARCH=darwin *"
+ ui_msg "* export SLEPC_DIR=${prefix}/lib/petsc *"
+ ui_msg "* *"
+ ui_msg "********************************************************"
+}
Property changes on: trunk/dports/math/slepc/Portfile
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Added: trunk/dports/math/slepc/files/patch-slepc-2.3.3-7.diff
===================================================================
--- trunk/dports/math/slepc/files/patch-slepc-2.3.3-7.diff (rev 0)
+++ trunk/dports/math/slepc/files/patch-slepc-2.3.3-7.diff 2008-05-30 15:52:10 UTC (rev 37219)
@@ -0,0 +1,807 @@
+Index: config/configure.py
+diff -u config/configure.py:1.23 config/configure.py:1.23.2.1
+--- config/configure.py:1.23 Thu May 31 17:11:23 2007
++++ config/configure.py Mon Oct 1 12:39:43 2007
+@@ -163,6 +163,13 @@
+ log.Write('Configure Options: '+str.join(' ',sys.argv))
+ log.Write('Working directory: '+os.getcwd())
+ log.Write('Python version:\n' + sys.version)
++log.Write('make: ' + petscconf.MAKE)
++log.Write('PETSc source directory: ' + petscdir)
++log.Write('PETSc install directory: ' + petscconf.INSTALL_DIR)
++log.Write('PETSc version: ' + petscconf.VERSION)
++log.Write('PETSc architecture: ' + petscconf.ARCH)
++log.Write('SLEPc source directory: ' + slepcdir)
++log.Write('SLEPc install directory: ' + prefixdir)
+ log.Write('='*80)
+
+ # Check if PETSc is working
+Index: config/lapack.py
+diff -u config/lapack.py:1.12 config/lapack.py:1.12.2.2
+--- config/lapack.py:1.12 Thu May 31 17:11:23 2007
++++ config/lapack.py Tue Dec 18 18:35:41 2007
+@@ -52,23 +52,24 @@
+ conf.write(' -DSLEPC_MISSING_LAPACK_' + i.upper())
+
+
++ functions = ['stevr','bdsdc']
+ if petscconf.PRECISION == 'single':
+- functions = ['slamch','sstevr','sbdsdc']
++ prefix = 's'
+ else:
+- functions = ['dlamch','dstevr','dbdsdc']
++ prefix = 'd'
+
+ for i in functions:
+ f = '#if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_UNDERSCORE)\n'
+- f += i + '_\n'
++ f += prefix + i + '_\n'
+ f += '#elif defined(PETSC_HAVE_FORTRAN_CAPS)\n'
+- f += i.upper() + '\n'
++ f += prefix.upper() + i.upper() + '\n'
+ f += '#else\n'
+- f += i + '\n'
++ f += prefix + i + '\n'
+ f += '#endif\n'
+
+ log.Write('=== Checking LAPACK '+i+' function...')
+ if not check.Link([f],[],[]):
+- missing.append(i)
++ missing.append(prefix + i)
+ conf.write(' -DSLEPC_MISSING_LAPACK_' + i.upper())
+
+ conf.write('\n')
+Index: include/slepc.h
+diff -u include/slepc.h:1.11 include/slepc.h:1.11.4.1
+--- include/slepc.h:1.11 Thu May 31 17:04:53 2007
++++ include/slepc.h Thu Jul 5 13:03:48 2007
+@@ -47,6 +47,8 @@
+ EXTERN PetscErrorCode SlepcMatConvertSeqDense(Mat,Mat*);
+ EXTERN PetscErrorCode SlepcCheckOrthogonality(Vec*,PetscInt,Vec *,PetscInt,Mat,PetscScalar*);
+
++extern PetscTruth SlepcInitializeCalled;
++
+ PETSC_EXTERN_CXX_END
+ #endif
+
+Index: include/slepcblaslapack.h
+diff -u include/slepcblaslapack.h:1.31 include/slepcblaslapack.h:1.31.4.1
+--- include/slepcblaslapack.h:1.31 Thu May 31 17:04:53 2007
++++ include/slepcblaslapack.h Mon Dec 17 18:55:35 2007
+@@ -97,13 +97,11 @@
+ #define LAPACKormlq_ SLEPC_BLASLAPACK(unmlq,UNMLQ)
+ #endif
+
+-#define LAPACKlamch_ SLEPC_BLASLAPACKREAL(lamch,LAMCH)
+ #define LAPACKstevr_ SLEPC_BLASLAPACKREAL(stevr,STEVR)
+ #define LAPACKbdsdc_ SLEPC_BLASLAPACKREAL(bdsdc,BDSDC)
+
+ EXTERN_C_BEGIN
+
+-EXTERN PetscReal LAPACKlamch_(const char*,PetscBLASInt);
+ EXTERN PetscReal LAPACKlanhs_(const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt);
+ EXTERN PetscReal LAPACKlange_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt);
+ EXTERN void LAPACKlaev2_(PetscScalar*,PetscScalar*,PetscScalar*,PetscReal*,PetscReal*,PetscReal*,PetscScalar*);
+Index: include/slepcsvd.h
+diff -u include/slepcsvd.h:1.26 include/slepcsvd.h:1.26.2.2
+--- include/slepcsvd.h:1.26 Fri Jun 1 16:15:48 2007
++++ include/slepcsvd.h Thu Jul 5 18:21:10 2007
+@@ -139,4 +139,5 @@
+ #endif
+ EXTERN PetscErrorCode SVDRegisterDestroy(void);
+
++PETSC_EXTERN_CXX_END
+ #endif
+Index: include/slepcversion.h
+diff -u include/slepcversion.h:1.13 include/slepcversion.h:1.13.2.7
+--- include/slepcversion.h:1.13 Fri Jun 1 18:25:57 2007
++++ include/slepcversion.h Mon Mar 3 17:48:21 2008
+@@ -19,9 +19,9 @@
+ #define SLEPC_VERSION_MAJOR 2
+ #define SLEPC_VERSION_MINOR 3
+ #define SLEPC_VERSION_SUBMINOR 3
+-#define SLEPC_VERSION_PATCH 0
++#define SLEPC_VERSION_PATCH 7
+ #define SLEPC_VERSION_DATE "June 1, 2007"
+-#define SLEPC_VERSION_PATCH_DATE "June 1, 2007"
++#define SLEPC_VERSION_PATCH_DATE "March 3, 2008"
+ #define SLEPC_AUTHOR_INFO " The SLEPc Team\n\
+ slepc-maint at grycap.upv.es\n\
+ http://www.grycap.upv.es/slepc\n"
+Index: include/finclude/slepceps.h
+diff -u include/finclude/slepceps.h:1.7 include/finclude/slepceps.h:1.7.4.1
+--- include/finclude/slepceps.h:1.7 Thu May 31 17:04:53 2007
++++ include/finclude/slepceps.h Thu Jan 31 16:21:32 2008
+@@ -21,12 +21,13 @@
+ #define EPSSUBSPACE 'subspace'
+ #define EPSARNOLDI 'arnoldi'
+ #define EPSLANCZOS 'lanczos'
++#define EPSKRYLOVSCHUR 'krylovschur'
+ #define EPSLAPACK 'lapack'
+ #define EPSARPACK 'arpack'
+ #define EPSBLZPACK 'blzpack'
+-#define EPSPLANSO 'planso'
+ #define EPSTRLAN 'trlan'
+-#define EPSLOBPCG 'lobpcg'
++#define EPSBLOPEX 'blopex'
++#define EPSPRIMME 'primme'
+
+ ! Convergence flags.
+ ! They sould match the flags in $SLEPC_DIR/include/slepceps.h
+@@ -66,20 +67,6 @@
+ parameter (EPS_SMALLEST_REAL = 3)
+ parameter (EPS_LARGEST_IMAGINARY = 4)
+ parameter (EPS_SMALLEST_IMAGINARY = 5)
+-
+- integer EPS_MGS_ORTH
+- integer EPS_CGS_ORTH
+-
+- parameter (EPS_MGS_ORTH = 0)
+- parameter (EPS_CGS_ORTH = 1)
+-
+- integer EPS_ORTH_REFINE_NEVER
+- integer EPS_ORTH_REFINE_IFNEEDED
+- integer EPS_ORTH_REFINE_ALWAYS
+-
+- parameter (EPS_ORTH_REFINE_NEVER = 0)
+- parameter (EPS_ORTH_REFINE_IFNEEDED = 1)
+- parameter (EPS_ORTH_REFINE_ALWAYS = 2)
+
+ integer EPSPOWER_SHIFT_CONSTANT
+ integer EPSPOWER_SHIFT_RAYLEIGH
+@@ -94,17 +81,65 @@
+
+ parameter (EPS_ONE_SIDE = 0)
+ parameter (EPS_TWO_SIDE = 1)
++
++ integer EPS_RITZ
++ integer EPS_HARMONIC
++ integer EPS_REFINED
++ integer EPS_REFINED_HARMONIC
++
++ parameter (EPS_RITZ = 1)
++ parameter (EPS_HARMONIC = 2)
++ parameter (EPS_REFINED = 3)
++ parameter (EPS_REFINED_HARMONIC = 4)
+
+- integer EPSLANCZOS_REORTHOG_NONE
++ integer EPSLANCZOS_REORTHOG_LOCAL
+ integer EPSLANCZOS_REORTHOG_FULL
+ integer EPSLANCZOS_REORTHOG_SELECTIVE
+ integer EPSLANCZOS_REORTHOG_PERIODIC
+ integer EPSLANCZOS_REORTHOG_PARTIAL
+
+- parameter (EPSLANCZOS_REORTHOG_NONE = 0)
++ parameter (EPSLANCZOS_REORTHOG_LOCAL = 0)
+ parameter (EPSLANCZOS_REORTHOG_FULL = 1)
+ parameter (EPSLANCZOS_REORTHOG_SELECTIVE = 2)
+ parameter (EPSLANCZOS_REORTHOG_PERIODIC = 3)
+ parameter (EPSLANCZOS_REORTHOG_PARTIAL = 4)
+
++ integer EPSPRIMME_DYNAMIC
++ integer EPSPRIMME_DEFAULT_MIN_TIME
++ integer EPSPRIMME_DEFAULT_MIN_MATVECS
++ integer EPSPRIMME_ARNOLDI
++ integer EPSPRIMME_GD
++ integer EPSPRIMME_GD_PLUSK
++ integer EPSPRIMME_GD_OLSEN_PLUSK
++ integer EPSPRIMME_JD_OLSEN_PLUSK
++ integer EPSPRIMME_RQI
++ integer EPSPRIMME_JDQR
++ integer EPSPRIMME_JDQMR
++ integer EPSPRIMME_JDQMR_ETOL
++ integer EPSPRIMME_SUBSPACE_ITERATION
++ integer EPSPRIMME_LOBPCG_ORTHOBASIS
++ integer EPSPRIMME_LOBPCG_ORTHOBASIS_WINDOW
++
++ parameter (EPSPRIMME_DYNAMIC = 0)
++ parameter (EPSPRIMME_DEFAULT_MIN_TIME = 1)
++ parameter (EPSPRIMME_DEFAULT_MIN_MATVECS = 2)
++ parameter (EPSPRIMME_ARNOLDI = 3)
++ parameter (EPSPRIMME_GD = 4)
++ parameter (EPSPRIMME_GD_PLUSK = 5)
++ parameter (EPSPRIMME_GD_OLSEN_PLUSK = 7)
++ parameter (EPSPRIMME_JD_OLSEN_PLUSK = 8)
++ parameter (EPSPRIMME_RQI = 9)
++ parameter (EPSPRIMME_JDQR = 10)
++ parameter (EPSPRIMME_JDQMR = 11)
++ parameter (EPSPRIMME_JDQMR_ETOL = 12)
++ parameter (EPSPRIMME_SUBSPACE_ITERATION = 13)
++ parameter (EPSPRIMME_LOBPCG_ORTHOBASIS = 14)
++ parameter (EPSPRIMME_LOBPCG_ORTHOBASIS_WINDOW = 15)
++
++ integer EPSPRIMME_NONE
++ integer EPSPRIMME_DIAGONAL
++
++ parameter (EPSPRIMME_NONE = 0)
++ parameter (EPSPRIMME_DIAGONAL = 1)
++
+ #endif
+Index: include/finclude/slepcip.h
+diff -u /dev/null include/finclude/slepcip.h:1.1
+--- /dev/null Mon Mar 3 17:49:38 2008
++++ include/finclude/slepcip.h Thu Jan 31 15:48:33 2008
+@@ -0,0 +1,38 @@
++!
++! Include file for Fortran use of the IP object in SLEPc
++!
++!
++! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++! SLEPc - Scalable Library for Eigenvalue Problem Computations
++! Copyright (c) 2002-2007, Universidad Politecnica de Valencia, Spain
++!
++! This file is part of SLEPc. See the README file for conditions of use
++! and additional information.
++! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++!
++#if !defined(__SLEPCIP_H)
++#define __SLEPCIP_H
++
++#define IP PetscFortranAddr
++
++ integer IP_MGS_ORTH
++ integer IP_CGS_ORTH
++
++ parameter (IP_MGS_ORTH = 0)
++ parameter (IP_CGS_ORTH = 1)
++
++ integer IP_ORTH_REFINE_NEVER
++ integer IP_ORTH_REFINE_IFNEEDED
++ integer IP_ORTH_REFINE_ALWAYS
++
++ parameter (IP_ORTH_REFINE_NEVER = 0)
++ parameter (IP_ORTH_REFINE_IFNEEDED = 1)
++ parameter (IP_ORTH_REFINE_ALWAYS = 2)
++
++ integer IP_MGS_ORTH
++ integer IP_CGS_ORTH
++
++ parameter (IP_MGS_ORTH = 0)
++ parameter (IP_CGS_ORTH = 1)
++
++#endif
+Index: include/finclude/slepcst.h
+diff -u include/finclude/slepcst.h:1.5 include/finclude/slepcst.h:1.5.4.1
+--- include/finclude/slepcst.h:1.5 Thu May 31 17:04:53 2007
++++ include/finclude/slepcst.h Thu Jan 31 16:24:04 2008
+@@ -29,14 +29,4 @@
+ parameter (STMATMODE_INPLACE = 1)
+ parameter (STMATMODE_SHELL = 2)
+
+- integer STINNER_HERMITIAN
+- integer STINNER_SYMMETRIC
+- integer STINNER_B_HERMITIAN
+- integer STINNER_B_SYMMETRIC
+-
+- parameter (STINNER_HERMITIAN = 0)
+- parameter (STINNER_SYMMETRIC = 1)
+- parameter (STINNER_B_HERMITIAN = 2)
+- parameter (STINNER_B_SYMMETRIC = 3)
+-
+ #endif
+Index: include/finclude/slepcsvd.h
+diff -u /dev/null include/finclude/slepcsvd.h:1.2
+--- /dev/null Mon Mar 3 17:49:38 2008
++++ include/finclude/slepcsvd.h Thu Jan 31 15:48:33 2008
+@@ -0,0 +1,51 @@
++!
++! Include file for Fortran use of the SVD object in SLEPc
++!
++!
++! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++! SLEPc - Scalable Library for Eigenvalue Problem Computations
++! Copyright (c) 2002-2007, Universidad Politecnica de Valencia, Spain
++!
++! This file is part of SLEPc. See the README file for conditions of use
++! and additional information.
++! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++!
++#if !defined(__SLEPCSVD_H)
++#define __SLEPCSVD_H
++
++#define SVD PetscFortranAddr
++#define SVDType character*(80)
++#define SVDConvergedReason integer
++
++#define SVDCROSS 'cross'
++#define SVDCYCLIC 'cyclic'
++#define SVDLAPACK 'lapack'
++#define SVDLANCZOS 'lanczos'
++#define SVDTRLANCZOS 'trlanczos'
++
++! Convergence flags.
++! They sould match the flags in $SLEPC_DIR/include/slepcsvd.h
++
++ integer SVD_CONVERGED_TOL
++ integer SVD_DIVERGED_ITS
++ integer SVD_DIVERGED_BREAKDOWN
++ integer SVD_CONVERGED_ITERATING
++
++ parameter (SVD_CONVERGED_TOL = 2)
++ parameter (SVD_DIVERGED_ITS = -3)
++ parameter (SVD_DIVERGED_BREAKDOWN = -4)
++ parameter (SVD_CONVERGED_ITERATING = 0)
++
++ integer SVD_TRANSPOSE_EXPLICIT
++ integer SVD_TRANSPOSE_IMPLICIT
++
++ parameter (SVD_TRANSPOSE_EXPLICIT = 0)
++ parameter (SVD_TRANSPOSE_IMPLICIT = 1)
++
++ integer SVD_LARGEST
++ integer SVD_SMALLEST
++
++ parameter (SVD_LARGEST = 0)
++ parameter (SVD_SMALLEST = 1)
++
++#endif
+Index: src/eps/impls/primme/primmes.c
+diff -u src/eps/impls/primme/primmes.c:1.20 src/eps/impls/primme/primmes.c:1.20.2.1
+--- src/eps/impls/primme/primmes.c:1.20 Thu May 31 20:03:41 2007
++++ src/eps/impls/primme/primmes.c Mon Mar 3 17:48:21 2008
+@@ -67,7 +67,8 @@
+ static void applyPreconditioner_PRIMME(void *in, void *out, int *blockSize, struct primme_params *primme);
+
+ static void par_GlobalSumDouble(void *sendBuf, void *recvBuf, int *count, primme_params *primme) {
+- MPI_Allreduce((double*)sendBuf, (double*)recvBuf, *count, MPI_DOUBLE, MPI_SUM, ((EPS)(primme->commInfo))->comm);
++ PetscErrorCode ierr;
++ ierr = MPI_Allreduce((double*)sendBuf, (double*)recvBuf, *count, MPI_DOUBLE, MPI_SUM, ((EPS)(primme->commInfo))->comm);CHKERRABORT(((EPS)(primme->commInfo))->comm,ierr);
+ }
+
+ #undef __FUNCT__
+@@ -82,8 +83,8 @@
+
+ PetscFunctionBegin;
+
+- MPI_Comm_size(eps->comm,&numProcs);
+- MPI_Comm_rank(eps->comm,&procID);
++ ierr = MPI_Comm_size(eps->comm,&numProcs);CHKERRQ(ierr);
++ ierr = MPI_Comm_rank(eps->comm,&procID);CHKERRQ(ierr);
+
+ /* Check some constraints and set some default values */
+ ierr = VecGetSize(eps->vec_initial,&N);CHKERRQ(ierr);
+@@ -331,7 +332,7 @@
+ if (flg) {ierr = EPSPRIMMESetBlockSize(eps,op);CHKERRQ(ierr);}
+ op = 0;
+ ierr = PetscOptionsEList("-eps_primme_method","set method for solving the eigenproblem",
+- "EPSPRIMMESetMethod",methodList,15,methodList[0],&op,&flg); CHKERRQ(ierr);
++ "EPSPRIMMESetMethod",methodList,15,methodList[1],&op,&flg); CHKERRQ(ierr);
+ if (flg) {ierr = EPSPRIMMESetMethod(eps, methodN[op]);CHKERRQ(ierr);}
+ ierr = PetscOptionsEList("-eps_primme_precond","set preconditioner type",
+ "EPSPRIMMESetPrecond",precondList,2,precondList[0],&op,&flg); CHKERRQ(ierr);
+@@ -456,7 +457,7 @@
+
+ PetscFunctionBegin;
+
+- if (method == PETSC_DEFAULT) ops->method = DYNAMIC;
++ if (method == PETSC_DEFAULT) ops->method = DEFAULT_MIN_TIME;
+ else ops->method = (primme_preset_method)method;
+
+ PetscFunctionReturn(0);
+@@ -484,7 +485,7 @@
+ . -eps_primme_set_method - Sets the method for the PRIMME library.
+
+ Note:
+- If not set, the method defaults to EPSPRIMME_DYNAMIC.
++ If not set, the method defaults to EPSPRIMME_DEFAULT_MIN_TIME.
+
+ Level: advanced
+
+@@ -690,7 +691,7 @@
+ primme_initialize(&primme->primme);
+ primme->primme.matrixMatvec = multMatvec_PRIMME;
+ primme->primme.globalSumDouble = par_GlobalSumDouble;
+- primme->method = DYNAMIC;
++ primme->method = EPSPRIMME_DEFAULT_MIN_TIME;
+ ierr = PetscObjectComposeFunctionDynamic((PetscObject)eps,"EPSPRIMMESetBlockSize_C","EPSPRIMMESetBlockSize_PRIMME",EPSPRIMMESetBlockSize_PRIMME);CHKERRQ(ierr);
+ ierr = PetscObjectComposeFunctionDynamic((PetscObject)eps,"EPSPRIMMESetMethod_C","EPSPRIMMESetMethod_PRIMME",EPSPRIMMESetMethod_PRIMME);CHKERRQ(ierr);
+ ierr = PetscObjectComposeFunctionDynamic((PetscObject)eps,"EPSPRIMMESetPrecond_C","EPSPRIMMESetPrecond_PRIMME",EPSPRIMMESetPrecond_PRIMME);CHKERRQ(ierr);
+Index: src/eps/interface/basic.c
+diff -u src/eps/interface/basic.c:1.31 src/eps/interface/basic.c:1.31.2.1
+--- src/eps/interface/basic.c:1.31 Fri Jun 1 15:13:24 2007
++++ src/eps/interface/basic.c Mon Mar 3 17:48:21 2008
+@@ -208,7 +208,7 @@
+ PetscValidPointer(outeps,2);
+ *outeps = 0;
+
+- PetscHeaderCreate(eps,_p_EPS,struct _EPSOps,EPS_COOKIE,-1,"EPS",comm,EPSDestroy,EPSView);
++ ierr = PetscHeaderCreate(eps,_p_EPS,struct _EPSOps,EPS_COOKIE,-1,"EPS",comm,EPSDestroy,EPSView);CHKERRQ(ierr);
+ *outeps = eps;
+
+ eps->bops->publish = EPSPublish_Petsc;
+Index: src/eps/interface/dense.c
+diff -u src/eps/interface/dense.c:1.44 src/eps/interface/dense.c:1.44.4.1
+--- src/eps/interface/dense.c:1.44 Thu May 31 17:05:03 2007
++++ src/eps/interface/dense.c Tue Dec 18 18:38:06 2007
+@@ -651,9 +651,9 @@
+ @*/
+ PetscErrorCode EPSDenseTridiagonal(int n,PetscScalar *A,int lda,PetscReal *w,PetscScalar *V)
+ {
+-#if defined(SLEPC_MISSING_LAPACK_DSTEVR)
++#if defined(SLEPC_MISSING_LAPACK_STEVR)
+ PetscFunctionBegin;
+- SETERRQ(PETSC_ERR_SUP,"DSTEVR - Lapack routine is unavailable.");
++ SETERRQ(PETSC_ERR_SUP,"STEVR - Lapack routine is unavailable.");
+ #else
+ PetscErrorCode ierr;
+ PetscReal abstol = 0.0,vl,vu,*D,*E,*work;
+Index: src/examples/makefile
+diff -u src/examples/makefile:1.25 src/examples/makefile:1.25.4.1
+--- src/examples/makefile:1.25 Thu May 31 17:38:15 2007
++++ src/examples/makefile Mon Mar 3 17:48:21 2008
+@@ -99,103 +99,127 @@
+ #------------------------------------------------------------------------------------
+
+ runex1_1:
+- -@${MPIEXEC} -np 1 ex1 > ex1_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex1 > ex1_1.tmp 2>&1; \
+ if (${DIFF} output/ex1_1.out ex1_1.tmp) then true; \
+ else echo "Possible problem with ex1_1, diffs above"; fi; \
+ ${RM} -f ex1_1.tmp
+
++testex1: ex1.PETSc
++ @if [ "${PETSC_WITH_BATCH}" != "" ]; then \
++ echo "Running with batch filesystem; to test run src/examples/ex1 with" ; \
++ echo "your systems batch system"; \
++ else \
++ ${MPIEXEC} -np 1 ./ex1 > ex1_1.tmp 2>&1; \
++ if (${DIFF} output/ex1_1.out ex1_1.tmp > /dev/null 2>&1) then \
++ echo "C/C++ example src/examples/ex1 run successfully with 1 MPI process"; \
++ else echo "Possible error running C/C++ src/examples/ex1 with 1 MPI process"; \
++ cat ex1_1.tmp; fi; \
++ ${RM} -f ex1_1.tmp; fi
++
+ runex1f_1:
+- -@${MPIEXEC} -np 1 ex1f > ex1f_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex1f > ex1f_1.tmp 2>&1; \
+ if (${DIFF} output/ex1f_1.out ex1f_1.tmp) then true; \
+ else echo "Possible problem with ex1f_1, diffs above"; fi; \
+ ${RM} -f ex1f_1.tmp
+
++testex1f: ex1f.PETSc
++ @if [ "${PETSC_WITH_BATCH}" != "" ]; then \
++ echo "Running with batch filesystem; to test run src/examples/ex1f with" ; \
++ echo "your systems batch system"; \
++ else \
++ ${MPIEXEC} -np 1 ./ex1f > ex1f_1.tmp 2>&1; \
++ if (${DIFF} output/ex1f_1.out ex1f_1.tmp > /dev/null 2>&1) then \
++ echo "Fortran example src/examples/ex1f run successfully with 1 MPI process"; \
++ else echo "Possible error running Fortran src/examples/ex1f with 1 MPI process"; \
++ cat ex1f_1.tmp; fi; \
++ ${RM} -f ex1f_1.tmp; fi
++
+ runex2_1:
+- -@${MPIEXEC} -np 1 ex2 > ex2_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex2 > ex2_1.tmp 2>&1; \
+ if (${DIFF} output/ex2_1.out ex2_1.tmp) then true; \
+ else echo "Possible problem with ex2_1, diffs above"; fi; \
+ ${RM} -f ex2_1.tmp
+
+ runex3_1:
+- -@${MPIEXEC} -np 1 ex3 > ex3_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex3 > ex3_1.tmp 2>&1; \
+ if (${DIFF} output/ex3_1.out ex3_1.tmp) then true; \
+ else echo "Possible problem with ex3_1, diffs above"; fi; \
+ ${RM} -f ex3_1.tmp
+
+ runex4_1:
+- -@${MPIEXEC} -np 1 ex4 -file ${SLEPC_DIR}/src/mat/examples/rdb200.petsc > ex4_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex4 -file ${SLEPC_DIR}/src/mat/examples/rdb200.petsc > ex4_1.tmp 2>&1; \
+ if (${DIFF} output/ex4_1.out ex4_1.tmp) then true; \
+ else echo "Possible problem with ex4_1, diffs above"; fi; \
+ ${RM} -f ex4_1.tmp
+
+ runex5_1:
+- -@${MPIEXEC} -np 1 ex5 -st_shift 1 > ex5_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex5 -st_shift 1 > ex5_1.tmp 2>&1; \
+ if (${DIFF} output/ex5_1.out ex5_1.tmp) then true; \
+ else echo "Possible problem with ex5_1, diffs above"; fi; \
+ ${RM} -f ex5_1.tmp
+
+ runex5_2:
+- -@${MPIEXEC} -np 2 ex5 -st_shift 1 > ex5_2.tmp 2>&1; \
++ -@${MPIEXEC} -np 2 ./ex5 -st_shift 1 > ex5_2.tmp 2>&1; \
+ if (${DIFF} output/ex5_1.out ex5_2.tmp) then true; \
+ else echo "Possible problem with ex5_2, diffs above"; fi; \
+ ${RM} -f ex5_2.tmp
+
+ runex6f_1:
+- -@${MPIEXEC} -np 1 ex6f -st_shift 1 -eps_max_it 1000 -eps_ncv 12 -eps_tol 1e-5 > ex6f_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex6f -st_shift 1 -eps_max_it 1000 -eps_ncv 12 -eps_tol 1e-5 > ex6f_1.tmp 2>&1; \
+ if (${DIFF} output/ex6f_1.out ex6f_1.tmp) then true; \
+ else echo "Possible problem with ex6f_1, diffs above"; fi; \
+ ${RM} -f ex6f_1.tmp
+
+ runex7_1:
+- -@${MPIEXEC} -np 1 ex7 -f1 ${SLEPC_DIR}/src/mat/examples/bfw62a.petsc -f2 ${SLEPC_DIR}/src/mat/examples/bfw62b.petsc > ex7_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex7 -f1 ${SLEPC_DIR}/src/mat/examples/bfw62a.petsc -f2 ${SLEPC_DIR}/src/mat/examples/bfw62b.petsc > ex7_1.tmp 2>&1; \
+ if (${DIFF} output/ex7_1.out ex7_1.tmp) then true; \
+ else echo "Possible problem with ex7_1, diffs above"; fi; \
+ ${RM} -f ex7_1.tmp
+
+ runex8_1:
+- -@${MPIEXEC} -np 1 ex8 > ex8_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex8 > ex8_1.tmp 2>&1; \
+ if (${DIFF} output/ex8_1.out ex8_1.tmp) then true; \
+ else echo "Possible problem with ex8_1, diffs above"; fi; \
+ ${RM} -f ex8_1.tmp
+
+ runex9_1:
+- -@${MPIEXEC} -np 1 ex9 > ex9_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex9 > ex9_1.tmp 2>&1; \
+ if (${DIFF} output/ex9_1.out ex9_1.tmp) then true; \
+ else echo "Possible problem with ex9_1, diffs above"; fi; \
+ ${RM} -f ex9_1.tmp
+
+ runex10_1:
+- -@${MPIEXEC} -np 1 ex10 > ex10_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex10 > ex10_1.tmp 2>&1; \
+ if (${DIFF} output/ex10_1.out ex10_1.tmp) then true; \
+ else echo "Possible problem with ex10_1, diffs above"; fi; \
+ ${RM} -f ex10_1.tmp
+
+ runex11_1:
+- -@${MPIEXEC} -np 1 ex11 > ex11_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex11 > ex11_1.tmp 2>&1; \
+ if (${DIFF} output/ex11_1.out ex11_1.tmp) then true; \
+ else echo "Possible problem with ex11_1, diffs above"; fi; \
+ ${RM} -f ex11_1.tmp
+
+ runex12_1:
+- -@${MPIEXEC} -np 1 ex12 -eps_type power -st_shift 1 -eps_nev 2 > ex12_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex12 -eps_type power -st_shift 1 -eps_nev 2 > ex12_1.tmp 2>&1; \
+ if (${DIFF} output/ex12_1.out ex12_1.tmp) then true; \
+ else echo "Possible problem with ex12_1, diffs above"; fi; \
+ ${RM} -f ex12_1.tmp
+
+ runex13_1:
+- -@${MPIEXEC} -np 1 ex13 > ex13_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex13 > ex13_1.tmp 2>&1; \
+ if (${DIFF} output/ex13_1.out ex13_1.tmp) then true; \
+ else echo "Possible problem with ex13_1, diffs above"; fi; \
+ ${RM} -f ex13_1.tmp
+
+ runex14_1:
+- -@${MPIEXEC} -np 1 ex14 -file ${SLEPC_DIR}/src/mat/examples/rdb200.petsc > ex14_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex14 -file ${SLEPC_DIR}/src/mat/examples/rdb200.petsc > ex14_1.tmp 2>&1; \
+ if (${DIFF} output/ex14_1.out ex14_1.tmp) then true; \
+ else echo "Possible problem with ex14_1, diffs above"; fi; \
+ ${RM} -f ex14_1.tmp
+
+ runex15_1:
+- -@${MPIEXEC} -np 1 ex15 > ex15_1.tmp 2>&1; \
++ -@${MPIEXEC} -np 1 ./ex15 > ex15_1.tmp 2>&1; \
+ if (${DIFF} output/ex15_1.out ex15_1.tmp) then true; \
+ else echo "Possible problem with ex15_1, diffs above"; fi; \
+ ${RM} -f ex15_1.tmp
+Index: src/ip/ipbasic.c
+diff -u src/ip/ipbasic.c:1.9 src/ip/ipbasic.c:1.9.4.1
+--- src/ip/ipbasic.c:1.9 Thu May 31 17:05:03 2007
++++ src/ip/ipbasic.c Mon Mar 3 17:48:21 2008
+@@ -101,7 +101,7 @@
+
+ PetscFunctionBegin;
+ PetscValidPointer(newip,2);
+- PetscHeaderCreate(ip,_p_IP,struct _IPOps,IP_COOKIE,-1,"IP",comm,IPDestroy,IPView);
++ ierr = PetscHeaderCreate(ip,_p_IP,struct _IPOps,IP_COOKIE,-1,"IP",comm,IPDestroy,IPView);CHKERRQ(ierr);
+ *newip = ip;
+ ip->orthog_type = IP_CGS_ORTH;
+ ip->orthog_ref = IP_ORTH_REFINE_IFNEEDED;
+Index: src/ip/ipdot.c
+diff -u src/ip/ipdot.c:1.6 src/ip/ipdot.c:1.6.4.1
+--- src/ip/ipdot.c:1.6 Thu May 31 17:59:26 2007
++++ src/ip/ipdot.c Fri Nov 30 18:52:04 2007
+@@ -48,19 +48,21 @@
+ PetscValidHeaderSpecific(x,VEC_COOKIE,2);
+ PetscValidPointer(norm,3);
+
+- ierr = IPInnerProduct(ip,x,x,&p);CHKERRQ(ierr);
+-
+- if (PetscAbsScalar(p)<PETSC_MACHINE_EPSILON)
+- PetscInfo(ip,"Zero norm, either the vector is zero or a semi-inner product is being used\n");
+-
++ if (!ip->matrix && ip->bilinear_form == IPINNER_HERMITIAN) {
++ ierr = VecNorm(x,NORM_2,norm);CHKERRQ(ierr);
++ } else {
++ ierr = IPInnerProduct(ip,x,x,&p);CHKERRQ(ierr);
++ if (PetscAbsScalar(p)<PETSC_MACHINE_EPSILON)
++ PetscInfo(ip,"Zero norm, either the vector is zero or a semi-inner product is being used\n");
+ #if defined(PETSC_USE_COMPLEX)
+- if (PetscRealPart(p)<0.0 || PetscAbsReal(PetscImaginaryPart(p))>PETSC_MACHINE_EPSILON)
+- SETERRQ(1,"IPNorm: The inner product is not well defined");
+- *norm = PetscSqrtScalar(PetscRealPart(p));
++ if (PetscRealPart(p)<0.0 || PetscAbsReal(PetscImaginaryPart(p))>PETSC_MACHINE_EPSILON)
++ SETERRQ(1,"IPNorm: The inner product is not well defined");
++ *norm = PetscSqrtScalar(PetscRealPart(p));
+ #else
+- if (p<0.0) SETERRQ(1,"IPNorm: The inner product is not well defined");
+- *norm = PetscSqrtScalar(p);
++ if (p<0.0) SETERRQ(1,"IPNorm: The inner product is not well defined");
++ *norm = PetscSqrtScalar(p);
+ #endif
++ }
+
+ PetscFunctionReturn(0);
+ }
+@@ -94,7 +96,11 @@
+ PetscValidHeaderSpecific(x,VEC_COOKIE,2);
+ PetscValidPointer(norm,3);
+
+- ierr = IPInnerProductBegin(ip,x,x,&p);CHKERRQ(ierr);
++ if (!ip->matrix && ip->bilinear_form == IPINNER_HERMITIAN) {
++ ierr = VecNormBegin(x,NORM_2,norm);CHKERRQ(ierr);
++ } else {
++ ierr = IPInnerProductBegin(ip,x,x,&p);CHKERRQ(ierr);
++ }
+
+ PetscFunctionReturn(0);
+ }
+@@ -130,19 +136,22 @@
+ PetscValidHeaderSpecific(x,VEC_COOKIE,2);
+ PetscValidPointer(norm,3);
+
+- ierr = IPInnerProductEnd(ip,x,x,&p);CHKERRQ(ierr);
+-
+- if (PetscAbsScalar(p)<PETSC_MACHINE_EPSILON)
+- PetscInfo(ip,"Zero norm, either the vector is zero or a semi-inner product is being used\n");
++ if (!ip->matrix && ip->bilinear_form == IPINNER_HERMITIAN) {
++ ierr = VecNormEnd(x,NORM_2,norm);CHKERRQ(ierr);
++ } else {
++ ierr = IPInnerProductEnd(ip,x,x,&p);CHKERRQ(ierr);
++ if (PetscAbsScalar(p)<PETSC_MACHINE_EPSILON)
++ PetscInfo(ip,"Zero norm, either the vector is zero or a semi-inner product is being used\n");
+
+ #if defined(PETSC_USE_COMPLEX)
+- if (PetscRealPart(p)<0.0 || PetscAbsReal(PetscImaginaryPart(p))>PETSC_MACHINE_EPSILON)
+- SETERRQ(1,"IPNorm: The inner product is not well defined");
+- *norm = PetscSqrtScalar(PetscRealPart(p));
++ if (PetscRealPart(p)<0.0 || PetscAbsReal(PetscImaginaryPart(p))>PETSC_MACHINE_EPSILON)
++ SETERRQ(1,"IPNorm: The inner product is not well defined");
++ *norm = PetscSqrtScalar(PetscRealPart(p));
+ #else
+- if (p<0.0) SETERRQ(1,"IPNorm: The inner product is not well defined");
+- *norm = PetscSqrtScalar(p);
++ if (p<0.0) SETERRQ(1,"IPNorm: The inner product is not well defined");
++ *norm = PetscSqrtScalar(p);
+ #endif
++ }
+
+ PetscFunctionReturn(0);
+ }
+Index: src/st/impls/sinvert/sinvert.c
+diff -u src/st/impls/sinvert/sinvert.c:1.29 src/st/impls/sinvert/sinvert.c:1.29.4.1
+--- src/st/impls/sinvert/sinvert.c:1.29 Thu May 31 17:05:04 2007
++++ src/st/impls/sinvert/sinvert.c Mon Oct 1 12:39:43 2007
+@@ -117,8 +117,8 @@
+ ierr = KSPSetOperators(st->ksp,st->mat,st->mat,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
+ break;
+ default:
+- ierr = MatDuplicate(st->A,MAT_COPY_VALUES,&st->mat);CHKERRQ(ierr);
+ if (st->sigma != 0.0) {
++ ierr = MatDuplicate(st->A,MAT_COPY_VALUES,&st->mat);CHKERRQ(ierr);
+ if (st->B) {
+ ierr = MatAXPY(st->mat,-st->sigma,st->B,st->str);CHKERRQ(ierr);
+ } else {
+Index: src/st/interface/stfunc.c
+diff -u src/st/interface/stfunc.c:1.32 src/st/interface/stfunc.c:1.32.2.1
+--- src/st/interface/stfunc.c:1.32 Fri Jun 1 15:13:24 2007
++++ src/st/interface/stfunc.c Mon Mar 3 17:48:21 2008
+@@ -137,7 +137,7 @@
+ PetscValidPointer(newst,2);
+ *newst = 0;
+
+- PetscHeaderCreate(st,_p_ST,struct _STOps,ST_COOKIE,-1,"ST",comm,STDestroy,STView);
++ ierr = PetscHeaderCreate(st,_p_ST,struct _STOps,ST_COOKIE,-1,"ST",comm,STDestroy,STView);CHKERRQ(ierr);
+ st->bops->publish = STPublish_Petsc;
+ ierr = PetscMemzero(st->ops,sizeof(struct _STOps));CHKERRQ(ierr);
+
+Index: src/st/interface/stsolve.c
+diff -u src/st/interface/stsolve.c:1.46 src/st/interface/stsolve.c:1.46.4.1
+--- src/st/interface/stsolve.c:1.46 Thu May 31 17:05:04 2007
++++ src/st/interface/stsolve.c Wed Jan 9 11:57:07 2008
+@@ -64,6 +64,9 @@
+ Output Parameter:
+ . B - output matrix
+
++ Note:
++ The output matrix B must be destroyed after use.
++
+ Level: developer
+ @*/
+ PetscErrorCode STGetBilinearForm(ST st,Mat *B)
+@@ -81,8 +84,13 @@
+ #define __FUNCT__ "STGetBilinearForm_Default"
+ PetscErrorCode STGetBilinearForm_Default(ST st,Mat *B)
+ {
++ PetscErrorCode ierr;
++
+ PetscFunctionBegin;
+ *B = st->B;
++ if (*B) {
++ ierr = PetscObjectReference((PetscObject)*B);CHKERRQ(ierr);
++ }
+ PetscFunctionReturn(0);
+ }
+
+Index: src/svd/impls/cross/cross.c
+diff -u src/svd/impls/cross/cross.c:1.9 src/svd/impls/cross/cross.c:1.9.2.1
+--- src/svd/impls/cross/cross.c:1.9 Fri Jun 1 18:24:35 2007
++++ src/svd/impls/cross/cross.c Thu Jul 5 13:03:48 2007
+@@ -118,6 +118,7 @@
+
+ ierr = EPSSetOperators(cross->eps,cross->mat,PETSC_NULL);CHKERRQ(ierr);
+ ierr = EPSSetProblemType(cross->eps,EPS_HEP);CHKERRQ(ierr);
++ ierr = EPSSetWhichEigenpairs(cross->eps,svd->which == SVD_LARGEST ? EPS_LARGEST_REAL : EPS_SMALLEST_REAL);CHKERRQ(ierr);
+ ierr = EPSSetDimensions(cross->eps,svd->nsv,svd->ncv);CHKERRQ(ierr);
+ ierr = EPSSetTolerances(cross->eps,svd->tol,svd->max_it);CHKERRQ(ierr);
+ ierr = EPSSetUp(cross->eps);CHKERRQ(ierr);
+@@ -136,7 +137,6 @@
+ PetscScalar sigma;
+
+ PetscFunctionBegin;
+- ierr = EPSSetWhichEigenpairs(cross->eps,svd->which == SVD_LARGEST ? EPS_LARGEST_REAL : EPS_SMALLEST_REAL);CHKERRQ(ierr);
+ ierr = EPSSetInitialVector(cross->eps,svd->vec_initial);CHKERRQ(ierr);
+ ierr = EPSSolve(cross->eps);CHKERRQ(ierr);
+ ierr = EPSGetConverged(cross->eps,&svd->nconv);CHKERRQ(ierr);
+Index: src/svd/impls/cyclic/cyclic.c
+diff -u src/svd/impls/cyclic/cyclic.c:1.10 src/svd/impls/cyclic/cyclic.c:1.10.2.1
+--- src/svd/impls/cyclic/cyclic.c:1.10 Fri Jun 1 18:24:35 2007
++++ src/svd/impls/cyclic/cyclic.c Thu Jul 5 13:03:48 2007
+@@ -133,6 +133,7 @@
+
+ ierr = EPSSetOperators(cyclic->eps,cyclic->mat,PETSC_NULL);CHKERRQ(ierr);
+ ierr = EPSSetProblemType(cyclic->eps,EPS_HEP);CHKERRQ(ierr);
++ ierr = EPSSetWhichEigenpairs(cyclic->eps,svd->which == SVD_LARGEST ? EPS_LARGEST_REAL : EPS_SMALLEST_MAGNITUDE);CHKERRQ(ierr);
+ ierr = EPSSetDimensions(cyclic->eps,svd->nsv,svd->ncv);CHKERRQ(ierr);
+ ierr = EPSSetTolerances(cyclic->eps,svd->tol,svd->max_it);CHKERRQ(ierr);
+ ierr = EPSSetUp(cyclic->eps);CHKERRQ(ierr);
+@@ -163,7 +164,6 @@
+ VecScatter vsU,vsV;
+
+ PetscFunctionBegin;
+- ierr = EPSSetWhichEigenpairs(cyclic->eps,svd->which == SVD_LARGEST ? EPS_LARGEST_REAL : EPS_SMALLEST_MAGNITUDE);CHKERRQ(ierr);
+ ierr = EPSSolve(cyclic->eps);CHKERRQ(ierr);
+ ierr = EPSGetConverged(cyclic->eps,&svd->nconv);CHKERRQ(ierr);
+ ierr = EPSGetIterationNumber(cyclic->eps,&svd->its);CHKERRQ(ierr);
+Index: src/svd/interface/svdbasic.c
+diff -u src/svd/interface/svdbasic.c:1.29 src/svd/interface/svdbasic.c:1.29.2.1
+--- src/svd/interface/svdbasic.c:1.29 Fri Jun 1 16:29:14 2007
++++ src/svd/interface/svdbasic.c Mon Mar 3 17:48:21 2008
+@@ -189,7 +189,7 @@
+ PetscFunctionBegin;
+ PetscValidPointer(outsvd,2);
+
+- PetscHeaderCreate(svd,_p_SVD,struct _SVDOps,SVD_COOKIE,-1,"SVD",comm,SVDDestroy,SVDView);
++ ierr = PetscHeaderCreate(svd,_p_SVD,struct _SVDOps,SVD_COOKIE,-1,"SVD",comm,SVDDestroy,SVDView);CHKERRQ(ierr);
+ *outsvd = svd;
+
+ svd->bops->publish = SVDPublish_Petsc;
+Index: src/svd/interface/svdopts.c
+diff -u src/svd/interface/svdopts.c:1.17 src/svd/interface/svdopts.c:1.17.4.1
+--- src/svd/interface/svdopts.c:1.17 Thu May 31 17:05:04 2007
++++ src/svd/interface/svdopts.c Thu Jul 5 13:03:48 2007
+@@ -288,7 +288,10 @@
+ switch (which) {
+ case SVD_LARGEST:
+ case SVD_SMALLEST:
+- svd->which = which;
++ if (svd->which != which) {
++ svd->setupcalled = 0;
++ svd->which = which;
++ }
+ break;
+ default:
+ SETERRQ(PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'which' parameter");
+Index: src/sys/ftn-custom/zslepc_start.c
+diff -u src/sys/ftn-custom/zslepc_start.c:1.8 src/sys/ftn-custom/zslepc_start.c:1.8.4.1
+--- src/sys/ftn-custom/zslepc_start.c:1.8 Thu May 31 17:05:04 2007
++++ src/sys/ftn-custom/zslepc_start.c Thu Jul 5 13:03:48 2007
+@@ -19,7 +19,7 @@
+
+ extern PetscTruth SlepcBeganPetsc;
+
+-static PetscTruth SlepcInitializeCalled=PETSC_FALSE;
++extern PetscTruth SlepcInitializeCalled;
+
+ #ifdef PETSC_HAVE_FORTRAN_CAPS
+ #define petscinitialize_ PETSCINITIALIZE
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20080530/f7f80768/attachment-0001.htm
More information about the macports-changes
mailing list