| Line 21... |
Line 21... |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
*/
|
*/
|
|
|
#include "private/stimpl.h" /*I "slepcst.h" I*/
|
#include "private/stimpl.h" /*I "slepcst.h" I*/
|
|
|
PetscCookie ST_COOKIE = 0;
|
PetscClassId ST_CLASSID = 0;
|
PetscLogEvent ST_SetUp = 0, ST_Apply = 0, ST_ApplyTranspose = 0;
|
PetscLogEvent ST_SetUp = 0, ST_Apply = 0, ST_ApplyTranspose = 0;
|
static PetscTruth STPackageInitialized = PETSC_FALSE;
|
static PetscTruth STPackageInitialized = PETSC_FALSE;
|
|
|
#undef __FUNCT__
|
#undef __FUNCT__
|
#define __FUNCT__ "STFinalizePackage"
|
#define __FUNCT__ "STFinalizePackage"
|
| Line 67... |
Line 67... |
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
if (STPackageInitialized) PetscFunctionReturn(0);
|
if (STPackageInitialized) PetscFunctionReturn(0);
|
STPackageInitialized = PETSC_TRUE;
|
STPackageInitialized = PETSC_TRUE;
|
/* Register Classes */
|
/* Register Classes */
|
ierr = PetscCookieRegister("Spectral Transform",&ST_COOKIE);CHKERRQ(ierr);
|
ierr = PetscClassIdRegister("Spectral Transform",&ST_CLASSID);CHKERRQ(ierr);
|
/* Register Constructors */
|
/* Register Constructors */
|
ierr = STRegisterAll(path);CHKERRQ(ierr);
|
ierr = STRegisterAll(path);CHKERRQ(ierr);
|
/* Register Events */
|
/* Register Events */
|
ierr = PetscLogEventRegister("STSetUp",ST_COOKIE,&ST_SetUp);CHKERRQ(ierr);
|
ierr = PetscLogEventRegister("STSetUp",ST_CLASSID,&ST_SetUp);CHKERRQ(ierr);
|
ierr = PetscLogEventRegister("STApply",ST_COOKIE,&ST_Apply);CHKERRQ(ierr);
|
ierr = PetscLogEventRegister("STApply",ST_CLASSID,&ST_Apply);CHKERRQ(ierr);
|
ierr = PetscLogEventRegister("STApplyTranspose",ST_COOKIE,&ST_ApplyTranspose); CHKERRQ(ierr);
|
ierr = PetscLogEventRegister("STApplyTranspose",ST_CLASSID,&ST_ApplyTranspose); CHKERRQ(ierr);
|
/* Process info exclusions */
|
/* Process info exclusions */
|
ierr = PetscOptionsGetString(PETSC_NULL, "-log_info_exclude", logList, 256, &opt);CHKERRQ(ierr);
|
ierr = PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
|
if (opt) {
|
if (opt) {
|
ierr = PetscStrstr(logList, "st", &className);CHKERRQ(ierr);
|
ierr = PetscStrstr(logList, "st", &className);CHKERRQ(ierr);
|
if (className) {
|
if (className) {
|
ierr = PetscInfoDeactivateClass(ST_COOKIE);CHKERRQ(ierr);
|
ierr = PetscInfoDeactivateClass(ST_CLASSID);CHKERRQ(ierr);
|
}
|
}
|
}
|
}
|
/* Process summary exclusions */
|
/* Process summary exclusions */
|
ierr = PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
|
ierr = PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
|
if (opt) {
|
if (opt) {
|
ierr = PetscStrstr(logList, "st", &className);CHKERRQ(ierr);
|
ierr = PetscStrstr(logList, "st", &className);CHKERRQ(ierr);
|
if (className) {
|
if (className) {
|
ierr = PetscLogEventDeactivateClass(ST_COOKIE);CHKERRQ(ierr);
|
ierr = PetscLogEventDeactivateClass(ST_CLASSID);CHKERRQ(ierr);
|
}
|
}
|
}
|
}
|
ierr = PetscRegisterFinalize(STFinalizePackage);CHKERRQ(ierr);
|
ierr = PetscRegisterFinalize(STFinalizePackage);CHKERRQ(ierr);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
| Line 113... |
Line 113... |
PetscErrorCode STDestroy(ST st)
|
PetscErrorCode STDestroy(ST st)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
if (--((PetscObject)st)->refct > 0) PetscFunctionReturn(0);
|
if (--((PetscObject)st)->refct > 0) PetscFunctionReturn(0);
|
|
|
/* if memory was published with AMS then destroy it */
|
/* if memory was published with AMS then destroy it */
|
ierr = PetscObjectDepublish(st);CHKERRQ(ierr);
|
ierr = PetscObjectDepublish(st);CHKERRQ(ierr);
|
|
|
| Line 161... |
Line 161... |
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidPointer(newst,2);
|
PetscValidPointer(newst,2);
|
*newst = 0;
|
*newst = 0;
|
|
|
ierr = PetscHeaderCreate(st,_p_ST,struct _STOps,ST_COOKIE,-1,"ST",comm,STDestroy,STView);CHKERRQ(ierr);
|
ierr = PetscHeaderCreate(st,_p_ST,struct _STOps,ST_CLASSID,-1,"ST",comm,STDestroy,STView);CHKERRQ(ierr);
|
ierr = PetscMemzero(st->ops,sizeof(struct _STOps));CHKERRQ(ierr);
|
ierr = PetscMemzero(st->ops,sizeof(struct _STOps));CHKERRQ(ierr);
|
|
|
st->A = 0;
|
st->A = 0;
|
st->B = 0;
|
st->B = 0;
|
st->sigma = 0.0;
|
st->sigma = 0.0;
|
| Line 212... |
Line 212... |
@*/
|
@*/
|
PetscErrorCode STSetOperators(ST st,Mat A,Mat B)
|
PetscErrorCode STSetOperators(ST st,Mat A,Mat B)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
PetscValidHeaderSpecific(A,MAT_COOKIE,2);
|
PetscValidHeaderSpecific(A,MAT_CLASSID,2);
|
if (B) PetscValidHeaderSpecific(B,MAT_COOKIE,3);
|
if (B) PetscValidHeaderSpecific(B,MAT_CLASSID,3);
|
PetscCheckSameComm(st,1,A,2);
|
PetscCheckSameComm(st,1,A,2);
|
if (B) PetscCheckSameComm(st,1,B,3);
|
if (B) PetscCheckSameComm(st,1,B,3);
|
ierr = PetscObjectReference((PetscObject)A);CHKERRQ(ierr);
|
ierr = PetscObjectReference((PetscObject)A);CHKERRQ(ierr);
|
if (st->A) { ierr = MatDestroy(st->A);CHKERRQ(ierr); }
|
if (st->A) { ierr = MatDestroy(st->A);CHKERRQ(ierr); }
|
st->A = A;
|
st->A = A;
|
| Line 248... |
Line 248... |
.seealso: STSetOperators()
|
.seealso: STSetOperators()
|
@*/
|
@*/
|
PetscErrorCode STGetOperators(ST st,Mat *A,Mat *B)
|
PetscErrorCode STGetOperators(ST st,Mat *A,Mat *B)
|
{
|
{
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
if (A) *A = st->A;
|
if (A) *A = st->A;
|
if (B) *B = st->B;
|
if (B) *B = st->B;
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
| Line 277... |
Line 277... |
PetscErrorCode STSetShift(ST st,PetscScalar shift)
|
PetscErrorCode STSetShift(ST st,PetscScalar shift)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
if (st->sigma != shift) {
|
if (st->sigma != shift) {
|
if (st->ops->setshift) {
|
if (st->ops->setshift) {
|
ierr = (*st->ops->setshift)(st,shift); CHKERRQ(ierr);
|
ierr = (*st->ops->setshift)(st,shift); CHKERRQ(ierr);
|
}
|
}
|
}
|
}
|
| Line 307... |
Line 307... |
|
|
@*/
|
@*/
|
PetscErrorCode STGetShift(ST st,PetscScalar* shift)
|
PetscErrorCode STGetShift(ST st,PetscScalar* shift)
|
{
|
{
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
if (shift) *shift = st->sigma;
|
if (shift) *shift = st->sigma;
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
#undef __FUNCT__
|
#undef __FUNCT__
|
| Line 330... |
Line 330... |
|
|
@*/
|
@*/
|
PetscErrorCode STSetDefaultShift(ST st,PetscScalar defaultshift)
|
PetscErrorCode STSetDefaultShift(ST st,PetscScalar defaultshift)
|
{
|
{
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
st->defsigma = defaultshift;
|
st->defsigma = defaultshift;
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
#undef __FUNCT__
|
#undef __FUNCT__
|
| Line 361... |
Line 361... |
PetscErrorCode STSetBalanceMatrix(ST st,Vec D)
|
PetscErrorCode STSetBalanceMatrix(ST st,Vec D)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
PetscValidHeaderSpecific(D,VEC_COOKIE,2);
|
PetscValidHeaderSpecific(D,VEC_CLASSID,2);
|
PetscCheckSameComm(st,1,D,2);
|
PetscCheckSameComm(st,1,D,2);
|
ierr = PetscObjectReference((PetscObject)D);CHKERRQ(ierr);
|
ierr = PetscObjectReference((PetscObject)D);CHKERRQ(ierr);
|
if (st->D) {
|
if (st->D) {
|
ierr = VecDestroy(st->D); CHKERRQ(ierr);
|
ierr = VecDestroy(st->D); CHKERRQ(ierr);
|
}
|
}
|
| Line 398... |
Line 398... |
.seealso: STSetBalanceMatrix()
|
.seealso: STSetBalanceMatrix()
|
@*/
|
@*/
|
PetscErrorCode STGetBalanceMatrix(ST st,Vec *D)
|
PetscErrorCode STGetBalanceMatrix(ST st,Vec *D)
|
{
|
{
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
PetscValidPointer(D,2);
|
PetscValidPointer(D,2);
|
*D = st->D;
|
*D = st->D;
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
| Line 430... |
Line 430... |
PetscErrorCode STSetOptionsPrefix(ST st,const char *prefix)
|
PetscErrorCode STSetOptionsPrefix(ST st,const char *prefix)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
ierr = PetscObjectSetOptionsPrefix((PetscObject)st,prefix);CHKERRQ(ierr);
|
ierr = PetscObjectSetOptionsPrefix((PetscObject)st,prefix);CHKERRQ(ierr);
|
ierr = KSPSetOptionsPrefix(st->ksp,prefix);CHKERRQ(ierr);
|
ierr = KSPSetOptionsPrefix(st->ksp,prefix);CHKERRQ(ierr);
|
ierr = KSPAppendOptionsPrefix(st->ksp,"st_");CHKERRQ(ierr);
|
ierr = KSPAppendOptionsPrefix(st->ksp,"st_");CHKERRQ(ierr);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
| Line 463... |
Line 463... |
PetscErrorCode STAppendOptionsPrefix(ST st,const char *prefix)
|
PetscErrorCode STAppendOptionsPrefix(ST st,const char *prefix)
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
ierr = PetscObjectAppendOptionsPrefix((PetscObject)st,prefix);CHKERRQ(ierr);
|
ierr = PetscObjectAppendOptionsPrefix((PetscObject)st,prefix);CHKERRQ(ierr);
|
ierr = KSPSetOptionsPrefix(st->ksp,((PetscObject)st)->prefix);CHKERRQ(ierr);
|
ierr = KSPSetOptionsPrefix(st->ksp,((PetscObject)st)->prefix);CHKERRQ(ierr);
|
ierr = KSPAppendOptionsPrefix(st->ksp,"st_");CHKERRQ(ierr);
|
ierr = KSPAppendOptionsPrefix(st->ksp,"st_");CHKERRQ(ierr);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
| Line 496... |
Line 496... |
PetscErrorCode STGetOptionsPrefix(ST st,const char *prefix[])
|
PetscErrorCode STGetOptionsPrefix(ST st,const char *prefix[])
|
{
|
{
|
PetscErrorCode ierr;
|
PetscErrorCode ierr;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
ierr = PetscObjectGetOptionsPrefix((PetscObject)st, prefix);CHKERRQ(ierr);
|
ierr = PetscObjectGetOptionsPrefix((PetscObject)st, prefix);CHKERRQ(ierr);
|
PetscFunctionReturn(0);
|
PetscFunctionReturn(0);
|
}
|
}
|
|
|
#undef __FUNCT__
|
#undef __FUNCT__
|
| Line 536... |
Line 536... |
const char* str;
|
const char* str;
|
PetscTruth isascii,isstring;
|
PetscTruth isascii,isstring;
|
PetscViewerFormat format;
|
PetscViewerFormat format;
|
|
|
PetscFunctionBegin;
|
PetscFunctionBegin;
|
PetscValidHeaderSpecific(st,ST_COOKIE,1);
|
PetscValidHeaderSpecific(st,ST_CLASSID,1);
|
if (!viewer) viewer = PETSC_VIEWER_STDOUT_(((PetscObject)st)->comm);
|
if (!viewer) viewer = PETSC_VIEWER_STDOUT_(((PetscObject)st)->comm);
|
PetscValidHeaderSpecific(viewer,PETSC_VIEWER_COOKIE,2);
|
PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2);
|
PetscCheckSameComm(st,1,viewer,2);
|
PetscCheckSameComm(st,1,viewer,2);
|
|
|
ierr = PetscTypeCompare((PetscObject)viewer,PETSC_VIEWER_ASCII,&isascii);CHKERRQ(ierr);
|
ierr = PetscTypeCompare((PetscObject)viewer,PETSC_VIEWER_ASCII,&isascii);CHKERRQ(ierr);
|
ierr = PetscTypeCompare((PetscObject)viewer,PETSC_VIEWER_STRING,&isstring);CHKERRQ(ierr);
|
ierr = PetscTypeCompare((PetscObject)viewer,PETSC_VIEWER_STRING,&isstring);CHKERRQ(ierr);
|
if (isascii) {
|
if (isascii) {
|