Subversion Repositories slepc-dev

Compare Revisions

Ignore whitespace Rev 1224 → Rev 1238

/tags/slepc-2_3_2-1/include/slepcversion.h
5,13 → 5,13
/*
Current SLEPC version number and release date
*/
#define SLEPC_VERSION_RELEASE 0
#define SLEPC_VERSION_RELEASE 1
#define SLEPC_VERSION_MAJOR 2
#define SLEPC_VERSION_MINOR 3
#define SLEPC_VERSION_SUBMINOR 1
#define SLEPC_VERSION_PATCH 0
#define SLEPC_VERSION_DATE "March 3, 2006"
#define SLEPC_VERSION_PATCH_DATE "March 3, 2006"
#define SLEPC_VERSION_SUBMINOR 2
#define SLEPC_VERSION_PATCH 1
#define SLEPC_VERSION_DATE "October 2, 2006"
#define SLEPC_VERSION_PATCH_DATE "October 30, 2006"
#define SLEPC_AUTHOR_INFO " The SLEPc Team\n\
slepc-maint@grycap.upv.es\n\
http://www.grycap.upv.es/slepc\n"
/tags/slepc-2_3_2-1/include/slepceps.h
163,14 → 163,16
EXTERN PetscErrorCode EPSBlzpackSetInterval(EPS,PetscReal,PetscReal);
EXTERN PetscErrorCode EPSBlzpackSetNSteps(EPS,int);
 
 
typedef enum {
EPSPRIMME_DYNAMIC,
EPSPRIMME_DEFAULT_MIN_TIME,
EPSPRIMME_DEFAULT_MIN_MATVECS,
EPSPRIMME_ARNOLDI,
EPSPRIMME_GD,
EPSPRIMME_GD_PLUSK,
EPSPRIMME_GD_OLSEN_PLUSK,
EPSPRIMME_JD_OlSEN_PLUSK,
EPSPRIMME_JD_OLSEN_PLUSK,
EPSPRIMME_RQI,
EPSPRIMME_JDQR,
EPSPRIMME_JDQMR,
/tags/slepc-2_3_2-1/config/primme.py
15,23 → 15,20
if petscconf.PRECISION == 'single':
sys.exit('ERROR: PRIMME does not support single precision.')
functions = ['primme_set_method','primme_Free','primme_initialize']
if petscconf.SCALAR == 'real':
functions += ['dprimme']
include = 'DPRIMME'
if not libs:
libs = ['-ldprimme']
else:
functions += ['zprimme']
include = 'ZPRIMME'
if not libs:
libs = ['-lzprimme']
functions_base = ['primme_set_method','primme_Free','primme_initialize']
if directory:
dirs = [directory]
else:
dirs = check.GenerateGuesses('Primme')
 
include = 'PRIMMESRC/COMMONSRC'
if not libs:
libs = ['-lprimme']
if petscconf.SCALAR == 'real':
functions = functions_base + ['dprimme']
else:
functions = functions_base + ['zprimme']
 
for d in dirs:
if d:
l = ['-L' + d] + libs
43,9 → 40,9
conf.write('SLEPC_HAVE_PRIMME = -DSLEPC_HAVE_PRIMME\n')
conf.write('PRIMME_LIB =' + str.join(' ', l) + '\n')
conf.write('PRIMME_FLAGS =' + str.join(' ', f) + '\n')
return l+f
return l+f
 
log.Println('ERROR: Unable to link with PRIMME library')
print 'ERROR: In directories',dirs
print 'ERROR: With flags',libs,
log.Exit('')
log.Println('ERROR: Unable to link with PRIMME library')
print 'ERROR: In directories',dirs
print 'ERROR: With flags',libs,
log.Exit('')
/tags/slepc-2_3_2-1/config/check.py
29,6 → 29,8
cfile.write(code)
cfile.close()
(result, output) = commands.getstatusoutput(petscconf.MAKE + ' checklink TESTFLAGS="'+str.join(' ',flags)+'"')
if os.path.exists('checklink.o'):
os.unlink('checklink.o')
os.chdir(os.pardir)
if result:
return (0,code + output)
/tags/slepc-2_3_2-1/config/configure.py
79,11 → 79,11
elif i.startswith('--with-primme-dir'):
primmedir = i.split('=')[1]
haveprimme = 1
elif i.startswith('--with-primme'):
haveprimme = not i.endswith('=0')
elif i.startswith('--with-primme-flags='):
primmelibs = i.split('=')[1].split(',')
haveprimme = 1
elif i.startswith('--with-primme'):
haveprimme = not i.endswith('=0')
elif i.startswith('--h') or i.startswith('-h') or i.startswith('-?'):
print 'SLEPc Configure Help'
print '-'*80
/tags/slepc-2_3_2-1/src/eps/impls/primme/primmes.c
10,12 → 10,6
#include "primme.h"
EXTERN_C_END
 
#ifndef PETSC_USE_COMPLEX
typedef double PRIMMEScalar;
#else
typedef Complex_Z PRIMMEScalar;
#endif
 
typedef struct {
primme_params primme; /* param struc */
primme_preset_method method; /* primme method */
24,9 → 18,46
Vec x,y; /* auxiliar vectors */
} EPS_PRIMME;
 
static void multMatvec_PRIMME(PRIMMEScalar *in, PRIMMEScalar *out, int *blockSize, primme_params *primme);
static void applyPreconditioner_PRIMME(PRIMMEScalar *in, PRIMMEScalar *out, int *blockSize, struct primme_params *primme);
const char *methodList[] = {
"dynamic",
"default_min_time",
"default_min_matvecs",
"arnoldi",
"gd",
"gd_plusk",
"gd_olsen_plusk",
"jd_olsen_plusk",
"rqi",
"jdqr",
"jdqmr",
"jdqmr_etol",
"subspace_iteration",
"lobpcg_orthobasis",
"lobpcg_orthobasis_window"
};
const char *precondList[] = {"none", "diagonal"};
EPSPRIMMEMethod methodN[] = {
EPSPRIMME_DYNAMIC,
EPSPRIMME_DEFAULT_MIN_TIME,
EPSPRIMME_DEFAULT_MIN_MATVECS,
EPSPRIMME_ARNOLDI,
EPSPRIMME_GD,
EPSPRIMME_GD_PLUSK,
EPSPRIMME_GD_OLSEN_PLUSK,
EPSPRIMME_JD_OLSEN_PLUSK,
EPSPRIMME_RQI,
EPSPRIMME_JDQR,
EPSPRIMME_JDQMR,
EPSPRIMME_JDQMR_ETOL,
EPSPRIMME_SUBSPACE_ITERATION,
EPSPRIMME_LOBPCG_ORTHOBASIS,
EPSPRIMME_LOBPCG_ORTHOBASIS_WINDOW
};
EPSPRIMMEPrecond precondN[] = {EPSPRIMME_NONE, EPSPRIMME_DIAGONAL};
 
static void multMatvec_PRIMME(void *in, void *out, int *blockSize, primme_params *primme);
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);
}
69,7 → 100,6
primme->eps = eps->tol;
primme->numProcs = numProcs;
primme->procID = procID;
primme->globalSumDouble = par_GlobalSumDouble;
 
