| struct _p_SVD { |
| PETSCHEADER(struct _SVDOps); |
| Mat OP; /* problem matrix */ |
| Mat A; /* problem matrix (m>n) */ |
| Mat A; /* problem matrix (m>n) */ |
| Mat AT; /* transposed matrix */ |
| SVDTransposeMode transmode; /* transpose mode */ |
| PetscReal *sigma; /* singular values */ |
| PetscReal *sigma; /* singular values */ |
| PetscInt *perm; /* permutation for singular value ordering */ |
| Vec *U,*V; /* left and right singular vectors */ |
| Vec *U,*V; /* left and right singular vectors */ |
| Vec *IS; /* placeholder for references to user-provided initial space */ |
| PetscInt n; /* maximun size of descomposition */ |
| SVDWhich which; /* which singular values are computed */ |
| PetscInt nconv; /* number of converged values */ |
| PetscInt nconv; /* number of converged values */ |
| PetscInt nsv; /* number of requested values */ |
| PetscInt ncv; /* basis size */ |
| PetscInt mpd; /* maximum dimension of projected problem */ |
| PetscReal tol; /* tolerance */ |
| PetscReal *errest; /* error estimates */ |
| PetscRandom rand; /* random number generator */ |
| void *data; /* placeholder for misc stuff associated |
| with a particular solver */ |
| void *data; /* placeholder for misc stuff associated |
| with a particular solver */ |
| PetscInt setupcalled; |
| SVDConvergedReason reason; |
| IP ip; |
| #if (SLEPC_VERSION_RELEASE == 1) |
| #define SlepcGetVersion(version,len) PetscSNPrintf(version,len,"SLEPc Release Version %d.%d, Patch %d, %s", \ |
| SLEPC_VERSION_MAJOR,SLEPC_VERSION_MINOR, \ |
| SLEPC_VERSION_PATCH,SLEPC_VERSION_PATCH_DATE) |
| SLEPC_VERSION_PATCH,SLEPC_VERSION_PATCH_DATE) |
| #else |
| #define SlepcGetVersion(version,len) PetscSNPrintf(version,len,"SLEPc Development SVN revision: %d SVN Date: %s", \ |
| SLEPC_VERSION_SVN, SLEPC_VERSION_DATE_SVN) |
| PetscErrorCode ierr; |
| PetscFunctionBegin; |
| ierr = QEPRegisterDynamic(QEPLINEAR, path,"QEPCreate_LINEAR", |
| QEPCreate_LINEAR);CHKERRQ(ierr); |
| ierr = QEPRegisterDynamic(QEPQARNOLDI, path,"QEPCreate_QARNOLDI", |
| QEPCreate_QARNOLDI);CHKERRQ(ierr); |
| ierr = QEPRegisterDynamic(QEPLINEAR,path,"QEPCreate_LINEAR",QEPCreate_LINEAR);CHKERRQ(ierr); |
| ierr = QEPRegisterDynamic(QEPQARNOLDI,path,"QEPCreate_QARNOLDI",QEPCreate_QARNOLDI);CHKERRQ(ierr); |
| PetscFunctionReturn(0); |
| } |
| Options Database Key: |
| . -st_matstructure <str> - Indicates the structure flag, where <str> is one |
| of 'same' (A and B have the same nonzero pattern), 'different' (A |
| and B have different nonzero pattern) or 'subset' (B's nonzero |
| pattern is a subset of A's). |
| and B have different nonzero pattern) or 'subset' (B's nonzero |
| pattern is a subset of A's). |
| Note: |
| By default, the sparsity patterns are assumed to be different. If the |
| ierr = PetscNew(ST_FOLD,&ctx); CHKERRQ(ierr); |
| PetscLogObjectMemory(st,sizeof(ST_FOLD)); |
| st->data = (void *) ctx; |
| st->data = (void *) ctx; |
| st->ops->apply = STApply_Fold; |
| st->ops->apply = STApply_Fold; |
| st->ops->getbilinearform = STGetBilinearForm_Default; |
| st->ops->applytrans = STApplyTranspose_Fold; |
| st->ops->backtr = STBackTransform_Fold; |
| st->ops->setup = STSetUp_Fold; |
| st->ops->view = STView_Fold; |
| st->ops->backtr = STBackTransform_Fold; |
| st->ops->setup = STSetUp_Fold; |
| st->ops->view = STView_Fold; |
| st->ops->setfromoptions = STSetFromOptions_Fold; |
| st->ops->destroy = STDestroy_Fold; |
| st->checknullspace = 0; |
| st->ops->destroy = STDestroy_Fold; |
| st->checknullspace = 0; |
| PetscFunctionReturn(0); |
| } |
| /*MC |
| STSHELL - Creates a new spectral transformation class. |
| This is intended to provide a simple class to use with EPS. |
| You should not use this if you plan to make a complete class. |
| You should not use this if you plan to make a complete class. |
| Level: advanced |
| PetscFunctionBegin; |
| ierr = EPSRegisterDynamic(EPSPOWER, path,"EPSCreate_POWER", |
| EPSCreate_POWER);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSSUBSPACE, path,"EPSCreate_SUBSPACE", |
| EPSCreate_SUBSPACE);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSARNOLDI, path,"EPSCreate_ARNOLDI", |
| EPSCreate_ARNOLDI);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSLANCZOS, path,"EPSCreate_LANCZOS", |
| EPSCreate_LANCZOS);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSKRYLOVSCHUR, path,"EPSCreate_KRYLOVSCHUR", |
| EPSCreate_KRYLOVSCHUR);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSDSITRLANCZOS, path,"EPSCreate_DSITRLANCZOS", |
| EPSCreate_DSITRLANCZOS);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSPOWER,path,"EPSCreate_POWER",EPSCreate_POWER);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSSUBSPACE,path,"EPSCreate_SUBSPACE",EPSCreate_SUBSPACE);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSARNOLDI,path,"EPSCreate_ARNOLDI",EPSCreate_ARNOLDI);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSLANCZOS,path,"EPSCreate_LANCZOS",EPSCreate_LANCZOS);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSKRYLOVSCHUR,path,"EPSCreate_KRYLOVSCHUR",EPSCreate_KRYLOVSCHUR);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSDSITRLANCZOS,path,"EPSCreate_DSITRLANCZOS",EPSCreate_DSITRLANCZOS);CHKERRQ(ierr); |
| #if defined(SLEPC_HAVE_ARPACK) |
| ierr = EPSRegisterDynamic(EPSARPACK, path,"EPSCreate_ARPACK", |
| EPSCreate_ARPACK);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSARPACK,path,"EPSCreate_ARPACK",EPSCreate_ARPACK);CHKERRQ(ierr); |
| #endif |
| ierr = EPSRegisterDynamic(EPSLAPACK, path,"EPSCreate_LAPACK", |
| EPSCreate_LAPACK);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSLAPACK,path,"EPSCreate_LAPACK",EPSCreate_LAPACK);CHKERRQ(ierr); |
| #if defined(SLEPC_HAVE_BLZPACK) && !defined(PETSC_USE_COMPLEX) |
| ierr = EPSRegisterDynamic(EPSBLZPACK, path,"EPSCreate_BLZPACK", |
| EPSCreate_BLZPACK);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSBLZPACK,path,"EPSCreate_BLZPACK",EPSCreate_BLZPACK);CHKERRQ(ierr); |
| #endif |
| #if defined(SLEPC_HAVE_TRLAN) && !defined(PETSC_USE_COMPLEX) |
| ierr = EPSRegisterDynamic(EPSTRLAN, path,"EPSCreate_TRLAN", |
| EPSCreate_TRLAN);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSTRLAN,path,"EPSCreate_TRLAN",EPSCreate_TRLAN);CHKERRQ(ierr); |
| #endif |
| #if defined(PETSC_HAVE_BLOPEX) |
| ierr = EPSRegisterDynamic(EPSBLOPEX, path,"EPSCreate_BLOPEX", |
| EPSCreate_BLOPEX);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSBLOPEX,path,"EPSCreate_BLOPEX",EPSCreate_BLOPEX);CHKERRQ(ierr); |
| #endif |
| #if defined(SLEPC_HAVE_PRIMME) |
| ierr = EPSRegisterDynamic(EPSPRIMME, path, "EPSCreate_PRIMME", |
| EPSCreate_PRIMME);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSPRIMME,path,"EPSCreate_PRIMME",EPSCreate_PRIMME);CHKERRQ(ierr); |
| #endif |
| ierr = EPSRegisterDynamic(EPSGD, path, "EPSCreate_GD", |
| EPSCreate_GD);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSJD, path, "EPSCreate_JD", |
| EPSCreate_JD);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSGD,path,"EPSCreate_GD",EPSCreate_GD);CHKERRQ(ierr); |
| ierr = EPSRegisterDynamic(EPSJD,path,"EPSCreate_JD",EPSCreate_JD);CHKERRQ(ierr); |
| PetscFunctionReturn(0); |
| } |
| ierr = STApply(globaleps->OP,x,y);CHKERRQ(ierr); |
| ierr = IPOrthogonalize(globaleps->ip,0,PETSC_NULL,globaleps->nds,PETSC_NULL,globaleps->DS,y,PETSC_NULL,PETSC_NULL,PETSC_NULL);CHKERRQ(ierr); |
| ierr = VecResetArray(x);CHKERRQ(ierr); |
| ierr = VecResetArray(y);CHKERRQ(ierr); |
| ierr = VecResetArray(y);CHKERRQ(ierr); |
| } |
| ierr = VecDestroy(&x);CHKERRQ(ierr); |
| ierr = VecDestroy(&y);CHKERRQ(ierr); |
| PetscErrorCode ierr; |
| PetscInt i; |
| PetscBLASInt ipar[32], n, lohi, stat, ncv; |
| EPS_TRLAN *tr = (EPS_TRLAN *)eps->data; |
| PetscScalar *pV; |
| EPS_TRLAN *tr = (EPS_TRLAN *)eps->data; |
| PetscScalar *pV; |
| PetscFunctionBegin; |
| PetscErrorCode EPSSolve_ARPACK(EPS eps) |
| { |
| PetscErrorCode ierr; |
| EPS_ARPACK *ar = (EPS_ARPACK *)eps->data; |
| char bmat[1], howmny[] = "A"; |
| const char *which; |
| PetscBLASInt n, iparam[11], ipntr[14], ido, info, |
| nev, ncv; |
| PetscScalar sigmar, *pV, *resid; |
| Vec x, y, w = eps->work[0]; |
| Mat A; |
| PetscBool isSinv, isShift, rvec; |
| EPS_ARPACK *ar = (EPS_ARPACK *)eps->data; |
| char bmat[1], howmny[] = "A"; |
| const char *which; |
| PetscBLASInt n, iparam[11], ipntr[14], ido, info, nev, ncv; |
| PetscScalar sigmar, *pV, *resid; |
| Vec x, y, w = eps->work[0]; |
| Mat A; |
| PetscBool isSinv, isShift, rvec; |
| PetscBLASInt fcomm; |
| #if !defined(PETSC_USE_COMPLEX) |
| PetscScalar sigmai = 0.0; |
| #endif |
| PetscFunctionBegin; |
| nev = PetscBLASIntCast(eps->nev); |
| ncv = PetscBLASIntCast(eps->ncv); |
| fcomm = PetscBLASIntCast(MPI_Comm_c2f(((PetscObject)eps)->comm)); |
| if (ido == -1) { |
| /* Y = OP * X for for the initialization phase to |
| force the starting vector into the range of OP */ |
| ierr = STApply(eps->OP,x,y); CHKERRQ(ierr); |
| force the starting vector into the range of OP */ |
| ierr = STApply(eps->OP,x,y); CHKERRQ(ierr); |
| } else if (ido == 2) { |
| /* Y = B * X */ |
| ierr = IPApplyMatrix(eps->ip,x,y); CHKERRQ(ierr); |
| ierr = IPApplyMatrix(eps->ip,x,y); CHKERRQ(ierr); |
| } else { /* ido == 1 */ |
| if (iparam[6] == 3 && bmat[0] == 'G') { |
| /* Y = OP * X for shift-and-invert with B semi-positive definite */ |
| ierr = STAssociatedKSPSolve(eps->OP,x,y);CHKERRQ(ierr); |
| } else if (iparam[6] == 2) { |
| ierr = STAssociatedKSPSolve(eps->OP,x,y);CHKERRQ(ierr); |
| } else if (iparam[6] == 2) { |
| /* X=A*X Y=B^-1*X for shift with B positive definite */ |
| ierr = MatMult(A,x,y);CHKERRQ(ierr); |
| if (sigmar != 0.0) { |
| ierr = IPApplyMatrix(eps->ip,x,w);CHKERRQ(ierr); |
| ierr = MatMult(A,x,y);CHKERRQ(ierr); |
| if (sigmar != 0.0) { |
| ierr = IPApplyMatrix(eps->ip,x,w);CHKERRQ(ierr); |
| ierr = VecAXPY(y,sigmar,w);CHKERRQ(ierr); |
| } |
| } |
| ierr = VecCopy(y,x); CHKERRQ(ierr); |
| ierr = STAssociatedKSPSolve(eps->OP,x,y);CHKERRQ(ierr); |
| } else { |
| } else { |
| /* Y = OP * X */ |
| ierr = STApply(eps->OP,x,y); CHKERRQ(ierr); |
| } |
| ierr = STApply(eps->OP,x,y); CHKERRQ(ierr); |
| } |
| ierr = IPOrthogonalize(eps->ip,0,PETSC_NULL,eps->nds,PETSC_NULL,eps->DS,y,PETSC_NULL,PETSC_NULL,PETSC_NULL);CHKERRQ(ierr); |
| } |
| if (eps->ishermitian) { |
| ierr = EPSMonitor(eps,iparam[2],iparam[4],&ar->workl[ipntr[5]-1],eps->eigi,&ar->workl[ipntr[6]-1],eps->ncv);CHKERRQ(ierr); |
| ARseupd_ ( &fcomm, &rvec, howmny, ar->select, eps->eigr, |
| pV, &n, &sigmar, |
| bmat, &n, which, &nev, &eps->tol, |
| resid, &ncv, pV, &n, iparam, ipntr, ar->workd, |
| ar->workl, &ar->lworkl, &info, 1, 1, 2 ); |
| pV, &n, &sigmar, |
| bmat, &n, which, &nev, &eps->tol, |
| resid, &ncv, pV, &n, iparam, ipntr, ar->workd, |
| ar->workl, &ar->lworkl, &info, 1, 1, 2 ); |
| } |
| else { |
| ierr = EPSMonitor(eps,iparam[2],iparam[4],&ar->workl[ipntr[5]-1],&ar->workl[ipntr[6]-1],&ar->workl[ipntr[7]-1],eps->ncv);CHKERRQ(ierr); |
| ARneupd_ ( &fcomm, &rvec, howmny, ar->select, eps->eigr, eps->eigi, |
| pV, &n, &sigmar, &sigmai, ar->workev, |
| bmat, &n, which, &nev, &eps->tol, |
| resid, &ncv, pV, &n, iparam, ipntr, ar->workd, |
| ar->workl, &ar->lworkl, &info, 1, 1, 2 ); |
| pV, &n, &sigmar, &sigmai, ar->workev, |
| bmat, &n, which, &nev, &eps->tol, |
| resid, &ncv, pV, &n, iparam, ipntr, ar->workd, |
| ar->workl, &ar->lworkl, &info, 1, 1, 2 ); |
| } |
| #else |
| ierr = EPSMonitor(eps,eps->its,iparam[4],&ar->workl[ipntr[5]-1],eps->eigi,(PetscReal*)&ar->workl[ipntr[7]-1],eps->ncv);CHKERRQ(ierr); |
| ierr = VecPlaceArray( y, blz->v+i*eps->nloc );CHKERRQ(ierr); |
| if (blz->slice || eps->isgeneralized) { |
| ierr = STAssociatedKSPSolve( eps->OP, x, y );CHKERRQ(ierr); |
| } else { |
| } else { |
| ierr = STApply( eps->OP, x, y ); CHKERRQ(ierr); |
| } |
| } |
| ierr = IPOrthogonalize(eps->ip,0,PETSC_NULL,eps->nds,PETSC_NULL,eps->DS,y,PETSC_NULL,PETSC_NULL,PETSC_NULL);CHKERRQ(ierr); |
| ierr = VecResetArray(x);CHKERRQ(ierr); |
| ierr = VecResetArray(y);CHKERRQ(ierr); |
| ierr = VecResetArray(y);CHKERRQ(ierr); |
| } |
| /* monitor */ |
| eps->nconv = BLZistorr_(blz->istor,"NTEIG",5); |
| ierr = VecPlaceArray( y, blz->v+i*eps->nloc );CHKERRQ(ierr); |
| ierr = IPApplyMatrix(eps->ip, x, y ); CHKERRQ(ierr); |
| ierr = VecResetArray(x);CHKERRQ(ierr); |
| ierr = VecResetArray(y);CHKERRQ(ierr); |
| ierr = VecResetArray(y);CHKERRQ(ierr); |
| } |
| break; |
| case 3: |
| #define __FUNCT__ "OperatorASingleVector" |
| static void OperatorASingleVector(void *data,void *x,void *y) |
| { |
| PetscErrorCode ierr; |
| EPS eps = (EPS)data; |
| Mat A; |
| PetscErrorCode ierr; |
| EPS eps = (EPS)data; |
| Mat A; |
| PetscFunctionBegin; |
| ierr = STGetOperators(eps->OP,&A,PETSC_NULL); CHKERRABORT(PETSC_COMM_WORLD,ierr); |
| #define __FUNCT__ "OperatorAMultiVector" |
| static void OperatorAMultiVector(void *data,void *x,void *y) |
| { |
| EPS eps = (EPS)data; |
| EPS_BLOPEX *blopex = (EPS_BLOPEX*)eps->data; |
| EPS eps = (EPS)data; |
| EPS_BLOPEX *blopex = (EPS_BLOPEX*)eps->data; |
| PetscFunctionBegin; |
| blopex->ii.Eval(OperatorASingleVector,data,x,y); |
| #define __FUNCT__ "OperatorBSingleVector" |
| static void OperatorBSingleVector(void *data,void *x,void *y) |
| { |
| PetscErrorCode ierr; |
| EPS eps = (EPS)data; |
| Mat B; |
| PetscErrorCode ierr; |
| EPS eps = (EPS)data; |
| Mat B; |
| PetscFunctionBegin; |
| ierr = STGetOperators(eps->OP,PETSC_NULL,&B); CHKERRABORT(PETSC_COMM_WORLD,ierr); |
| #define __FUNCT__ "OperatorBMultiVector" |
| static void OperatorBMultiVector(void *data,void *x,void *y) |
| { |
| EPS eps = (EPS)data; |
| EPS_BLOPEX *blopex = (EPS_BLOPEX*)eps->data; |
| EPS eps = (EPS)data; |
| EPS_BLOPEX *blopex = (EPS_BLOPEX*)eps->data; |
| PetscFunctionBegin; |
| blopex->ii.Eval(OperatorBSingleVector,data,x,y); |
| //#ifdef PETSC_USE_COMPLEX |
| // info = lobpcg_solve_complex(blopex->eigenvectors,eps,OperatorAMultiVector, |
| // eps->isgeneralized?eps:PETSC_NULL,eps->isgeneralized?OperatorBMultiVector:PETSC_NULL, |
| // eps->isgeneralized?eps:PETSC_NULL,eps->isgeneralized?OperatorBMultiVector:PETSC_NULL, |
| // eps,Precond_FnMultiVector,blopex->Y, |
| // blopex->blap_fn,blopex->tol,eps->max_it,0,&its, |
| // eps->eigr,PETSC_NULL,0,eps->errest,PETSC_NULL,0); |
| //#else |
| info = lobpcg_solve(blopex->eigenvectors,eps,OperatorAMultiVector, |
| eps->isgeneralized?eps:PETSC_NULL,eps->isgeneralized?OperatorBMultiVector:PETSC_NULL, |
| eps->isgeneralized?eps:PETSC_NULL,eps->isgeneralized?OperatorBMultiVector:PETSC_NULL, |
| eps,Precond_FnMultiVector,blopex->Y, |
| blopex->blap_fn,blopex->tol,eps->max_it,0,&its, |
| eps->eigr,PETSC_NULL,0,eps->errest,PETSC_NULL,0); |
| ierr = VecDotEnd(u,V[j-2],&dot2);CHKERRQ(ierr); |
| if (PetscAbsScalar(dot2/norm2) > PETSC_MACHINE_EPSILON) { |
| *breakdown = PETSC_TRUE; |
| *M = j-1; |
| *beta = norm2; |
| *M = j-1; |
| *beta = norm2; |
| if (m>100) { ierr = PetscFree(lhh);CHKERRQ(ierr); } |
| ierr = VecDestroy(&u);CHKERRQ(ierr); |
| ierr = VecDestroy(&t);CHKERRQ(ierr); |
| PetscFunctionReturn(0); |
| if (m>100) { ierr = PetscFree(lhh);CHKERRQ(ierr); } |
| ierr = VecDestroy(&u);CHKERRQ(ierr); |
| ierr = VecDestroy(&t);CHKERRQ(ierr); |
| PetscFunctionReturn(0); |
| } |
| } |
| if (j>k) { |
| norm1 = sqrt(PetscRealPart(dot)); |
| for (i=0;i<j;i++) |
| H[ldh*j+i] = H[ldh*j+i]/norm1; |
| H[ldh*j+i] = H[ldh*j+i]/norm1; |
| H[ldh*j+j] = H[ldh*j+j]/dot; |
| ierr = VecCopy(V[j],t);CHKERRQ(ierr); |
| H[ldh*(j-1)+j] = norm; |
| for (i=0;i<j;i++) |
| H[ldh*j+i] = H[ldh*j+i]/norm; |
| H[ldh*j+i] = H[ldh*j+i]/norm; |
| H[ldh*j+j] = H[ldh*j+j]/dot; |
| ierr = VecScale(f,1.0/norm);CHKERRQ(ierr); |
| } |
| ierr = EPSGetStartVector(eps,k,eps->V[k],&breakdown);CHKERRQ(ierr); |
| if (breakdown) { |
| eps->reason = EPS_DIVERGED_BREAKDOWN; |
| PetscInfo(eps,"Unable to generate more start vectors\n"); |
| PetscInfo(eps,"Unable to generate more start vectors\n"); |
| } |
| } |
| if (eps->its >= eps->max_it) eps->reason = EPS_DIVERGED_ITS; |
| nritzo = 0; |
| for (i=0;i<n;i++) |
| if (norm*PetscAbsScalar(Y[i*n+n-1]) < PETSC_SQRT_MACHINE_EPSILON*anorm) |
| nritzo++; |
| nritzo++; |
| if (nritzo>nritz) { |
| nritz = 0; |
| for (i=0;i<n;i++) { |
| if (norm*PetscAbsScalar(Y[i*n+n-1]) < PETSC_SQRT_MACHINE_EPSILON*anorm) { |
| ierr = SlepcVecMAXPBY(lanczos->AV[nritz],0.0,1.0,n,Y+i*n,V+k);CHKERRQ(ierr); |
| if (norm*PetscAbsScalar(Y[i*n+n-1]) < PETSC_SQRT_MACHINE_EPSILON*anorm) { |
| ierr = SlepcVecMAXPBY(lanczos->AV[nritz],0.0,1.0,n,Y+i*n,V+k);CHKERRQ(ierr); |
| nritz++; |
| } |
| } |
| } |
| } |
| if (nritz > 0) { |
| ierr = IPOrthogonalize(eps->ip,0,PETSC_NULL,nritz,PETSC_NULL,lanczos->AV,f,hwork,&norm,breakdown);CHKERRQ(ierr); |
| if (*breakdown) { |
| *M = j+1; |
| break; |
| *M = j+1; |
| break; |
| } |
| } |
| /* find left interval */ |
| for (k=i;k>=0;k--) { |
| if (PetscAbsReal(mu[k])<eta || which[k]) break; |
| else which[k] = PETSC_TRUE; |
| else which[k] = PETSC_TRUE; |
| } |
| /* find right interval */ |
| for (k=i+1;k<j;k++) { |
| if (PetscAbsReal(mu[k])<eta || which[k]) break; |
| else which[k] = PETSC_TRUE; |
| else which[k] = PETSC_TRUE; |
| } |
| } |
| PetscFunctionReturnVoid(); |
| /* Estimate ||A|| if needed */ |
| if (estimate_anorm) { |
| if (j>k) anorm = PetscMax(anorm,PetscAbsReal(alpha[j-k])+norm+beta[j-k-1]); |
| else anorm = PetscMax(anorm,PetscAbsReal(alpha[j-k])+norm); |
| else anorm = PetscMax(anorm,PetscAbsReal(alpha[j-k])+norm); |
| } |
| /* Check if reorthogonalization is needed */ |
| reorth = PETSC_FALSE; |
| if (j>k) { |
| update_omega(omega,omega_old,j-k,alpha,beta-1,eps1,anorm); |
| for (i=0;i<j-k;i++) |
| if (PetscAbsScalar(omega[i]) > delta) reorth = PETSC_TRUE; |
| update_omega(omega,omega_old,j-k,alpha,beta-1,eps1,anorm); |
| for (i=0;i<j-k;i++) |
| if (PetscAbsScalar(omega[i]) > delta) reorth = PETSC_TRUE; |
| } |
| if (reorth || force_reorth) { |
| if (lanczos->reorthog == EPS_LANCZOS_REORTHOG_PERIODIC) { |
| /* Periodic reorthogonalization */ |
| if (force_reorth) force_reorth = PETSC_FALSE; |
| else force_reorth = PETSC_TRUE; |
| ierr = IPOrthogonalize(eps->ip,0,PETSC_NULL,j-k,PETSC_NULL,V+k,f,hwork,&norm,breakdown);CHKERRQ(ierr); |
| for (i=0;i<j-k;i++) |
| if (lanczos->reorthog == EPS_LANCZOS_REORTHOG_PERIODIC) { |
| /* Periodic reorthogonalization */ |
| if (force_reorth) force_reorth = PETSC_FALSE; |
| else force_reorth = PETSC_TRUE; |
| ierr = IPOrthogonalize(eps->ip,0,PETSC_NULL,j-k,PETSC_NULL,V+k,f,hwork,&norm,breakdown);CHKERRQ(ierr); |
| for (i=0;i<j-k;i++) |
| omega[i] = eps1; |
| } else { |
| /* Partial reorthogonalization */ |
| if (force_reorth) force_reorth = PETSC_FALSE; |
| else { |
| force_reorth = PETSC_TRUE; |
| compute_int(which2,omega,j-k,delta,eta); |
| for (i=0;i<j-k;i++) |
| if (which2[i]) omega[i] = eps1; |
| } |
| ierr = IPOrthogonalize(eps->ip,0,PETSC_NULL,j-k,which2,V+k,f,hwork,&norm,breakdown);CHKERRQ(ierr); |
| } |
| } else { |
| /* Partial reorthogonalization */ |
| if (force_reorth) force_reorth = PETSC_FALSE; |
| else { |
| force_reorth = PETSC_TRUE; |
| compute_int(which2,omega,j-k,delta,eta); |
| for (i=0;i<j-k;i++) |
| if (which2[i]) omega[i] = eps1; |
| } |
| ierr = IPOrthogonalize(eps->ip,0,PETSC_NULL,j-k,which2,V+k,f,hwork,&norm,breakdown);CHKERRQ(ierr); |
| } |
| } |
| } |
| } |
| if (!fro && norm*delta < anorm*eps1) { |
| fro = PETSC_TRUE; |
| PetscInfo1(eps,"Switching to full reorthogonalization at iteration %i\n",eps->its); |
| PetscInfo1(eps,"Switching to full reorthogonalization at iteration %i\n",eps->its); |
| } |
| beta[j-k] = norm; |
| /* purge spurious ritz values */ |
| if (lanczos->reorthog == EPS_LANCZOS_REORTHOG_LOCAL) { |
| for (i=0;i<k;i++) { |
| ierr = VecNorm(eps->V[nconv+i],NORM_2,&norm);CHKERRQ(ierr); |
| ierr = VecNorm(eps->V[nconv+i],NORM_2,&norm);CHKERRQ(ierr); |
| ierr = VecScale(eps->V[nconv+i],1.0/norm);CHKERRQ(ierr); |
| ierr = STApply(eps->OP,eps->V[nconv+i],w);CHKERRQ(ierr); |
| ierr = VecAXPY(w,-ritz[i],eps->V[nconv+i]);CHKERRQ(ierr); |
| ierr = VecNorm(w,NORM_2,&norm);CHKERRQ(ierr); |
| ierr = VecAXPY(w,-ritz[i],eps->V[nconv+i]);CHKERRQ(ierr); |
| ierr = VecNorm(w,NORM_2,&norm);CHKERRQ(ierr); |
| ierr = (*eps->conv_func)(eps,ritz[i],eps->eigi[i],norm,&bnd[i],eps->conv_ctx);CHKERRQ(ierr); |
| if (bnd[i]>=eps->tol) conv[i] = 'S'; |
| } |
| if (eps->reason == EPS_CONVERGED_ITERATING) { /* copy restart vector */ |
| if (lanczos->reorthog == EPS_LANCZOS_REORTHOG_LOCAL && !breakdown) { |
| /* Reorthonormalize restart vector */ |
| ierr = IPOrthogonalize(eps->ip,eps->nds,eps->DS,nconv,PETSC_NULL,eps->V,f,PETSC_NULL,&norm,&breakdown);CHKERRQ(ierr); |
| ierr = VecScale(f,1.0/norm);CHKERRQ(ierr); |
| ierr = IPOrthogonalize(eps->ip,eps->nds,eps->DS,nconv,PETSC_NULL,eps->V,f,PETSC_NULL,&norm,&breakdown);CHKERRQ(ierr); |
| ierr = VecScale(f,1.0/norm);CHKERRQ(ierr); |
| } |
| if (breakdown) { |
| /* Use random vector for restarting */ |
| PetscInfo(eps,"Using random vector for restart\n"); |
| ierr = EPSGetStartVector(eps,nconv,f,&breakdown);CHKERRQ(ierr); |
| /* Use random vector for restarting */ |
| PetscInfo(eps,"Using random vector for restart\n"); |
| ierr = EPSGetStartVector(eps,nconv,f,&breakdown);CHKERRQ(ierr); |
| } |
| if (breakdown) { /* give up */ |
| eps->reason = EPS_DIVERGED_BREAKDOWN; |
| #define __FUNCT__ "dvd_updateV_testConv" |
| PetscErrorCode dvd_updateV_testConv(dvdDashboard *d, PetscInt s, PetscInt pre, |
| PetscInt e, Vec *auxV, PetscScalar *auxS, |
| PetscInt *nConv) |
| PetscInt *nConv) |
| { |
| PetscInt i; |
| #ifndef PETSC_USE_COMPLEX |
| ispositive = eps->ispositive; |
| dvd->sA = DVD_MAT_IMPLICIT | |
| (eps->ishermitian? DVD_MAT_HERMITIAN : 0) | |
| ((ispositive && !eps->isgeneralized) ? DVD_MAT_POS_DEF : 0); |
| ((ispositive && !eps->isgeneralized) ? DVD_MAT_POS_DEF : 0); |
| /* Asume -eps_hermitian means hermitian-definite in generalized problems */ |
| if (!ispositive && !eps->isgeneralized && eps->ishermitian) ispositive = PETSC_TRUE; |
| if (!eps->isgeneralized) |
| (ispositive? DVD_MAT_POS_DEF : 0); |
| ipB = DVD_IS(dvd->sB, DVD_MAT_POS_DEF)?PETSC_TRUE:PETSC_FALSE; |
| dvd->sEP = ((!eps->isgeneralized || (eps->isgeneralized && ipB))? DVD_EP_STD : 0) | |
| (ispositive? DVD_EP_HERMITIAN : 0); |
| (ispositive? DVD_EP_HERMITIAN : 0); |
| dvd->nev = eps->nev; |
| dvd->which = eps->which; |
| switch(eps->which) { |
| PetscErrorCode ierr; |
| PetscFunctionBegin; |
| if (!stages[0]) { |
| ierr = PetscLogStageRegister("Dvd_step_initV", &stages[DVD_STAGE_INITV]); |
| CHKERRQ(ierr); |
| ierr = PetscLogStageRegister("Dvd_step_calcPairs", |
| &stages[DVD_STAGE_CALCPAIRS]); CHKERRQ(ierr); |
| ierr = PetscLogStageRegister("Dvd_step_improveX", |
| &stages[DVD_STAGE_IMPROVEX]); CHKERRQ(ierr); |
| ierr = PetscLogStageRegister("Dvd_step_updateV", |
| &stages[DVD_STAGE_UPDATEV]); CHKERRQ(ierr); |
| ierr = PetscLogStageRegister("Dvd_step_orthV", |
| &stages[DVD_STAGE_ORTHV]); CHKERRQ(ierr); |
| ierr = PetscLogStageRegister("Dvd_step_calcPairs",&stages[DVD_STAGE_CALCPAIRS]);CHKERRQ(ierr); |
| ierr = PetscLogStageRegister("Dvd_step_improveX",&stages[DVD_STAGE_IMPROVEX]);CHKERRQ(ierr); |
| ierr = PetscLogStageRegister("Dvd_step_updateV",&stages[DVD_STAGE_UPDATEV]);CHKERRQ(ierr); |
| ierr = PetscLogStageRegister("Dvd_step_orthV",&stages[DVD_STAGE_ORTHV]);CHKERRQ(ierr); |
| } |
| PetscFunctionReturn(0); |
| } |
| if (ierra == 0 && ierrb == 0) { |
| ierr = STGetShift(eps->OP,&shift);CHKERRQ(ierr); |
| if (shift != 0.0) { |
| ierr = MatShift(la->A,shift);CHKERRQ(ierr); |
| ierr = MatShift(la->A,shift);CHKERRQ(ierr); |
| } |
| /* use dummy pc and ksp to avoid problems when B is not positive definite */ |
| ierr = STGetKSP(eps->OP,&ksp);CHKERRQ(ierr); |
| else rho = rt2; |
| #endif |
| } |
| /* update operator according to new shift */ |
| PetscPushErrorHandler(PetscIgnoreErrorHandler,PETSC_NULL); |
| ierr = STSetShift(eps->OP,rho); |
| PetscPopErrorHandler(); |
| if (ierr) { |
| /* update operator according to new shift */ |
| PetscPushErrorHandler(PetscIgnoreErrorHandler,PETSC_NULL); |
| ierr = STSetShift(eps->OP,rho); |
| PetscPopErrorHandler(); |
| if (ierr) { |
| eps->eigr[eps->nconv] = rho; |
| relerr = PETSC_MACHINE_EPSILON; |
| rho = sigma; |
| relerr = PETSC_MACHINE_EPSILON; |
| rho = sigma; |
| ierr = STSetShift(eps->OP,rho);CHKERRQ(ierr); |
| } |
| } |
| } |
| } |
| eps->nconv = eps->nconv + 1; |
| if (eps->nconv==eps->nev) eps->reason = EPS_CONVERGED_TOL; |
| else { |
| v = eps->V[eps->nconv]; |
| ierr = EPSGetStartVector(eps,eps->nconv,v,&breakdown);CHKERRQ(ierr); |
| if (breakdown) { |
| v = eps->V[eps->nconv]; |
| ierr = EPSGetStartVector(eps,eps->nconv,v,&breakdown);CHKERRQ(ierr); |
| if (breakdown) { |
| eps->reason = EPS_DIVERGED_BREAKDOWN; |
| PetscInfo(eps,"Unable to generate more start vectors\n"); |
| } |
| PetscInfo(eps,"Unable to generate more start vectors\n"); |
| } |
| } |
| } |
| else rho = rt2; |
| #endif |
| } |
| /* update operator according to new shift */ |
| PetscPushErrorHandler(PetscIgnoreErrorHandler,PETSC_NULL); |
| ierr = STSetShift(eps->OP,rho); |
| PetscPopErrorHandler(); |
| if (ierr) { |
| /* update operator according to new shift */ |
| PetscPushErrorHandler(PetscIgnoreErrorHandler,PETSC_NULL); |
| ierr = STSetShift(eps->OP,rho); |
| PetscPopErrorHandler(); |
| if (ierr) { |
| eps->eigr[eps->nconv] = rho; |
| eps->errest[eps->nconv] = PETSC_MACHINE_EPSILON; |
| eps->errest_left[eps->nconv] = PETSC_MACHINE_EPSILON; |
| rho = sigma; |
| eps->errest[eps->nconv] = PETSC_MACHINE_EPSILON; |
| eps->errest_left[eps->nconv] = PETSC_MACHINE_EPSILON; |
| rho = sigma; |
| ierr = STSetShift(eps->OP,rho);CHKERRQ(ierr); |
| } |
| } |
| } |
| } |
| ierr = IPOrthogonalizeCGS1(ip,nds,DS,n,which,V,v,c,PETSC_NULL,&nrm);CHKERRQ(ierr); |
| } |
| for (j=0;j<n;j++) |
| if (!which || which[j]) h[nds+j] += c[nds+j]; |
| if (!which || which[j]) h[nds+j] += c[nds+j]; |
| } |
| if (norm) *norm = nrm; |
| if (lindep) { |
| switch (svd->transmode) { |
| case SVD_TRANSPOSE_EXPLICIT: |
| ierr = PetscViewerASCIIPrintf(viewer," transpose mode: explicit\n");CHKERRQ(ierr); |
| break; |
| break; |
| case SVD_TRANSPOSE_IMPLICIT: |
| ierr = PetscViewerASCIIPrintf(viewer," transpose mode: implicit\n");CHKERRQ(ierr); |
| break; |
| break; |
| default: |
| ierr = PetscViewerASCIIPrintf(viewer," transpose mode: not yet set\n");CHKERRQ(ierr); |
| } |
| PetscErrorCode ierr; |
| PetscFunctionBegin; |
| ierr = SVDRegisterDynamic(SVDCROSS, path,"SVDCreate_CROSS", |
| SVDCreate_CROSS);CHKERRQ(ierr); |
| ierr = SVDRegisterDynamic(SVDCYCLIC, path,"SVDCreate_CYCLIC", |
| SVDCreate_CYCLIC);CHKERRQ(ierr); |
| ierr = SVDRegisterDynamic(SVDLAPACK, path,"SVDCreate_LAPACK", |
| SVDCreate_LAPACK);CHKERRQ(ierr); |
| ierr = SVDRegisterDynamic(SVDLANCZOS, path,"SVDCreate_LANCZOS", |
| SVDCreate_LANCZOS);CHKERRQ(ierr); |
| ierr = SVDRegisterDynamic(SVDTRLANCZOS, path,"SVDCreate_TRLANCZOS", |
| SVDCreate_TRLANCZOS);CHKERRQ(ierr); |
| ierr = SVDRegisterDynamic(SVDCROSS,path,"SVDCreate_CROSS",SVDCreate_CROSS);CHKERRQ(ierr); |
| ierr = SVDRegisterDynamic(SVDCYCLIC,path,"SVDCreate_CYCLIC",SVDCreate_CYCLIC);CHKERRQ(ierr); |
| ierr = SVDRegisterDynamic(SVDLAPACK,path,"SVDCreate_LAPACK",SVDCreate_LAPACK);CHKERRQ(ierr); |
| ierr = SVDRegisterDynamic(SVDLANCZOS,path,"SVDCreate_LANCZOS",SVDCreate_LANCZOS);CHKERRQ(ierr); |
| ierr = SVDRegisterDynamic(SVDTRLANCZOS,path,"SVDCreate_TRLANCZOS",SVDCreate_TRLANCZOS);CHKERRQ(ierr); |
| PetscFunctionReturn(0); |
| } |
| ierr = VecCopy(x1,svd->U[j]);CHKERRQ(ierr); |
| ierr = VecScale(svd->U[j],1.0/sqrt(2.0));CHKERRQ(ierr); |
| ierr = VecCopy(x2,svd->V[j]);CHKERRQ(ierr); |
| ierr = VecScale(svd->V[j],1.0/sqrt(2.0));CHKERRQ(ierr); |
| ierr = VecScale(svd->V[j],1.0/sqrt(2.0));CHKERRQ(ierr); |
| ierr = VecResetArray(x1);CHKERRQ(ierr); |
| ierr = VecResetArray(x2);CHKERRQ(ierr); |
| ierr = VecRestoreArray(x,&px);CHKERRQ(ierr); |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| PetscErrorCode ierr; |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscErrorCode ierr; |
| PetscInt N, n=10, m, Istart, Iend, II, nev, maxit, i, j, its, nconv; |
| PetscBool flag; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt N, n=10, m, Istart, Iend, II, nev, maxit, i, j, its, nconv; |
| PetscBool flag; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| PetscErrorCode ierr; |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscErrorCode ierr; |
| PetscInt nev, maxit, i, its, nconv; |
| char filename[256]; |
| PetscViewer viewer; |
| PetscBool flg; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt nev, maxit, i, its, nconv; |
| char filename[256]; |
| PetscViewer viewer; |
| PetscBool flg; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| "This example illustrates how the user can set the initial vector.\n\n" |
| "The command line options are:\n" |
| " -m <m>, where <m> = number of grid subdivisions in each dimension.\n\n"; |
| cut -d : -f 1 | uniq | xargs gvim |
| #include <slepceps.h> |
| /* |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Vec v0; /* initial vector */ |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt N, m=15, nev, maxit, i, its, nconv; |
| PetscErrorCode ierr; |
| Vec v0; /* initial vector */ |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt N, m=15, nev, maxit, i, its, nconv; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| /* north */ |
| if( i==1 ) { |
| ierr = MatSetValue( A, ix-1, ix, 2*pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| else { |
| } else { |
| ierr = MatSetValue( A, ix-1, ix, pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| /* east */ |
| if( j==1 ) { |
| ierr = MatSetValue( A, ix-1, ix+jmax-1, 2*pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| else { |
| } else { |
| ierr = MatSetValue( A, ix-1, ix+jmax-1, pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| } |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat A,B; /* matrices */ |
| EPS eps; /* eigenproblem solver context */ |
| PetscErrorCode ierr; |
| Mat A,B; /* matrices */ |
| EPS eps; /* eigenproblem solver context */ |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscErrorCode ierr; |
| PetscInt nev, maxit, i, its, lits, nconv; |
| char filename[256]; |
| PetscViewer viewer; |
| PetscBool flg; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt nev, maxit, i, its, lits, nconv; |
| char filename[256]; |
| PetscViewer viewer; |
| PetscBool flg; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| int main( int argc, char **argv ) |
| { |
| PetscErrorCode ierr; |
| Mat A; /* Grcar matrix */ |
| Mat A; /* Grcar matrix */ |
| SVD svd; /* singular value solver context */ |
| PetscInt N=30, Istart, Iend, i, col[5], nconv1, nconv2; |
| PetscScalar value[] = { -1, 1, 1, 1, 1 }; |
| PetscReal sigma_1, sigma_n; |
| PetscInt N=30, Istart, Iend, i, col[5], nconv1, nconv2; |
| PetscScalar value[] = { -1, 1, 1, 1, 1 }; |
| PetscReal sigma_1, sigma_n; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| col[0]=i-1; col[1]=i; col[2]=i+1; col[3]=i+2; col[4]=i+3; |
| if (i==0) { |
| ierr = MatSetValues(A,1,&i,4,col+1,value+1,INSERT_VALUES);CHKERRQ(ierr); |
| } |
| else { |
| } else { |
| ierr = MatSetValues(A,1,&i,PetscMin(5,N-i+1),col,value,INSERT_VALUES);CHKERRQ(ierr); |
| } |
| } |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat A; /* eigenvalue problem matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| PetscErrorCode ierr; |
| Mat A; /* eigenvalue problem matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar delta1, delta2, L, h, kr, ki, value[3]; |
| PetscInt N=30, n, i, col[3], Istart, Iend, nev, maxit, its, nconv; |
| PetscReal error, tol, re, im; |
| PetscScalar delta1, delta2, L, h, kr, ki, value[3]; |
| PetscInt N=30, n, i, col[3], Istart, Iend, nev, maxit, its, nconv; |
| PetscBool FirstBlock=PETSC_FALSE, LastBlock=PETSC_FALSE; |
| PetscErrorCode ierr; |
| CTX_BRUSSEL *ctx; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| ST st; /* spectral transformation context */ |
| SampleShellST *shell; /* user-defined spectral transform context */ |
| PetscErrorCode ierr; |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| ST st; /* spectral transformation context */ |
| SampleShellST *shell; /* user-defined spectral transform context */ |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscErrorCode ierr; |
| PetscInt n=30, i, col[3], Istart, Iend, FirstBlock=0, LastBlock=0, nev, maxit, its, nconv; |
| PetscScalar value[3]; |
| PetscBool isShell; |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat A; /* operator matrix */ |
| Vec x; |
| EPS eps; /* eigenproblem solver context */ |
| PetscErrorCode ierr; |
| EPS eps; /* eigenproblem solver context */ |
| Mat A; /* operator matrix */ |
| Vec x; |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscErrorCode ierr; |
| PetscInt N, n=10, m, i, j, II, Istart, Iend, nev, maxit, its, nconv; |
| PetscScalar w; |
| PetscBool flag; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt N, n=10, m, i, j, II, Istart, Iend, nev, maxit, its, nconv; |
| PetscScalar w; |
| PetscBool flag; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| int main( int argc, char **argv ) |
| { |
| PetscErrorCode ierr; |
| Vec v0,w0; /* initial vector */ |
| Vec *X,*Y; /* right and left eigenvectors */ |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| Vec v0,w0; /* initial vector */ |
| Vec *X,*Y; /* right and left eigenvectors */ |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| const EPSType type; |
| PetscReal error1, error2, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt nev, maxit, i, its, nconv, N, m=15; |
| PetscReal error1, error2, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt nev, maxit, i, its, nconv, N, m=15; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| state probability distribution of the system, which is the eigevector |
| associated with the eigenvalue one and scaled in such a way that the sum all |
| the components is equal to one. |
| cut -d : -f 1 | uniq | xargs gvim |
| Note: the code will actually compute the transpose of the stochastic matrix |
| that contains the transition probabilities. |
| */ |
| /* north */ |
| if( i==1 ) { |
| ierr = MatSetValue( A, ix-1, ix, 2*pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| else { |
| } else { |
| ierr = MatSetValue( A, ix-1, ix, pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| /* east */ |
| if( j==1 ) { |
| ierr = MatSetValue( A, ix-1, ix+jmax-1, 2*pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| else { |
| } else { |
| ierr = MatSetValue( A, ix-1, ix+jmax-1, pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| } |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat A, B; /* matrices */ |
| EPS eps; /* eigenproblem solver context */ |
| ST st; /* spectral transformation context */ |
| PetscErrorCode ierr; |
| Mat A, B; /* matrices */ |
| EPS eps; /* eigenproblem solver context */ |
| ST st; /* spectral transformation context */ |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscErrorCode ierr; |
| PetscInt N, n=10, m, Istart, Iend, II, nev, maxit, i, j, its, nconv, nulldim=0; |
| PetscBool flag; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt N, n=10, m, Istart, Iend, II, nev, maxit, i, j, its, nconv, nulldim=0; |
| PetscBool flag; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat A; /* operator matrix */ |
| SVD svd; /* singular value problem solver context */ |
| PetscErrorCode ierr; |
| Mat A; /* operator matrix */ |
| SVD svd; /* singular value problem solver context */ |
| const SVDType type; |
| PetscReal error, tol, sigma; |
| PetscErrorCode ierr; |
| PetscInt nsv, maxit, i, its, nconv; |
| char filename[256]; |
| PetscViewer viewer; |
| PetscBool flg; |
| PetscReal error, tol, sigma; |
| PetscInt nsv, maxit, i, its, nconv; |
| char filename[256]; |
| PetscViewer viewer; |
| PetscBool flg; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat A; /* operator matrix */ |
| PetscErrorCode ierr; |
| Mat A; /* operator matrix */ |
| Vec u,v; /* left and right singular vectors */ |
| SVD svd; /* singular value problem solver context */ |
| SVD svd; /* singular value problem solver context */ |
| const SVDType type; |
| PetscReal error, tol, sigma, mu=PETSC_SQRT_MACHINE_EPSILON; |
| PetscErrorCode ierr; |
| PetscReal error, tol, sigma, mu=PETSC_SQRT_MACHINE_EPSILON; |
| PetscInt n=100, i, j, Istart, Iend, nsv, maxit, its, nconv; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat M, C, K; /* problem matrices */ |
| QEP qep; /* quadratic eigenproblem solver context */ |
| PetscErrorCode ierr; |
| Mat M, C, K; /* problem matrices */ |
| QEP qep; /* quadratic eigenproblem solver context */ |
| const QEPType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscErrorCode ierr; |
| PetscInt N, n=10, m, Istart, Iend, II, nev, maxit, i, j, its, nconv; |
| PetscBool flag; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt N, n=10, m, Istart, Iend, II, nev, maxit, i, j, its, nconv; |
| PetscBool flag; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Mat M, C, K; /* problem matrices */ |
| QEP qep; /* quadratic eigenproblem solver context */ |
| PetscErrorCode ierr; |
| Mat M, C, K; /* problem matrices */ |
| QEP qep; /* quadratic eigenproblem solver context */ |
| const QEPType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscErrorCode ierr; |
| PetscInt nev, maxit, i, its, nconv; |
| char filename[256]; |
| PetscViewer viewer; |
| PetscBool flg; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki; |
| PetscInt nev, maxit, i, its, nconv; |
| char filename[256]; |
| PetscViewer viewer; |
| PetscBool flg; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| #define __FUNCT__ "main" |
| int main( int argc, char **argv ) |
| { |
| Vec v0; /* initial vector */ |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki, target=0.5; |
| PetscInt N, m=15, nev, maxit, i, its, nconv; |
| PetscErrorCode ierr; |
| Vec v0; /* initial vector */ |
| Mat A; /* operator matrix */ |
| EPS eps; /* eigenproblem solver context */ |
| const EPSType type; |
| PetscReal error, tol, re, im; |
| PetscScalar kr, ki, target=0.5; |
| PetscInt N, m=15, nev, maxit, i, its, nconv; |
| SlepcInitialize(&argc,&argv,(char*)0,help); |
| /* north */ |
| if( i==1 ) { |
| ierr = MatSetValue( A, ix-1, ix, 2*pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| else { |
| } else { |
| ierr = MatSetValue( A, ix-1, ix, pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| /* east */ |
| if( j==1 ) { |
| ierr = MatSetValue( A, ix-1, ix+jmax-1, 2*pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| else { |
| } else { |
| ierr = MatSetValue( A, ix-1, ix+jmax-1, pd, INSERT_VALUES );CHKERRQ(ierr); |
| } |
| } |