switch(eps->which) {
case EPS_LARGEST_REAL:
85,7 → 115,8
break;
}
primme_set_method(ops->method, primme);
if (primme_set_method(ops->method, primme) < 0)
SETERRQ(PETSC_ERR_SUP,"PRIMME method not valid");
/* If user sets ncv, maxBasisSize is modified. If not, ncv is set as maxBasisSize */
if (eps->ncv) primme->maxBasisSize = eps->ncv;
131,6 → 162,7
 
/* Call PRIMME solver */
ierr = VecGetArray(eps->V[0], &a); CHKERRQ(ierr);
 
#ifndef PETSC_USE_COMPLEX
ierr = dprimme(eps->eigr, a, eps->errest, &ops->primme);
#else
176,7 → 208,7
 
#undef __FUNCT__
#define __FUNCT__ "multMatvec_PRIMME"
static void multMatvec_PRIMME(PRIMMEScalar *in, PRIMMEScalar *out, int *blockSize, primme_params *primme)
static void multMatvec_PRIMME(void *in, void *out, int *blockSize, primme_params *primme)
{
PetscErrorCode ierr;
int i, N = primme->n;
201,7 → 233,7
 
#undef __FUNCT__
#define __FUNCT__ "applyPreconditioner_PRIMME"
static void applyPreconditioner_PRIMME(PRIMMEScalar *in, PRIMMEScalar *out, int *blockSize, struct primme_params *primme)
static void applyPreconditioner_PRIMME(void *in, void *out, int *blockSize, struct primme_params *primme)
{
PetscErrorCode ierr;
int i, N = primme->n;
254,26 → 286,9
PetscErrorCode ierr;
PetscTruth isascii;
primme_params *primme = &((EPS_PRIMME *)eps->data)->primme;
const char *methodList[] = {
"default_min_time",
"default_min_matvecs",
"arnoldi",
"gd",
"gd_plusk",
"gd_olsen_plusk",
"jd_olsen_plusk",
"rqi",
"jdqr",
"jdqmr",
"jdqmr_etol",
"subspace_iteration",
"lobpcg_orthobasis",
"lobpcg_orthobasis_window"
};
const char *precondList[] = {"none", "diagonal"};
EPSPRIMMEMethod methodN;
EPSPRIMMEPrecond precondN;
EPSPRIMMEMethod methodn;
EPSPRIMMEPrecond precondn;
 
PetscFunctionBegin;
ierr = PetscTypeCompare((PetscObject)viewer,PETSC_VIEWER_ASCII,&isascii);CHKERRQ(ierr);
if (!isascii) {
281,10 → 296,10
}
ierr = PetscViewerASCIIPrintf(viewer,"PRIMME solver block size: %d\n",primme->maxBlockSize);CHKERRQ(ierr);
ierr = EPSPRIMMEGetMethod(eps, &methodN);CHKERRQ(ierr);
ierr = PetscViewerASCIIPrintf(viewer,"PRIMME solver method: %s\n", methodList[methodN]);CHKERRQ(ierr);
ierr = EPSPRIMMEGetPrecond(eps, &precondN);CHKERRQ(ierr);
ierr = PetscViewerASCIIPrintf(viewer,"PRIMME solver preconditioning: %s\n", precondList[precondN]);CHKERRQ(ierr);
ierr = EPSPRIMMEGetMethod(eps, &methodn);CHKERRQ(ierr);
ierr = PetscViewerASCIIPrintf(viewer,"PRIMME solver method: %s\n", methodList[methodn]);CHKERRQ(ierr);
ierr = EPSPRIMMEGetPrecond(eps, &precondn);CHKERRQ(ierr);
ierr = PetscViewerASCIIPrintf(viewer,"PRIMME solver preconditioning: %s\n", precondList[precondn]);CHKERRQ(ierr);
 
PetscFunctionReturn(0);
}
297,40 → 312,6
EPS_PRIMME *ops = (EPS_PRIMME *)eps->data;
PetscInt op;
PetscTruth flg;
const char *methodList[] = {
"default_min_time",
"default_min_matvecs",
"arnoldi",
"gd",
"gd_plusk",
"gd_olsen_plusk",
"jd_olsen_plusk",
"rqi",
"jdqr",
"jdqmr",
"jdqmr_etol",
"subspace_iteration",
"lobpcg_orthobasis",
"lobpcg_orthobasis_window"
};
const char *precondList[] = {"none", "diagonal"};
EPSPRIMMEMethod methodN[] = {
EPSPRIMME_DEFAULT_MIN_TIME,
EPSPRIMME_DEFAULT_MIN_MATVECS,
EPSPRIMME_ARNOLDI,
EPSPRIMME_GD,
EPSPRIMME_GD_PLUSK,
EPSPRIMME_GD_OLSEN_PLUSK,
EPSPRIMME_JD_OlSEN_PLUSK,
EPSPRIMME_RQI,
EPSPRIMME_JDQR,
EPSPRIMME_JDQMR,
EPSPRIMME_JDQMR_ETOL,
EPSPRIMME_SUBSPACE_ITERATION,
EPSPRIMME_LOBPCG_ORTHOBASIS,
EPSPRIMME_LOBPCG_ORTHOBASIS_WINDOW
};
EPSPRIMMEPrecond precondN[] = {EPSPRIMME_NONE, EPSPRIMME_DIAGONAL};
 
PetscFunctionBegin;
341,7 → 322,7
if (flg) {ierr = EPSPRIMMESetBlockSize(eps,op);CHKERRQ(ierr);}
op = 0;
ierr = PetscOptionsEList("-eps_primme_method","set method for solving the eigenproblem",
"EPSPRIMMESetMethod",methodList,14,methodList[0],&op,&flg); CHKERRQ(ierr);
"EPSPRIMMESetMethod",methodList,15,methodList[0],&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);
466,9 → 447,9
 
PetscFunctionBegin;
 
if (method == PETSC_DEFAULT) ops->method = DEFAULT_MIN_TIME;
if (method == PETSC_DEFAULT) ops->method = DYNAMIC;
else ops->method = (primme_preset_method)method;
 
PetscFunctionReturn(0);
}
EXTERN_C_END
483,10 → 464,10
Input Parameters:
+ eps - the eigenproblem solver context
- method - method that will be used by PRIMME. It must be one of:
EPSPRIMME_DEFAULT_MIN_TIME(EPSPRIMME_JDQMR_ETOL),
EPSPRIMME_DYNAMIC, EPSPRIMME_DEFAULT_MIN_TIME(EPSPRIMME_JDQMR_ETOL),
EPSPRIMME_DEFAULT_MIN_MATVECS(EPSPRIMME_GD_OLSEN_PLUSK), EPSPRIMME_ARNOLDI,
EPSPRIMME_GD, EPSPRIMME_GD_PLUSK, EPSPRIMME_GD_OLSEN_PLUSK,
EPSPRIMME_JD_OlSEN_PLUSK, EPSPRIMME_RQI, EPSPRIMME_JDQR, EPSPRIMME_JDQMR,
EPSPRIMME_JD_OLSEN_PLUSK, EPSPRIMME_RQI, EPSPRIMME_JDQR, EPSPRIMME_JDQMR,
EPSPRIMME_JDQMR_ETOL, EPSPRIMME_SUBSPACE_ITERATION,
EPSPRIMME_LOBPCG_ORTHOBASIS, EPSPRIMME_LOBPCG_ORTHOBASIS_WINDOW
 
494,7 → 475,7
. -eps_primme_set_method - Sets the method for the PRIMME library.
 
Note:
If not set, the method defaults to EPSPRIMME_DEFAULT_MIN_TIME.
If not set, the method defaults to EPSPRIMME_DYNAMIC.
 
Level: advanced
.seealso: EPSPRIMMEGetMethod()
523,8 → 504,9
 
PetscFunctionBegin;
 
if (method) *method = (EPSPRIMMEMethod)ops->method;
if (method)
*method = (EPSPRIMMEMethod)ops->method;
 
PetscFunctionReturn(0);
}
EXTERN_C_END
541,10 → 523,10
Output Parameters:
. method - method that will be used by PRIMME. It must be one of:
EPSPRIMME_DEFAULT_MIN_TIME(EPSPRIMME_JDQMR_ETOL),
EPSPRIMME_DYNAMIC, EPSPRIMME_DEFAULT_MIN_TIME(EPSPRIMME_JDQMR_ETOL),
EPSPRIMME_DEFAULT_MIN_MATVECS(EPSPRIMME_GD_OLSEN_PLUSK), EPSPRIMME_ARNOLDI,
EPSPRIMME_GD, EPSPRIMME_GD_PLUSK, EPSPRIMME_GD_OLSEN_PLUSK,
EPSPRIMME_JD_OlSEN_PLUSK, EPSPRIMME_RQI, EPSPRIMME_JDQR, EPSPRIMME_JDQMR,
EPSPRIMME_JD_OLSEN_PLUSK, EPSPRIMME_RQI, EPSPRIMME_JDQR, EPSPRIMME_JDQMR,
EPSPRIMME_JDQMR_ETOL, EPSPRIMME_SUBSPACE_ITERATION,
EPSPRIMME_LOBPCG_ORTHOBASIS, EPSPRIMME_LOBPCG_ORTHOBASIS_WINDOW
 
694,8 → 676,8
 
primme_initialize(&primme->primme);
primme->primme.matrixMatvec = multMatvec_PRIMME;
primme->method = DEFAULT_MIN_TIME;
primme->primme.globalSumDouble = par_GlobalSumDouble;
primme->method = DYNAMIC;
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);