| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
| 3 | SLEPc - Scalable Library for Eigenvalue Problem Computations | ||
| 4 | Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain | ||
| 5 | |||
| 6 | This file is part of SLEPc. | ||
| 7 | SLEPc is distributed under a 2-clause BSD license (see LICENSE). | ||
| 8 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
| 9 | */ | ||
| 10 | /* | ||
| 11 | EPS routines related to options that can be set via the command-line | ||
| 12 | or procedurally. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #include <slepc/private/epsimpl.h> /*I "slepceps.h" I*/ | ||
| 16 | #include <petscdraw.h> | ||
| 17 | |||
| 18 | /*@C | ||
| 19 | EPSMonitorSetFromOptions - Sets a monitor function and viewer appropriate for the type | ||
| 20 | indicated by the user. | ||
| 21 | |||
| 22 | Collective | ||
| 23 | |||
| 24 | Input Parameters: | ||
| 25 | + eps - the linear eigensolver context | ||
| 26 | . opt - the command line option for this monitor | ||
| 27 | . name - the monitor type one is seeking | ||
| 28 | . ctx - an optional user context for the monitor, or `NULL` | ||
| 29 | - trackall - whether this monitor tracks all eigenvalues or not | ||
| 30 | |||
| 31 | Level: developer | ||
| 32 | |||
| 33 | .seealso: [](ch:eps), `EPSMonitorSet()`, `EPSSetTrackAll()` | ||
| 34 | @*/ | ||
| 35 | 19026 | PetscErrorCode EPSMonitorSetFromOptions(EPS eps,const char opt[],const char name[],void *ctx,PetscBool trackall) | |
| 36 | { | ||
| 37 | 19026 | PetscErrorCode (*mfunc)(EPS,PetscInt,PetscInt,PetscScalar*,PetscScalar*,PetscReal*,PetscInt,void*); | |
| 38 | 19026 | PetscErrorCode (*cfunc)(PetscViewer,PetscViewerFormat,void*,PetscViewerAndFormat**); | |
| 39 | 19026 | PetscErrorCode (*dfunc)(PetscViewerAndFormat**); | |
| 40 | 19026 | PetscViewerAndFormat *vf; | |
| 41 | 19026 | PetscViewer viewer; | |
| 42 | 19026 | PetscViewerFormat format; | |
| 43 | 19026 | PetscViewerType vtype; | |
| 44 | 19026 | char key[PETSC_MAX_PATH_LEN]; | |
| 45 | 19026 | PetscBool flg; | |
| 46 | |||
| 47 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
19026 | PetscFunctionBegin; |
| 48 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
19026 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)eps),((PetscObject)eps)->options,((PetscObject)eps)->prefix,opt,&viewer,&format,&flg)); |
| 49 |
8/14✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
19026 | if (!flg) PetscFunctionReturn(PETSC_SUCCESS); |
| 50 | |||
| 51 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
74 | PetscCall(PetscViewerGetType(viewer,&vtype)); |
| 52 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
74 | PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key)); |
| 53 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
74 | PetscCall(PetscFunctionListFind(EPSMonitorList,key,&mfunc)); |
| 54 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
74 | PetscCheck(mfunc,PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"Specified viewer and format not supported"); |
| 55 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
74 | PetscCall(PetscFunctionListFind(EPSMonitorCreateList,key,&cfunc)); |
| 56 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
74 | PetscCall(PetscFunctionListFind(EPSMonitorDestroyList,key,&dfunc)); |
| 57 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
74 | if (!cfunc) cfunc = PetscViewerAndFormatCreate_Internal; |
| 58 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
74 | if (!dfunc) dfunc = PetscViewerAndFormatDestroy; |
| 59 | |||
| 60 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
74 | PetscCall((*cfunc)(viewer,format,ctx,&vf)); |
| 61 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
74 | PetscCall(PetscViewerDestroy(&viewer)); |
| 62 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
74 | PetscCall(EPSMonitorSet(eps,mfunc,vf,(PetscCtxDestroyFn*)dfunc)); |
| 63 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
74 | if (trackall) PetscCall(EPSSetTrackAll(eps,PETSC_TRUE)); |
| 64 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
| 65 | } | ||
| 66 | |||
| 67 | /*@ | ||
| 68 | EPSSetFromOptions - Sets `EPS` options from the options database. | ||
| 69 | This routine must be called before `EPSSetUp()` if the user is to be | ||
| 70 | allowed to configure the solver. | ||
| 71 | |||
| 72 | Collective | ||
| 73 | |||
| 74 | Input Parameter: | ||
| 75 | . eps - the linear eigensolver context | ||
| 76 | |||
| 77 | Note: | ||
| 78 | To see all options, run your program with the `-help` option. | ||
| 79 | |||
| 80 | Level: beginner | ||
| 81 | |||
| 82 | .seealso: [](ch:eps), `EPSSetOptionsPrefix()` | ||
| 83 | @*/ | ||
| 84 | 6342 | PetscErrorCode EPSSetFromOptions(EPS eps) | |
| 85 | { | ||
| 86 | 6342 | char type[256]; | |
| 87 | 6342 | PetscBool set,flg,flg1,flg2,flg3,bval; | |
| 88 | 6342 | PetscReal r,array[2]={0,0}; | |
| 89 | 6342 | PetscScalar s; | |
| 90 | 6342 | PetscInt i,j,k; | |
| 91 | 6342 | EPSBalance bal; | |
| 92 | |||
| 93 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
6342 | PetscFunctionBegin; |
| 94 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
6342 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 95 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(EPSRegisterAll()); |
| 96 |
8/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
|
19026 | PetscObjectOptionsBegin((PetscObject)eps); |
| 97 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6975 | PetscCall(PetscOptionsFList("-eps_type","Eigensolver method","EPSSetType",EPSList,(char*)(((PetscObject)eps)->type_name?((PetscObject)eps)->type_name:EPSKRYLOVSCHUR),type,sizeof(type),&flg)); |
| 98 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetType(eps,type)); |
| 99 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3840 | else if (!((PetscObject)eps)->type_name) PetscCall(EPSSetType(eps,EPSKRYLOVSCHUR)); |
| 100 | |||
| 101 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroupBegin("-eps_hermitian","Hermitian eigenvalue problem","EPSSetProblemType",&flg)); |
| 102 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_HEP)); |
| 103 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_gen_hermitian","Generalized Hermitian eigenvalue problem","EPSSetProblemType",&flg)); |
| 104 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_GHEP)); |
| 105 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_non_hermitian","Non-Hermitian eigenvalue problem","EPSSetProblemType",&flg)); |
| 106 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_NHEP)); |
| 107 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_gen_non_hermitian","Generalized non-Hermitian eigenvalue problem","EPSSetProblemType",&flg)); |
| 108 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_GNHEP)); |
| 109 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_pos_gen_non_hermitian","Generalized non-Hermitian eigenvalue problem with positive semi-definite B","EPSSetProblemType",&flg)); |
| 110 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_PGNHEP)); |
| 111 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_gen_indefinite","Generalized Hermitian-indefinite eigenvalue problem","EPSSetProblemType",&flg)); |
| 112 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_GHIEP)); |
| 113 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_bse","Structured Bethe-Salpeter eigenvalue problem","EPSSetProblemType",&flg)); |
| 114 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_BSE)); |
| 115 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroupEnd("-eps_hamiltonian","Structured Hamiltonian eigenvalue problem","EPSSetProblemType",&flg)); |
| 116 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetProblemType(eps,EPS_HAMILT)); |
| 117 | |||
| 118 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroupBegin("-eps_ritz","Rayleigh-Ritz extraction","EPSSetExtraction",&flg)); |
| 119 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_RITZ)); |
| 120 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_harmonic","Harmonic Ritz extraction","EPSSetExtraction",&flg)); |
| 121 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC)); |
| 122 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_harmonic_relative","Relative harmonic Ritz extraction","EPSSetExtraction",&flg)); |
| 123 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC_RELATIVE)); |
| 124 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_harmonic_right","Right harmonic Ritz extraction","EPSSetExtraction",&flg)); |
| 125 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC_RIGHT)); |
| 126 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_harmonic_largest","Largest harmonic Ritz extraction","EPSSetExtraction",&flg)); |
| 127 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_HARMONIC_LARGEST)); |
| 128 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_refined","Refined Ritz extraction","EPSSetExtraction",&flg)); |
| 129 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_REFINED)); |
| 130 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroupEnd("-eps_refined_harmonic","Refined harmonic Ritz extraction","EPSSetExtraction",&flg)); |
| 131 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetExtraction(eps,EPS_REFINED_HARMONIC)); |
| 132 | |||
| 133 | 6342 | bal = eps->balance; | |
| 134 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsEnum("-eps_balance","Balancing method","EPSSetBalance",EPSBalanceTypes,(PetscEnum)bal,(PetscEnum*)&bal,&flg1)); |
| 135 | 6342 | j = eps->balance_its; | |
| 136 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsInt("-eps_balance_its","Number of iterations in balancing","EPSSetBalance",eps->balance_its,&j,&flg2)); |
| 137 | 6342 | r = eps->balance_cutoff; | |
| 138 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsReal("-eps_balance_cutoff","Cutoff value in balancing","EPSSetBalance",eps->balance_cutoff,&r,&flg3)); |
| 139 |
8/12✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
6342 | if (flg1 || flg2 || flg3) PetscCall(EPSSetBalance(eps,bal,j,r)); |
| 140 | |||
| 141 | 6342 | i = eps->max_it; | |
| 142 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsInt("-eps_max_it","Maximum number of iterations","EPSSetTolerances",eps->max_it,&i,&flg1)); |
| 143 | 6342 | r = eps->tol; | |
| 144 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
10676 | PetscCall(PetscOptionsReal("-eps_tol","Tolerance","EPSSetTolerances",SlepcDefaultTol(eps->tol),&r,&flg2)); |
| 145 |
8/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
6342 | if (flg1 || flg2) PetscCall(EPSSetTolerances(eps,r,i)); |
| 146 | |||
| 147 | 6342 | r = eps->thres; | |
| 148 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsReal("-eps_threshold_absolute","Absolute threshold","EPSSetThreshold",r,&r,&flg)); |
| 149 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetThreshold(eps,r,PETSC_FALSE)); |
| 150 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsReal("-eps_threshold_relative","Relative threshold","EPSSetThreshold",r,&r,&flg)); |
| 151 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetThreshold(eps,r,PETSC_TRUE)); |
| 152 | |||
| 153 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroupBegin("-eps_conv_rel","Relative error convergence test","EPSSetConvergenceTest",&flg)); |
| 154 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_REL)); |
| 155 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_conv_norm","Convergence test relative to the eigenvalue and the matrix norms","EPSSetConvergenceTest",&flg)); |
| 156 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_NORM)); |
| 157 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_conv_abs","Absolute error convergence test","EPSSetConvergenceTest",&flg)); |
| 158 |
6/8✓ Branch 0 taken 6 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_ABS)); |
| 159 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroupEnd("-eps_conv_user","User-defined convergence test","EPSSetConvergenceTest",&flg)); |
| 160 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetConvergenceTest(eps,EPS_CONV_USER)); |
| 161 | |||
| 162 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroupBegin("-eps_stop_basic","Stop iteration if all eigenvalues converged or max_it reached","EPSSetStoppingTest",&flg)); |
| 163 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_BASIC)); |
| 164 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_stop_threshold","Stop iteration if a converged eigenvalue is below/above the threshold","EPSSetStoppingTest",&flg)); |
| 165 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_THRESHOLD)); |
| 166 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroupEnd("-eps_stop_user","User-defined stopping test","EPSSetStoppingTest",&flg)); |
| 167 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_USER)); |
| 168 | |||
| 169 | 6342 | i = eps->nev; | |
| 170 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsInt("-eps_nev","Number of eigenvalues to compute","EPSSetDimensions",eps->nev,&i,&flg1)); |
| 171 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6342 | if (!flg1) i = PETSC_CURRENT; |
| 172 | 6342 | j = eps->ncv; | |
| 173 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsInt("-eps_ncv","Number of basis vectors","EPSSetDimensions",eps->ncv,&j,&flg2)); |
| 174 | 6342 | k = eps->mpd; | |
| 175 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsInt("-eps_mpd","Maximum dimension of projected problem","EPSSetDimensions",eps->mpd,&k,&flg3)); |
| 176 |
9/12✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
6342 | if (flg1 || flg2 || flg3) PetscCall(EPSSetDimensions(eps,i,j,k)); |
| 177 | |||
| 178 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroupBegin("-eps_largest_magnitude","Compute largest eigenvalues in magnitude","EPSSetWhichEigenpairs",&flg)); |
| 179 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_MAGNITUDE)); |
| 180 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_smallest_magnitude","Compute smallest eigenvalues in magnitude","EPSSetWhichEigenpairs",&flg)); |
| 181 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_MAGNITUDE)); |
| 182 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_largest_real","Compute eigenvalues with largest real parts","EPSSetWhichEigenpairs",&flg)); |
| 183 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_REAL)); |
| 184 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_smallest_real","Compute eigenvalues with smallest real parts","EPSSetWhichEigenpairs",&flg)); |
| 185 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_REAL)); |
| 186 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_largest_imaginary","Compute eigenvalues with largest imaginary parts","EPSSetWhichEigenpairs",&flg)); |
| 187 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_IMAGINARY)); |
| 188 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_smallest_imaginary","Compute eigenvalues with smallest imaginary parts","EPSSetWhichEigenpairs",&flg)); |
| 189 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_IMAGINARY)); |
| 190 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_target_magnitude","Compute eigenvalues closest to target","EPSSetWhichEigenpairs",&flg)); |
| 191 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_MAGNITUDE)); |
| 192 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_target_real","Compute eigenvalues with real parts closest to target","EPSSetWhichEigenpairs",&flg)); |
| 193 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_REAL)); |
| 194 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_target_imaginary","Compute eigenvalues with imaginary parts closest to target","EPSSetWhichEigenpairs",&flg)); |
| 195 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_IMAGINARY)); |
| 196 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroup("-eps_all","Compute all eigenvalues in an interval or a region","EPSSetWhichEigenpairs",&flg)); |
| 197 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_ALL)); |
| 198 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBoolGroupEnd("-eps_which_user","Select the user-defined selection criterion","EPSSetWhichEigenpairs",&flg)); |
| 199 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6342 | if (flg) PetscCall(EPSSetWhichEigenpairs(eps,EPS_WHICH_USER)); |
| 200 | |||
| 201 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsScalar("-eps_target","Value of the target","EPSSetTarget",eps->target,&s,&flg)); |
| 202 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6342 | if (flg) { |
| 203 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
430 | if (eps->which!=EPS_TARGET_REAL && eps->which!=EPS_TARGET_IMAGINARY) PetscCall(EPSSetWhichEigenpairs(eps,EPS_TARGET_MAGNITUDE)); |
| 204 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
430 | PetscCall(EPSSetTarget(eps,s)); |
| 205 | } | ||
| 206 | |||
| 207 | 6342 | k = 2; | |
| 208 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsRealArray("-eps_interval","Computational interval (two real values separated with a comma without spaces)","EPSSetInterval",array,&k,&flg)); |
| 209 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6342 | if (flg) { |
| 210 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
195 | PetscCheck(k>1,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_SIZ,"Must pass two values in -eps_interval (comma-separated without spaces)"); |
| 211 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
195 | PetscCall(EPSSetWhichEigenpairs(eps,EPS_ALL)); |
| 212 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
195 | PetscCall(EPSSetInterval(eps,array[0],array[1])); |
| 213 | } | ||
| 214 | |||
| 215 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBool("-eps_true_residual","Compute true residuals explicitly","EPSSetTrueResidual",eps->trueres,&eps->trueres,NULL)); |
| 216 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBool("-eps_purify","Postprocess eigenvectors for purification","EPSSetPurify",eps->purify,&bval,&flg)); |
| 217 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetPurify(eps,bval)); |
| 218 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBool("-eps_two_sided","Use two-sided variant (to compute left eigenvectors)","EPSSetTwoSided",eps->twosided,&bval,&flg)); |
| 219 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (flg) PetscCall(EPSSetTwoSided(eps,bval)); |
| 220 | |||
| 221 | /* -----------------------------------------------------------------------*/ | ||
| 222 | /* | ||
| 223 | Cancels all monitors hardwired into code before call to EPSSetFromOptions() | ||
| 224 | */ | ||
| 225 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsBool("-eps_monitor_cancel","Remove any hardwired monitor routines","EPSMonitorCancel",PETSC_FALSE,&flg,&set)); |
| 226 |
1/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
6342 | if (set && flg) PetscCall(EPSMonitorCancel(eps)); |
| 227 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(EPSMonitorSetFromOptions(eps,"-eps_monitor","first_approximation",NULL,PETSC_FALSE)); |
| 228 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(EPSMonitorSetFromOptions(eps,"-eps_monitor_all","all_approximations",NULL,PETSC_TRUE)); |
| 229 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(EPSMonitorSetFromOptions(eps,"-eps_monitor_conv","convergence_history",NULL,PETSC_FALSE)); |
| 230 | |||
| 231 | /* -----------------------------------------------------------------------*/ | ||
| 232 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsName("-eps_view","Print detailed information on solver used","EPSView",&set)); |
| 233 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsName("-eps_view_vectors","View computed eigenvectors","EPSVectorsView",&set)); |
| 234 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsName("-eps_view_values","View computed eigenvalues","EPSValuesView",&set)); |
| 235 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsName("-eps_converged_reason","Print reason for convergence, and number of iterations","EPSConvergedReasonView",&set)); |
| 236 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsName("-eps_error_absolute","Print absolute errors of each eigenpair","EPSErrorView",&set)); |
| 237 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsName("-eps_error_relative","Print relative errors of each eigenpair","EPSErrorView",&set)); |
| 238 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscOptionsName("-eps_error_backward","Print backward errors of each eigenpair","EPSErrorView",&set)); |
| 239 | |||
| 240 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | PetscTryTypeMethod(eps,setfromoptions,PetscOptionsObject); |
| 241 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(PetscObjectProcessOptionsHandlers((PetscObject)eps,PetscOptionsObject)); |
| 242 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscOptionsEnd(); |
| 243 | |||
| 244 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (!eps->V) PetscCall(EPSGetBV(eps,&eps->V)); |
| 245 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(BVSetFromOptions(eps->V)); |
| 246 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (!eps->rg) PetscCall(EPSGetRG(eps,&eps->rg)); |
| 247 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(RGSetFromOptions(eps->rg)); |
| 248 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6342 | if (eps->useds) { |
| 249 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
5842 | if (!eps->ds) PetscCall(EPSGetDS(eps,&eps->ds)); |
| 250 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5842 | PetscCall(EPSSetDSType(eps)); |
| 251 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5842 | PetscCall(DSSetFromOptions(eps->ds)); |
| 252 | } | ||
| 253 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
6342 | if (!eps->st) PetscCall(EPSGetST(eps,&eps->st)); |
| 254 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(EPSSetDefaultST(eps)); |
| 255 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6342 | PetscCall(STSetFromOptions(eps->st)); |
| 256 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
1242 | PetscFunctionReturn(PETSC_SUCCESS); |
| 257 | } | ||
| 258 | |||
| 259 | /*@ | ||
| 260 | EPSGetTolerances - Gets the tolerance and maximum iteration count used | ||
| 261 | by the `EPS` convergence tests. | ||
| 262 | |||
| 263 | Not Collective | ||
| 264 | |||
| 265 | Input Parameter: | ||
| 266 | . eps - the linear eigensolver context | ||
| 267 | |||
| 268 | Output Parameters: | ||
| 269 | + tol - the convergence tolerance | ||
| 270 | - maxits - maximum number of iterations | ||
| 271 | |||
| 272 | Notes: | ||
| 273 | The user can specify `NULL` for any parameter that is not needed. | ||
| 274 | |||
| 275 | Level: intermediate | ||
| 276 | |||
| 277 | .seealso: [](ch:eps), `EPSSetTolerances()` | ||
| 278 | @*/ | ||
| 279 | 2816 | PetscErrorCode EPSGetTolerances(EPS eps,PetscReal *tol,PetscInt *maxits) | |
| 280 | { | ||
| 281 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2816 | PetscFunctionBegin; |
| 282 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
2816 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 283 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2816 | if (tol) *tol = eps->tol; |
| 284 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2816 | if (maxits) *maxits = eps->max_it; |
| 285 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2816 | PetscFunctionReturn(PETSC_SUCCESS); |
| 286 | } | ||
| 287 | |||
| 288 | /*@ | ||
| 289 | EPSSetTolerances - Sets the tolerance and maximum iteration count used | ||
| 290 | by the `EPS` convergence tests. | ||
| 291 | |||
| 292 | Logically Collective | ||
| 293 | |||
| 294 | Input Parameters: | ||
| 295 | + eps - the linear eigensolver context | ||
| 296 | . tol - the convergence tolerance | ||
| 297 | - maxits - maximum number of iterations to use | ||
| 298 | |||
| 299 | Options Database Keys: | ||
| 300 | + -eps_tol \<tol\> - sets the convergence tolerance | ||
| 301 | - -eps_max_it \<maxits\> - sets the maximum number of iterations allowed | ||
| 302 | |||
| 303 | Note: | ||
| 304 | Use `PETSC_CURRENT` to retain the current value of any of the parameters. | ||
| 305 | Use `PETSC_DETERMINE` for either argument to assign a default value computed | ||
| 306 | internally (may be different in each solver). | ||
| 307 | For `maxits` use `PETSC_UNLIMITED` to indicate there is no upper bound on this value. | ||
| 308 | |||
| 309 | Level: intermediate | ||
| 310 | |||
| 311 | .seealso: [](ch:eps), `EPSGetTolerances()` | ||
| 312 | @*/ | ||
| 313 | 5572 | PetscErrorCode EPSSetTolerances(EPS eps,PetscReal tol,PetscInt maxits) | |
| 314 | { | ||
| 315 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
5572 | PetscFunctionBegin; |
| 316 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
5572 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 317 |
29/66✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
|
5572 | PetscValidLogicalCollectiveReal(eps,tol,2); |
| 318 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
5572 | PetscValidLogicalCollectiveInt(eps,maxits,3); |
| 319 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5572 | if (tol == (PetscReal)PETSC_DETERMINE) { |
| 320 | 143 | eps->tol = PETSC_DETERMINE; | |
| 321 | 143 | eps->state = EPS_STATE_INITIAL; | |
| 322 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
5429 | } else if (tol != (PetscReal)PETSC_CURRENT) { |
| 323 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
5429 | PetscCheck(tol>0.0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of tol. Must be > 0"); |
| 324 | 5429 | eps->tol = tol; | |
| 325 | } | ||
| 326 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5572 | if (maxits == PETSC_DETERMINE) { |
| 327 | 1448 | eps->max_it = PETSC_DETERMINE; | |
| 328 | 1448 | eps->state = EPS_STATE_INITIAL; | |
| 329 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
4124 | } else if (maxits == PETSC_UNLIMITED) { |
| 330 | ✗ | eps->max_it = PETSC_INT_MAX; | |
| 331 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4124 | } else if (maxits != PETSC_CURRENT) { |
| 332 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2132 | PetscCheck(maxits>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of maxits. Must be > 0"); |
| 333 | 2132 | eps->max_it = maxits; | |
| 334 | } | ||
| 335 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
1101 | PetscFunctionReturn(PETSC_SUCCESS); |
| 336 | } | ||
| 337 | |||
| 338 | /*@ | ||
| 339 | EPSGetDimensions - Gets the number of eigenvalues to compute | ||
| 340 | and the dimension of the subspace. | ||
| 341 | |||
| 342 | Not Collective | ||
| 343 | |||
| 344 | Input Parameter: | ||
| 345 | . eps - the linear eigensolver context | ||
| 346 | |||
| 347 | Output Parameters: | ||
| 348 | + nev - number of eigenvalues to compute | ||
| 349 | . ncv - the maximum dimension of the subspace to be used by the solver | ||
| 350 | - mpd - the maximum dimension allowed for the projected problem | ||
| 351 | |||
| 352 | Level: intermediate | ||
| 353 | |||
| 354 | .seealso: [](ch:eps), `EPSSetDimensions()` | ||
| 355 | @*/ | ||
| 356 | 4648 | PetscErrorCode EPSGetDimensions(EPS eps,PetscInt *nev,PetscInt *ncv,PetscInt *mpd) | |
| 357 | { | ||
| 358 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4648 | PetscFunctionBegin; |
| 359 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
4648 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 360 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
6830 | if (nev) *nev = eps->nev? eps->nev: 1; |
| 361 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4648 | if (ncv) *ncv = eps->ncv; |
| 362 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4648 | if (mpd) *mpd = eps->mpd; |
| 363 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
4648 | PetscFunctionReturn(PETSC_SUCCESS); |
| 364 | } | ||
| 365 | |||
| 366 | /*@ | ||
| 367 | EPSSetDimensions - Sets the number of eigenvalues to compute | ||
| 368 | and the dimension of the subspace. | ||
| 369 | |||
| 370 | Logically Collective | ||
| 371 | |||
| 372 | Input Parameters: | ||
| 373 | + eps - the linear eigensolver context | ||
| 374 | . nev - number of eigenvalues to compute | ||
| 375 | . ncv - the maximum dimension of the subspace to be used by the solver | ||
| 376 | - mpd - the maximum dimension allowed for the projected problem | ||
| 377 | |||
| 378 | Options Database Keys: | ||
| 379 | + -eps_nev \<nev\> - sets the number of eigenvalues | ||
| 380 | . -eps_ncv \<ncv\> - sets the dimension of the subspace | ||
| 381 | - -eps_mpd \<mpd\> - sets the maximum projected dimension | ||
| 382 | |||
| 383 | Notes: | ||
| 384 | Use `PETSC_DETERMINE` for `ncv` and `mpd` to assign a reasonably good value, which is | ||
| 385 | dependent on the solution method. For any of the arguments, use `PETSC_CURRENT` | ||
| 386 | to preserve the current value. | ||
| 387 | |||
| 388 | The parameters `ncv` and `mpd` are intimately related, so that the user is advised | ||
| 389 | to set one of them at most. Normal usage is\: | ||
| 390 | |||
| 391 | 1. In cases where `nev` is small, the user sets `ncv` (a reasonable default is `2*nev`). | ||
| 392 | 2. In cases where `nev` is large, the user sets `mpd`. | ||
| 393 | |||
| 394 | The value of `ncv` should always be between `nev` and `(nev+mpd)`, typically | ||
| 395 | `ncv=nev+mpd`. If `nev` is not too large, `mpd=nev` is a reasonable choice, otherwise | ||
| 396 | a smaller value should be used. | ||
| 397 | |||
| 398 | When computing all eigenvalues in an interval, see `EPSSetInterval()`, these | ||
| 399 | parameters lose relevance, and tuning must be done with | ||
| 400 | `EPSKrylovSchurSetDimensions()`. | ||
| 401 | |||
| 402 | Level: intermediate | ||
| 403 | |||
| 404 | .seealso: [](ch:eps), `EPSGetDimensions()`, `EPSSetInterval()`, `EPSKrylovSchurSetDimensions()` | ||
| 405 | @*/ | ||
| 406 | 5966 | PetscErrorCode EPSSetDimensions(EPS eps,PetscInt nev,PetscInt ncv,PetscInt mpd) | |
| 407 | { | ||
| 408 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
5966 | PetscFunctionBegin; |
| 409 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
5966 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 410 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
5966 | PetscValidLogicalCollectiveInt(eps,nev,2); |
| 411 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
5966 | PetscValidLogicalCollectiveInt(eps,ncv,3); |
| 412 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
5966 | PetscValidLogicalCollectiveInt(eps,mpd,4); |
| 413 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5966 | if (nev != PETSC_CURRENT) { |
| 414 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
5709 | PetscCheck(nev>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of nev. Must be > 0"); |
| 415 | 5709 | eps->nev = nev; | |
| 416 | } | ||
| 417 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5966 | if (ncv == PETSC_DETERMINE) { |
| 418 | 3793 | eps->ncv = PETSC_DETERMINE; | |
| 419 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2173 | } else if (ncv != PETSC_CURRENT) { |
| 420 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2136 | PetscCheck(ncv>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of ncv. Must be > 0"); |
| 421 | 2136 | eps->ncv = ncv; | |
| 422 | } | ||
| 423 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5966 | if (mpd == PETSC_DETERMINE) { |
| 424 | 5380 | eps->mpd = PETSC_DETERMINE; | |
| 425 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
586 | } else if (mpd != PETSC_CURRENT) { |
| 426 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
543 | PetscCheck(mpd>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of mpd. Must be > 0"); |
| 427 | 543 | eps->mpd = mpd; | |
| 428 | } | ||
| 429 | 5966 | eps->state = EPS_STATE_INITIAL; | |
| 430 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
5966 | PetscFunctionReturn(PETSC_SUCCESS); |
| 431 | } | ||
| 432 | |||
| 433 | /*@ | ||
| 434 | EPSSetWhichEigenpairs - Specifies which portion of the spectrum is | ||
| 435 | to be sought. | ||
| 436 | |||
| 437 | Logically Collective | ||
| 438 | |||
| 439 | Input Parameters: | ||
| 440 | + eps - the linear eigensolver context | ||
| 441 | - which - the portion of the spectrum to be sought, see `EPSWhich` for possible values | ||
| 442 | |||
| 443 | Options Database Keys: | ||
| 444 | + -eps_largest_magnitude - sets largest eigenvalues in magnitude | ||
| 445 | . -eps_smallest_magnitude - sets smallest eigenvalues in magnitude | ||
| 446 | . -eps_largest_real - sets largest real parts | ||
| 447 | . -eps_smallest_real - sets smallest real parts | ||
| 448 | . -eps_largest_imaginary - sets largest imaginary parts | ||
| 449 | . -eps_smallest_imaginary - sets smallest imaginary parts | ||
| 450 | . -eps_target_magnitude - sets eigenvalues closest to target | ||
| 451 | . -eps_target_real - sets real parts closest to target | ||
| 452 | . -eps_target_imaginary - sets imaginary parts closest to target | ||
| 453 | . -eps_all - sets all eigenvalues in an interval or region | ||
| 454 | - -eps_which_user - select the user-defined selection criterion | ||
| 455 | |||
| 456 | Notes: | ||
| 457 | Not all eigensolvers implemented in `EPS` account for all the possible values | ||
| 458 | of `which`. Also, some values make sense only for certain types of | ||
| 459 | problems. If SLEPc is compiled for real numbers `EPS_LARGEST_IMAGINARY` | ||
| 460 | and `EPS_SMALLEST_IMAGINARY` use the absolute value of the imaginary part | ||
| 461 | for eigenvalue selection. | ||
| 462 | |||
| 463 | The target is a scalar value provided with `EPSSetTarget()`. | ||
| 464 | |||
| 465 | The criterion `EPS_TARGET_IMAGINARY` is available only in case PETSc and | ||
| 466 | SLEPc have been built with complex scalars. | ||
| 467 | |||
| 468 | `EPS_ALL` is intended for use in combination with an interval (see | ||
| 469 | `EPSSetInterval()`), when all eigenvalues within the interval are requested, | ||
| 470 | or in the context of the `EPSCISS` solver for computing all eigenvalues in a region. | ||
| 471 | |||
| 472 | Level: intermediate | ||
| 473 | |||
| 474 | .seealso: [](ch:eps), `EPSGetWhichEigenpairs()`, `EPSSetTarget()`, `EPSSetInterval()`, `EPSSetDimensions()`, `EPSSetEigenvalueComparison()`, `EPSWhich` | ||
| 475 | @*/ | ||
| 476 | 6616 | PetscErrorCode EPSSetWhichEigenpairs(EPS eps,EPSWhich which) | |
| 477 | { | ||
| 478 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
6616 | PetscFunctionBegin; |
| 479 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
6616 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 480 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
6616 | PetscValidLogicalCollectiveEnum(eps,which,2); |
| 481 |
1/3✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
|
6616 | switch (which) { |
| 482 | 6616 | case EPS_LARGEST_MAGNITUDE: | |
| 483 | case EPS_SMALLEST_MAGNITUDE: | ||
| 484 | case EPS_LARGEST_REAL: | ||
| 485 | case EPS_SMALLEST_REAL: | ||
| 486 | case EPS_LARGEST_IMAGINARY: | ||
| 487 | case EPS_SMALLEST_IMAGINARY: | ||
| 488 | case EPS_TARGET_MAGNITUDE: | ||
| 489 | case EPS_TARGET_REAL: | ||
| 490 | #if defined(PETSC_USE_COMPLEX) | ||
| 491 | case EPS_TARGET_IMAGINARY: | ||
| 492 | #endif | ||
| 493 | case EPS_ALL: | ||
| 494 | case EPS_WHICH_USER: | ||
| 495 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6616 | if (eps->which != which) { |
| 496 | 5638 | eps->state = EPS_STATE_INITIAL; | |
| 497 | 5638 | eps->which = which; | |
| 498 | } | ||
| 499 | 1316 | break; | |
| 500 | #if !defined(PETSC_USE_COMPLEX) | ||
| 501 | ✗ | case EPS_TARGET_IMAGINARY: | |
| 502 | ✗ | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_SUP,"EPS_TARGET_IMAGINARY can be used only with complex scalars"); | |
| 503 | #endif | ||
| 504 | ✗ | default: | |
| 505 | ✗ | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'which' value"); | |
| 506 | } | ||
| 507 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
1316 | PetscFunctionReturn(PETSC_SUCCESS); |
| 508 | } | ||
| 509 | |||
| 510 | /*@ | ||
| 511 | EPSGetWhichEigenpairs - Returns which portion of the spectrum is to be | ||
| 512 | sought. | ||
| 513 | |||
| 514 | Not Collective | ||
| 515 | |||
| 516 | Input Parameter: | ||
| 517 | . eps - the linear eigensolver context | ||
| 518 | |||
| 519 | Output Parameter: | ||
| 520 | . which - the portion of the spectrum to be sought, see `EPSWhich` for possible values | ||
| 521 | |||
| 522 | Level: intermediate | ||
| 523 | |||
| 524 | .seealso: [](ch:eps), `EPSSetWhichEigenpairs()`, `EPSWhich` | ||
| 525 | @*/ | ||
| 526 | 16 | PetscErrorCode EPSGetWhichEigenpairs(EPS eps,EPSWhich *which) | |
| 527 | { | ||
| 528 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16 | PetscFunctionBegin; |
| 529 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
16 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 530 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
16 | PetscAssertPointer(which,2); |
| 531 | 16 | *which = eps->which; | |
| 532 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
16 | PetscFunctionReturn(PETSC_SUCCESS); |
| 533 | } | ||
| 534 | |||
| 535 | /*@ | ||
| 536 | EPSSetThreshold - Sets the threshold used in the threshold stopping test. | ||
| 537 | |||
| 538 | Logically Collective | ||
| 539 | |||
| 540 | Input Parameters: | ||
| 541 | + eps - the linear eigensolver context | ||
| 542 | . thres - the threshold value | ||
| 543 | - rel - whether the threshold is relative or not | ||
| 544 | |||
| 545 | Options Database Keys: | ||
| 546 | + -eps_threshold_absolute \<thres\> - sets an absolute threshold | ||
| 547 | - -eps_threshold_relative \<thres\> - sets a relative threshold | ||
| 548 | |||
| 549 | Notes: | ||
| 550 | This function internally calls `EPSSetStoppingTest()` to set a special stopping | ||
| 551 | test based on the threshold, where eigenvalues are computed in sequence until | ||
| 552 | one of the computed eigenvalues is below the threshold `thres` (in magnitude). | ||
| 553 | This is the interpretation in case of searching for largest eigenvalues in magnitude, | ||
| 554 | see `EPSSetWhichEigenpairs()`. | ||
| 555 | |||
| 556 | If the solver is configured to compute smallest magnitude eigenvalues, then the | ||
| 557 | threshold must be interpreted in the opposite direction, i.e., the computation | ||
| 558 | will stop when one of the computed values is above the threshold (in magnitude). | ||
| 559 | |||
| 560 | The threshold can also be used when computing largest/smallest real eigenvalues | ||
| 561 | (i.e, rightmost or leftmost), in which case the threshold is allowed to be | ||
| 562 | negative. The solver will stop when one of the computed eigenvalues is above | ||
| 563 | or below the threshold (considering the real part of the eigenvalue). This mode | ||
| 564 | is allowed only in problem types whose eigenvalues are always real (e.g., `EPS_HEP`). | ||
| 565 | |||
| 566 | In the case of largest magnitude eigenvalues, the threshold can be made relative | ||
| 567 | with respect to the dominant eigenvalue. Otherwise, the argument `rel` should be | ||
| 568 | `PETSC_FALSE`. | ||
| 569 | |||
| 570 | An additional use case is with target magnitude selection of eigenvalues (e.g., | ||
| 571 | with shift-and-invert), but this must be used with caution to avoid unexpected | ||
| 572 | behavior. With an absolute threshold, the solver will assume that leftmost | ||
| 573 | eigenvalues are being computed (e.g., with `target`=0 for a problem with real | ||
| 574 | positive eigenvalues). In case of a relative threshold, a value of `thres`<1 | ||
| 575 | implies that the wanted eigenvalues are the largest ones, and otherwise the | ||
| 576 | solver assumes that smallest eigenvalues are being computed. | ||
| 577 | |||
| 578 | The test against the threshold is done for converged eigenvalues, which | ||
| 579 | implies that the final number of converged eigenvalues will be at least | ||
| 580 | one more than the actual number of values below/above the threshold. | ||
| 581 | |||
| 582 | Since the number of computed eigenvalues is not known a priori, the solver | ||
| 583 | will need to reallocate the basis of vectors internally, to have enough room | ||
| 584 | to accommodate all the eigenvectors. Hence, this option must be used with | ||
| 585 | caution to avoid out-of-memory problems. The recommendation is to set the value | ||
| 586 | of `ncv` to be larger than the estimated number of eigenvalues, to minimize the | ||
| 587 | number of reallocations. | ||
| 588 | |||
| 589 | If a number of wanted eigenvalues has been set with `EPSSetDimensions()` | ||
| 590 | it is also taken into account and the solver will stop when one of the two | ||
| 591 | conditions (threshold or number of converged values) is met. | ||
| 592 | |||
| 593 | Use `EPSSetStoppingTest()` to return to the usual computation of a fixed number | ||
| 594 | of eigenvalues. | ||
| 595 | |||
| 596 | Level: advanced | ||
| 597 | |||
| 598 | .seealso: [](ch:eps), `EPSGetThreshold()`, `EPSSetStoppingTest()`, `EPSSetDimensions()`, `EPSSetWhichEigenpairs()`, `EPSSetProblemType()` | ||
| 599 | @*/ | ||
| 600 | 146 | PetscErrorCode EPSSetThreshold(EPS eps,PetscReal thres,PetscBool rel) | |
| 601 | { | ||
| 602 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
146 | PetscFunctionBegin; |
| 603 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
146 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 604 |
29/66✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
|
146 | PetscValidLogicalCollectiveReal(eps,thres,2); |
| 605 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
146 | PetscValidLogicalCollectiveBool(eps,rel,3); |
| 606 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
146 | if (eps->thres != thres || eps->threlative != rel) { |
| 607 | 146 | eps->thres = thres; | |
| 608 | 146 | eps->threlative = rel; | |
| 609 | 146 | eps->state = EPS_STATE_INITIAL; | |
| 610 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
146 | PetscCall(EPSSetStoppingTest(eps,EPS_STOP_THRESHOLD)); |
| 611 | } | ||
| 612 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
34 | PetscFunctionReturn(PETSC_SUCCESS); |
| 613 | } | ||
| 614 | |||
| 615 | /*@ | ||
| 616 | EPSGetThreshold - Gets the threshold used by the threshold stopping test. | ||
| 617 | |||
| 618 | Not Collective | ||
| 619 | |||
| 620 | Input Parameter: | ||
| 621 | . eps - the linear eigensolver context | ||
| 622 | |||
| 623 | Output Parameters: | ||
| 624 | + thres - the threshold | ||
| 625 | - rel - whether the threshold is relative or not | ||
| 626 | |||
| 627 | Level: advanced | ||
| 628 | |||
| 629 | .seealso: [](ch:eps), `EPSSetThreshold()` | ||
| 630 | @*/ | ||
| 631 | 50 | PetscErrorCode EPSGetThreshold(EPS eps,PetscReal *thres,PetscBool *rel) | |
| 632 | { | ||
| 633 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
50 | PetscFunctionBegin; |
| 634 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
50 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 635 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
50 | if (thres) *thres = eps->thres; |
| 636 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
50 | if (rel) *rel = eps->threlative; |
| 637 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
50 | PetscFunctionReturn(PETSC_SUCCESS); |
| 638 | } | ||
| 639 | |||
| 640 | /*@C | ||
| 641 | EPSSetEigenvalueComparison - Specifies the eigenvalue comparison function | ||
| 642 | when `EPSSetWhichEigenpairs()` is set to `EPS_WHICH_USER`. | ||
| 643 | |||
| 644 | Logically Collective | ||
| 645 | |||
| 646 | Input Parameters: | ||
| 647 | + eps - the linear eigensolver context | ||
| 648 | . func - the comparison function, see `SlepcEigenvalueComparisonFn` for the calling sequence | ||
| 649 | - ctx - a context pointer (the last parameter to the comparison function) | ||
| 650 | |||
| 651 | Level: advanced | ||
| 652 | |||
| 653 | .seealso: [](ch:eps), `EPSSetWhichEigenpairs()`, `EPSWhich` | ||
| 654 | @*/ | ||
| 655 | 382 | PetscErrorCode EPSSetEigenvalueComparison(EPS eps,SlepcEigenvalueComparisonFn *func,void *ctx) | |
| 656 | { | ||
| 657 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
382 | PetscFunctionBegin; |
| 658 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
382 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 659 | 382 | eps->sc->comparison = func; | |
| 660 | 382 | eps->sc->comparisonctx = ctx; | |
| 661 | 382 | eps->which = EPS_WHICH_USER; | |
| 662 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
382 | PetscFunctionReturn(PETSC_SUCCESS); |
| 663 | } | ||
| 664 | |||
| 665 | /*@C | ||
| 666 | EPSSetArbitrarySelection - Specifies a function intended to look for | ||
| 667 | eigenvalues according to an arbitrary selection criterion. This criterion | ||
| 668 | can be based on a computation involving the current eigenvector approximation. | ||
| 669 | |||
| 670 | Logically Collective | ||
| 671 | |||
| 672 | Input Parameters: | ||
| 673 | + eps - the linear eigensolver context | ||
| 674 | . func - the arbitrary selection function, see `SlepcArbitrarySelectionFn` for a calling sequence | ||
| 675 | - ctx - a context pointer (the last parameter to the arbitrary selection function) | ||
| 676 | |||
| 677 | Notes: | ||
| 678 | This provides a mechanism to select eigenpairs by evaluating a user-defined | ||
| 679 | function. When a function has been provided, the default selection based on | ||
| 680 | sorting the eigenvalues is replaced by the sorting of the results of this | ||
| 681 | function (with the same sorting criterion given in `EPSSetWhichEigenpairs()`). | ||
| 682 | |||
| 683 | For instance, suppose you want to compute those eigenvectors that maximize | ||
| 684 | a certain computable expression. Then implement the computation using | ||
| 685 | the arguments `xr` and `xi`, and return the result in `rr`. Then set the standard | ||
| 686 | sorting by magnitude so that the eigenpair with largest value of `rr` is | ||
| 687 | selected. | ||
| 688 | |||
| 689 | This evaluation function is collective, that is, all processes call it and | ||
| 690 | it can use collective operations; furthermore, the computed result must | ||
| 691 | be the same in all processes. | ||
| 692 | |||
| 693 | The result of `func` is expressed as a complex number so that it is possible to | ||
| 694 | use the standard eigenvalue sorting functions, but normally only `rr` is used. | ||
| 695 | Set `ri` to zero unless it is meaningful in your application. | ||
| 696 | |||
| 697 | Level: advanced | ||
| 698 | |||
| 699 | .seealso: [](ch:eps), `EPSSetWhichEigenpairs()` | ||
| 700 | @*/ | ||
| 701 | 82 | PetscErrorCode EPSSetArbitrarySelection(EPS eps,SlepcArbitrarySelectionFn *func,void *ctx) | |
| 702 | { | ||
| 703 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
82 | PetscFunctionBegin; |
| 704 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
82 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 705 | 82 | eps->arbitrary = func; | |
| 706 | 82 | eps->arbitraryctx = ctx; | |
| 707 | 82 | eps->state = EPS_STATE_INITIAL; | |
| 708 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
82 | PetscFunctionReturn(PETSC_SUCCESS); |
| 709 | } | ||
| 710 | |||
| 711 | /*@C | ||
| 712 | EPSSetConvergenceTestFunction - Sets a function to compute the error estimate | ||
| 713 | used in the convergence test. | ||
| 714 | |||
| 715 | Logically Collective | ||
| 716 | |||
| 717 | Input Parameters: | ||
| 718 | + eps - the linear eigensolver context | ||
| 719 | . func - convergence test function, see `EPSConvergenceTestFn` for the calling sequence | ||
| 720 | . ctx - context for private data for the convergence routine (may be `NULL`) | ||
| 721 | - destroy - a routine for destroying the context (may be `NULL`), see `PetscCtxDestroyFn` | ||
| 722 | for the calling sequence | ||
| 723 | |||
| 724 | Notes: | ||
| 725 | When this is called with a user-defined function, then the convergence | ||
| 726 | criterion is set to `EPS_CONV_USER`, see `EPSSetConvergenceTest()`. | ||
| 727 | |||
| 728 | If the error estimate returned by the convergence test function is less than | ||
| 729 | the tolerance, then the eigenvalue is accepted as converged. | ||
| 730 | |||
| 731 | Level: advanced | ||
| 732 | |||
| 733 | .seealso: [](ch:eps), `EPSSetConvergenceTest()`, `EPSSetTolerances()` | ||
| 734 | @*/ | ||
| 735 | 391 | PetscErrorCode EPSSetConvergenceTestFunction(EPS eps,EPSConvergenceTestFn *func,void *ctx,PetscCtxDestroyFn *destroy) | |
| 736 | { | ||
| 737 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
391 | PetscFunctionBegin; |
| 738 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
391 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 739 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
391 | if (eps->convergeddestroy) PetscCall((*eps->convergeddestroy)(&eps->convergedctx)); |
| 740 | 391 | eps->convergeduser = func; | |
| 741 | 391 | eps->convergeddestroy = destroy; | |
| 742 | 391 | eps->convergedctx = ctx; | |
| 743 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
391 | if (func == EPSConvergedRelative) eps->conv = EPS_CONV_REL; |
| 744 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
391 | else if (func == EPSConvergedNorm) eps->conv = EPS_CONV_NORM; |
| 745 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
391 | else if (func == EPSConvergedAbsolute) eps->conv = EPS_CONV_ABS; |
| 746 | else { | ||
| 747 | 391 | eps->conv = EPS_CONV_USER; | |
| 748 | 391 | eps->converged = eps->convergeduser; | |
| 749 | } | ||
| 750 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
73 | PetscFunctionReturn(PETSC_SUCCESS); |
| 751 | } | ||
| 752 | |||
| 753 | /*@ | ||
| 754 | EPSSetConvergenceTest - Specifies how to compute the error estimate | ||
| 755 | used in the convergence test. | ||
| 756 | |||
| 757 | Logically Collective | ||
| 758 | |||
| 759 | Input Parameters: | ||
| 760 | + eps - the linear eigensolver context | ||
| 761 | - conv - the type of convergence test, see `EPSConv` for possible values | ||
| 762 | |||
| 763 | Options Database Keys: | ||
| 764 | + -eps_conv_abs - sets the absolute convergence test | ||
| 765 | . -eps_conv_rel - sets the convergence test relative to the eigenvalue | ||
| 766 | . -eps_conv_norm - sets the convergence test relative to the matrix norms | ||
| 767 | - -eps_conv_user - selects the user-defined convergence test | ||
| 768 | |||
| 769 | Level: intermediate | ||
| 770 | |||
| 771 | .seealso: [](ch:eps), `EPSGetConvergenceTest()`, `EPSSetConvergenceTestFunction()`, `EPSSetStoppingTest()`, `EPSConv` | ||
| 772 | @*/ | ||
| 773 | 1718 | PetscErrorCode EPSSetConvergenceTest(EPS eps,EPSConv conv) | |
| 774 | { | ||
| 775 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1718 | PetscFunctionBegin; |
| 776 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1718 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 777 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
1718 | PetscValidLogicalCollectiveEnum(eps,conv,2); |
| 778 |
3/5✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
|
1718 | switch (conv) { |
| 779 | 277 | case EPS_CONV_ABS: eps->converged = EPSConvergedAbsolute; break; | |
| 780 | 875 | case EPS_CONV_REL: eps->converged = EPSConvergedRelative; break; | |
| 781 | 566 | case EPS_CONV_NORM: eps->converged = EPSConvergedNorm; break; | |
| 782 | ✗ | case EPS_CONV_USER: | |
| 783 | ✗ | PetscCheck(eps->convergeduser,PetscObjectComm((PetscObject)eps),PETSC_ERR_ORDER,"Must call EPSSetConvergenceTestFunction() first"); | |
| 784 | ✗ | eps->converged = eps->convergeduser; | |
| 785 | ✗ | break; | |
| 786 | ✗ | default: | |
| 787 | ✗ | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'conv' value"); | |
| 788 | } | ||
| 789 | 1718 | eps->conv = conv; | |
| 790 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
1718 | PetscFunctionReturn(PETSC_SUCCESS); |
| 791 | } | ||
| 792 | |||
| 793 | /*@ | ||
| 794 | EPSGetConvergenceTest - Gets the method used to compute the error estimate | ||
| 795 | used in the convergence test. | ||
| 796 | |||
| 797 | Not Collective | ||
| 798 | |||
| 799 | Input Parameter: | ||
| 800 | . eps - the linear eigensolver context | ||
| 801 | |||
| 802 | Output Parameter: | ||
| 803 | . conv - the type of convergence test | ||
| 804 | |||
| 805 | Level: intermediate | ||
| 806 | |||
| 807 | .seealso: [](ch:eps), `EPSSetConvergenceTest()`, `EPSConv` | ||
| 808 | @*/ | ||
| 809 | 16 | PetscErrorCode EPSGetConvergenceTest(EPS eps,EPSConv *conv) | |
| 810 | { | ||
| 811 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16 | PetscFunctionBegin; |
| 812 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
16 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 813 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
16 | PetscAssertPointer(conv,2); |
| 814 | 16 | *conv = eps->conv; | |
| 815 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
16 | PetscFunctionReturn(PETSC_SUCCESS); |
| 816 | } | ||
| 817 | |||
| 818 | /*@C | ||
| 819 | EPSSetStoppingTestFunction - Sets a function to decide when to stop the outer | ||
| 820 | iteration of the eigensolver. | ||
| 821 | |||
| 822 | Logically Collective | ||
| 823 | |||
| 824 | Input Parameters: | ||
| 825 | + eps - the linear eigensolver context | ||
| 826 | . func - stopping test function, see `EPSStoppingTestFn` for the calling sequence | ||
| 827 | . ctx - context for private data for the stopping routine (may be `NULL`) | ||
| 828 | - destroy - a routine for destroying the context (may be `NULL`), see `PetscCtxDestroyFn` | ||
| 829 | for the calling sequence | ||
| 830 | |||
| 831 | Note: | ||
| 832 | When implementing a function for this, normal usage is to first call the | ||
| 833 | default routine `EPSStoppingBasic()` and then set `reason` to `EPS_CONVERGED_USER` | ||
| 834 | if some user-defined conditions have been met. To let the eigensolver continue | ||
| 835 | iterating, the result must be left as `EPS_CONVERGED_ITERATING`. | ||
| 836 | |||
| 837 | Level: advanced | ||
| 838 | |||
| 839 | .seealso: [](ch:eps), `EPSSetStoppingTest()`, `EPSStoppingBasic()` | ||
| 840 | @*/ | ||
| 841 | 166 | PetscErrorCode EPSSetStoppingTestFunction(EPS eps,EPSStoppingTestFn *func,void *ctx,PetscCtxDestroyFn *destroy) | |
| 842 | { | ||
| 843 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
166 | PetscFunctionBegin; |
| 844 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
166 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 845 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
166 | if (eps->stoppingdestroy) PetscCall((*eps->stoppingdestroy)(&eps->stoppingctx)); |
| 846 | 166 | eps->stoppinguser = func; | |
| 847 | 166 | eps->stoppingdestroy = destroy; | |
| 848 | 166 | eps->stoppingctx = ctx; | |
| 849 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
166 | if (func == EPSStoppingBasic) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_BASIC)); |
| 850 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
166 | else if (func == EPSStoppingThreshold) PetscCall(EPSSetStoppingTest(eps,EPS_STOP_THRESHOLD)); |
| 851 | else { | ||
| 852 | 20 | eps->stop = EPS_STOP_USER; | |
| 853 | 20 | eps->stopping = eps->stoppinguser; | |
| 854 | } | ||
| 855 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
38 | PetscFunctionReturn(PETSC_SUCCESS); |
| 856 | } | ||
| 857 | |||
| 858 | /*@ | ||
| 859 | EPSSetStoppingTest - Specifies how to decide the termination of the outer | ||
| 860 | loop of the eigensolver. | ||
| 861 | |||
| 862 | Logically Collective | ||
| 863 | |||
| 864 | Input Parameters: | ||
| 865 | + eps - the linear eigensolver context | ||
| 866 | - stop - the type of stopping test, see `EPSStop` | ||
| 867 | |||
| 868 | Options Database Keys: | ||
| 869 | + -eps_stop_basic - sets the default stopping test | ||
| 870 | . -eps_stop_threshold - sets the threshold stopping test | ||
| 871 | - -eps_stop_user - selects the user-defined stopping test | ||
| 872 | |||
| 873 | Level: advanced | ||
| 874 | |||
| 875 | .seealso: [](ch:eps), `EPSGetStoppingTest()`, `EPSSetStoppingTestFunction()`, `EPSSetConvergenceTest()`, `EPSStop` | ||
| 876 | @*/ | ||
| 877 | 308 | PetscErrorCode EPSSetStoppingTest(EPS eps,EPSStop stop) | |
| 878 | { | ||
| 879 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
308 | PetscFunctionBegin; |
| 880 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
308 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 881 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
308 | PetscValidLogicalCollectiveEnum(eps,stop,2); |
| 882 |
2/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
308 | switch (stop) { |
| 883 | 16 | case EPS_STOP_BASIC: eps->stopping = EPSStoppingBasic; break; | |
| 884 | 292 | case EPS_STOP_THRESHOLD: eps->stopping = EPSStoppingThreshold; break; | |
| 885 | ✗ | case EPS_STOP_USER: | |
| 886 | ✗ | PetscCheck(eps->stoppinguser,PetscObjectComm((PetscObject)eps),PETSC_ERR_ORDER,"Must call EPSSetStoppingTestFunction() first"); | |
| 887 | ✗ | eps->stopping = eps->stoppinguser; | |
| 888 | ✗ | break; | |
| 889 | ✗ | default: | |
| 890 | ✗ | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'stop' value"); | |
| 891 | } | ||
| 892 | 308 | eps->stop = stop; | |
| 893 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
308 | PetscFunctionReturn(PETSC_SUCCESS); |
| 894 | } | ||
| 895 | |||
| 896 | /*@ | ||
| 897 | EPSGetStoppingTest - Gets the method used to decide the termination of the outer | ||
| 898 | loop of the eigensolver. | ||
| 899 | |||
| 900 | Not Collective | ||
| 901 | |||
| 902 | Input Parameter: | ||
| 903 | . eps - the linear eigensolver context | ||
| 904 | |||
| 905 | Output Parameter: | ||
| 906 | . stop - the type of stopping test | ||
| 907 | |||
| 908 | Level: advanced | ||
| 909 | |||
| 910 | .seealso: [](ch:eps), `EPSSetStoppingTest()`, `EPSStop` | ||
| 911 | @*/ | ||
| 912 | 284 | PetscErrorCode EPSGetStoppingTest(EPS eps,EPSStop *stop) | |
| 913 | { | ||
| 914 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
284 | PetscFunctionBegin; |
| 915 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
284 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 916 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
284 | PetscAssertPointer(stop,2); |
| 917 | 284 | *stop = eps->stop; | |
| 918 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
284 | PetscFunctionReturn(PETSC_SUCCESS); |
| 919 | } | ||
| 920 | |||
| 921 | /*@ | ||
| 922 | EPSSetProblemType - Specifies the type of the eigenvalue problem. | ||
| 923 | |||
| 924 | Logically Collective | ||
| 925 | |||
| 926 | Input Parameters: | ||
| 927 | + eps - the linear eigensolver context | ||
| 928 | - type - a known type of eigenvalue problem | ||
| 929 | |||
| 930 | Options Database Keys: | ||
| 931 | + -eps_hermitian - Hermitian eigenvalue problem | ||
| 932 | . -eps_gen_hermitian - generalized Hermitian eigenvalue problem | ||
| 933 | . -eps_non_hermitian - non-Hermitian eigenvalue problem | ||
| 934 | . -eps_gen_non_hermitian - generalized non-Hermitian eigenvalue problem | ||
| 935 | . -eps_pos_gen_non_hermitian - generalized non-Hermitian eigenvalue problem | ||
| 936 | with positive semi-definite $B$ | ||
| 937 | . -eps_gen_indefinite - generalized Hermitian-indefinite eigenvalue problem | ||
| 938 | . -eps_bse - structured Bethe-Salpeter eigenvalue problem | ||
| 939 | - -eps_hamiltonian - structured Hamiltonian eigenvalue problem | ||
| 940 | |||
| 941 | Notes: | ||
| 942 | This function must be used to instruct SLEPc to exploit symmetry or other | ||
| 943 | kind of structure. If no | ||
| 944 | problem type is specified, by default a non-Hermitian problem is assumed | ||
| 945 | (either standard or generalized). If the user knows that the problem is | ||
| 946 | Hermitian (i.e., $A=A^*$) or generalized Hermitian (i.e., $A=A^*$, $B=B^*$, | ||
| 947 | and $B$ positive definite) then it is recommended to set the problem type so | ||
| 948 | that the eigensolver can exploit these properties. | ||
| 949 | |||
| 950 | If the user does not call this function, the solver will use a reasonable | ||
| 951 | guess. | ||
| 952 | |||
| 953 | For structured problem types such as `EPS_BSE`, the matrices passed in via | ||
| 954 | `EPSSetOperators()` must have been created with the corresponding helper | ||
| 955 | function, i.e., `MatCreateBSE()`. | ||
| 956 | |||
| 957 | Level: intermediate | ||
| 958 | |||
| 959 | .seealso: [](ch:eps), `EPSSetOperators()`, `EPSSetType()`, `EPSGetProblemType()`, `EPSProblemType` | ||
| 960 | @*/ | ||
| 961 | 7437 | PetscErrorCode EPSSetProblemType(EPS eps,EPSProblemType type) | |
| 962 | { | ||
| 963 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
7437 | PetscFunctionBegin; |
| 964 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
7437 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 965 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
7437 | PetscValidLogicalCollectiveEnum(eps,type,2); |
| 966 |
8/14✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
7437 | if (type == eps->problem_type) PetscFunctionReturn(PETSC_SUCCESS); |
| 967 |
8/9✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 8 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 10 times.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
|
7169 | switch (type) { |
| 968 | 2732 | case EPS_HEP: | |
| 969 | 2732 | eps->isgeneralized = PETSC_FALSE; | |
| 970 | 2732 | eps->ishermitian = PETSC_TRUE; | |
| 971 | 2732 | eps->ispositive = PETSC_FALSE; | |
| 972 | 2732 | eps->isstructured = PETSC_FALSE; | |
| 973 | 2732 | break; | |
| 974 | 1720 | case EPS_NHEP: | |
| 975 | 1720 | eps->isgeneralized = PETSC_FALSE; | |
| 976 | 1720 | eps->ishermitian = PETSC_FALSE; | |
| 977 | 1720 | eps->ispositive = PETSC_FALSE; | |
| 978 | 1720 | eps->isstructured = PETSC_FALSE; | |
| 979 | 1720 | break; | |
| 980 | 1399 | case EPS_GHEP: | |
| 981 | 1399 | eps->isgeneralized = PETSC_TRUE; | |
| 982 | 1399 | eps->ishermitian = PETSC_TRUE; | |
| 983 | 1399 | eps->ispositive = PETSC_TRUE; | |
| 984 | 1399 | eps->isstructured = PETSC_FALSE; | |
| 985 | 1399 | break; | |
| 986 | 703 | case EPS_GNHEP: | |
| 987 | 703 | eps->isgeneralized = PETSC_TRUE; | |
| 988 | 703 | eps->ishermitian = PETSC_FALSE; | |
| 989 | 703 | eps->ispositive = PETSC_FALSE; | |
| 990 | 703 | eps->isstructured = PETSC_FALSE; | |
| 991 | 703 | break; | |
| 992 | 31 | case EPS_PGNHEP: | |
| 993 | 31 | eps->isgeneralized = PETSC_TRUE; | |
| 994 | 31 | eps->ishermitian = PETSC_FALSE; | |
| 995 | 31 | eps->ispositive = PETSC_TRUE; | |
| 996 | 31 | eps->isstructured = PETSC_FALSE; | |
| 997 | 31 | break; | |
| 998 | 155 | case EPS_GHIEP: | |
| 999 | 155 | eps->isgeneralized = PETSC_TRUE; | |
| 1000 | 155 | eps->ishermitian = PETSC_TRUE; | |
| 1001 | 155 | eps->ispositive = PETSC_FALSE; | |
| 1002 | 155 | eps->isstructured = PETSC_FALSE; | |
| 1003 | 155 | break; | |
| 1004 | 334 | case EPS_BSE: | |
| 1005 | 334 | eps->isgeneralized = PETSC_FALSE; | |
| 1006 | 334 | eps->ishermitian = PETSC_FALSE; | |
| 1007 | 334 | eps->ispositive = PETSC_FALSE; | |
| 1008 | 334 | eps->isstructured = PETSC_TRUE; | |
| 1009 | 334 | break; | |
| 1010 | 95 | case EPS_HAMILT: | |
| 1011 | 95 | eps->isgeneralized = PETSC_FALSE; | |
| 1012 | 95 | eps->ishermitian = PETSC_FALSE; | |
| 1013 | 95 | eps->ispositive = PETSC_FALSE; | |
| 1014 | 95 | eps->isstructured = PETSC_TRUE; | |
| 1015 | 95 | break; | |
| 1016 | ✗ | default: | |
| 1017 | ✗ | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_WRONG,"Unknown eigenvalue problem type"); | |
| 1018 | } | ||
| 1019 | 7169 | eps->problem_type = type; | |
| 1020 | 7169 | eps->state = EPS_STATE_INITIAL; | |
| 1021 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
7169 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1022 | } | ||
| 1023 | |||
| 1024 | /*@ | ||
| 1025 | EPSGetProblemType - Gets the problem type from the `EPS` object. | ||
| 1026 | |||
| 1027 | Not Collective | ||
| 1028 | |||
| 1029 | Input Parameter: | ||
| 1030 | . eps - the linear eigensolver context | ||
| 1031 | |||
| 1032 | Output Parameter: | ||
| 1033 | . type - the problem type | ||
| 1034 | |||
| 1035 | Level: intermediate | ||
| 1036 | |||
| 1037 | .seealso: [](ch:eps), `EPSSetProblemType()`, `EPSProblemType` | ||
| 1038 | @*/ | ||
| 1039 | 790 | PetscErrorCode EPSGetProblemType(EPS eps,EPSProblemType *type) | |
| 1040 | { | ||
| 1041 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
790 | PetscFunctionBegin; |
| 1042 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
790 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1043 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
790 | PetscAssertPointer(type,2); |
| 1044 | 790 | *type = eps->problem_type; | |
| 1045 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
790 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1046 | } | ||
| 1047 | |||
| 1048 | /*@ | ||
| 1049 | EPSSetExtraction - Specifies the type of extraction technique to be employed | ||
| 1050 | by the eigensolver. | ||
| 1051 | |||
| 1052 | Logically Collective | ||
| 1053 | |||
| 1054 | Input Parameters: | ||
| 1055 | + eps - the linear eigensolver context | ||
| 1056 | - extr - a known type of extraction | ||
| 1057 | |||
| 1058 | Options Database Keys: | ||
| 1059 | + -eps_ritz - Rayleigh-Ritz extraction | ||
| 1060 | . -eps_harmonic - harmonic Ritz extraction | ||
| 1061 | . -eps_harmonic_relative - harmonic Ritz extraction relative to the eigenvalue | ||
| 1062 | . -eps_harmonic_right - harmonic Ritz extraction for rightmost eigenvalues | ||
| 1063 | . -eps_harmonic_largest - harmonic Ritz extraction for largest magnitude (without target) | ||
| 1064 | . -eps_refined - refined Ritz extraction | ||
| 1065 | - -eps_refined_harmonic - refined harmonic Ritz extraction | ||
| 1066 | |||
| 1067 | Notes: | ||
| 1068 | Not all eigensolvers support all types of extraction. | ||
| 1069 | |||
| 1070 | By default, a standard Rayleigh-Ritz extraction is used. Other extractions | ||
| 1071 | may be useful when computing interior eigenvalues. | ||
| 1072 | |||
| 1073 | Harmonic-type extractions are used in combination with a target, see `EPSSetTarget()`. | ||
| 1074 | |||
| 1075 | Level: advanced | ||
| 1076 | |||
| 1077 | .seealso: [](ch:eps), [](#sec:harmonic), `EPSSetTarget()`, `EPSGetExtraction()`, `EPSExtraction` | ||
| 1078 | @*/ | ||
| 1079 | 142 | PetscErrorCode EPSSetExtraction(EPS eps,EPSExtraction extr) | |
| 1080 | { | ||
| 1081 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
142 | PetscFunctionBegin; |
| 1082 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
142 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1083 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
142 | PetscValidLogicalCollectiveEnum(eps,extr,2); |
| 1084 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
142 | if (eps->extraction != extr) { |
| 1085 | 142 | eps->state = EPS_STATE_INITIAL; | |
| 1086 | 142 | eps->extraction = extr; | |
| 1087 | } | ||
| 1088 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
142 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1089 | } | ||
| 1090 | |||
| 1091 | /*@ | ||
| 1092 | EPSGetExtraction - Gets the extraction type used by the `EPS` object. | ||
| 1093 | |||
| 1094 | Not Collective | ||
| 1095 | |||
| 1096 | Input Parameter: | ||
| 1097 | . eps - the linear eigensolver context | ||
| 1098 | |||
| 1099 | Output Parameter: | ||
| 1100 | . extr - name of extraction type | ||
| 1101 | |||
| 1102 | Level: advanced | ||
| 1103 | |||
| 1104 | .seealso: [](ch:eps), `EPSSetExtraction()`, `EPSExtraction` | ||
| 1105 | @*/ | ||
| 1106 | 32 | PetscErrorCode EPSGetExtraction(EPS eps,EPSExtraction *extr) | |
| 1107 | { | ||
| 1108 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
32 | PetscFunctionBegin; |
| 1109 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
32 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1110 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
32 | PetscAssertPointer(extr,2); |
| 1111 | 32 | *extr = eps->extraction; | |
| 1112 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
32 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1113 | } | ||
| 1114 | |||
| 1115 | /*@ | ||
| 1116 | EPSSetBalance - Specifies the balancing technique to be employed by the | ||
| 1117 | eigensolver, and some parameters associated to it. | ||
| 1118 | |||
| 1119 | Logically Collective | ||
| 1120 | |||
| 1121 | Input Parameters: | ||
| 1122 | + eps - the linear eigensolver context | ||
| 1123 | . bal - the balancing method, see `EPSBalance` for possible values | ||
| 1124 | . its - number of iterations of the balancing algorithm | ||
| 1125 | - cutoff - cutoff value | ||
| 1126 | |||
| 1127 | Options Database Keys: | ||
| 1128 | + -eps_balance \<bal\> - the balancing method, one of `none`, `oneside`, `twoside`, or `user` | ||
| 1129 | . -eps_balance_its \<its\> - number of iterations | ||
| 1130 | - -eps_balance_cutoff \<cutoff\> - cutoff value | ||
| 1131 | |||
| 1132 | Notes: | ||
| 1133 | When balancing is enabled, the solver works implicitly with matrix $DAD^{-1}$, | ||
| 1134 | where $D$ is an appropriate diagonal matrix. This improves the accuracy of | ||
| 1135 | the computed results in some cases, see [](sec:balancing). | ||
| 1136 | |||
| 1137 | Balancing makes sense only for non-Hermitian problems when the required | ||
| 1138 | precision is high (i.e., a small tolerance such as `1e-14`). | ||
| 1139 | |||
| 1140 | By default, balancing is disabled. The two-sided method is much more | ||
| 1141 | effective than the one-sided counterpart, but it requires the system | ||
| 1142 | matrices to have the `MatMultTranspose()` operation defined. The methods | ||
| 1143 | are described in {cite:p}`Che00`. | ||
| 1144 | |||
| 1145 | The parameter `its` is the number of iterations performed by the method. The | ||
| 1146 | `cutoff` value is used only in the two-side variant. Use `PETSC_DETERMINE` to assign | ||
| 1147 | a reasonably good value, or `PETSC_CURRENT` to leave the value unchanged. | ||
| 1148 | |||
| 1149 | User-defined balancing is allowed provided that the corresponding matrix | ||
| 1150 | is set via `STSetBalanceMatrix()`. | ||
| 1151 | |||
| 1152 | Level: intermediate | ||
| 1153 | |||
| 1154 | .seealso: [](ch:eps), [](sec:balancing), `EPSGetBalance()`, `EPSBalance`, `STSetBalanceMatrix()` | ||
| 1155 | @*/ | ||
| 1156 | 166 | PetscErrorCode EPSSetBalance(EPS eps,EPSBalance bal,PetscInt its,PetscReal cutoff) | |
| 1157 | { | ||
| 1158 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
166 | PetscFunctionBegin; |
| 1159 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
166 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1160 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
166 | PetscValidLogicalCollectiveEnum(eps,bal,2); |
| 1161 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
166 | PetscValidLogicalCollectiveInt(eps,its,3); |
| 1162 |
29/66✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
|
166 | PetscValidLogicalCollectiveReal(eps,cutoff,4); |
| 1163 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
166 | switch (bal) { |
| 1164 | 166 | case EPS_BALANCE_NONE: | |
| 1165 | case EPS_BALANCE_ONESIDE: | ||
| 1166 | case EPS_BALANCE_TWOSIDE: | ||
| 1167 | case EPS_BALANCE_USER: | ||
| 1168 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
166 | if (eps->balance != bal) { |
| 1169 | 146 | eps->state = EPS_STATE_INITIAL; | |
| 1170 | 146 | eps->balance = bal; | |
| 1171 | } | ||
| 1172 | 166 | break; | |
| 1173 | ✗ | default: | |
| 1174 | ✗ | SETERRQ(PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Invalid value of argument 'bal'"); | |
| 1175 | } | ||
| 1176 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
166 | if (its==PETSC_DETERMINE) eps->balance_its = 5; |
| 1177 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
166 | else if (its!=PETSC_CURRENT) { |
| 1178 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
166 | PetscCheck(its>0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of its. Must be > 0"); |
| 1179 | 166 | eps->balance_its = its; | |
| 1180 | } | ||
| 1181 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
166 | if (cutoff==(PetscReal)PETSC_DETERMINE) eps->balance_cutoff = 1e-8; |
| 1182 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
166 | else if (cutoff!=(PetscReal)PETSC_CURRENT) { |
| 1183 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
166 | PetscCheck(cutoff>0.0,PetscObjectComm((PetscObject)eps),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of cutoff. Must be > 0"); |
| 1184 | 166 | eps->balance_cutoff = cutoff; | |
| 1185 | } | ||
| 1186 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
32 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1187 | } | ||
| 1188 | |||
| 1189 | /*@ | ||
| 1190 | EPSGetBalance - Gets the balancing type used by the `EPS` object, and the | ||
| 1191 | associated parameters. | ||
| 1192 | |||
| 1193 | Not Collective | ||
| 1194 | |||
| 1195 | Input Parameter: | ||
| 1196 | . eps - the linear eigensolver context | ||
| 1197 | |||
| 1198 | Output Parameters: | ||
| 1199 | + bal - the balancing method | ||
| 1200 | . its - number of iterations of the balancing algorithm | ||
| 1201 | - cutoff - cutoff value | ||
| 1202 | |||
| 1203 | Level: intermediate | ||
| 1204 | |||
| 1205 | Note: | ||
| 1206 | The user can specify `NULL` for any parameter that is not needed. | ||
| 1207 | |||
| 1208 | .seealso: [](ch:eps), `EPSSetBalance()`, `EPSBalance` | ||
| 1209 | @*/ | ||
| 1210 | 16 | PetscErrorCode EPSGetBalance(EPS eps,EPSBalance *bal,PetscInt *its,PetscReal *cutoff) | |
| 1211 | { | ||
| 1212 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16 | PetscFunctionBegin; |
| 1213 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
16 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1214 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
16 | if (bal) *bal = eps->balance; |
| 1215 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
16 | if (its) *its = eps->balance_its; |
| 1216 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
16 | if (cutoff) *cutoff = eps->balance_cutoff; |
| 1217 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
16 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1218 | } | ||
| 1219 | |||
| 1220 | /*@ | ||
| 1221 | EPSSetTwoSided - Sets the solver to use a two-sided variant so that left | ||
| 1222 | eigenvectors are also computed. | ||
| 1223 | |||
| 1224 | Logically Collective | ||
| 1225 | |||
| 1226 | Input Parameters: | ||
| 1227 | + eps - the linear eigensolver context | ||
| 1228 | - twosided - whether the two-sided variant is to be used or not | ||
| 1229 | |||
| 1230 | Options Database Key: | ||
| 1231 | . -eps_two_sided - toggles the twosided flag | ||
| 1232 | |||
| 1233 | Notes: | ||
| 1234 | If the user sets `twosided`=`PETSC_TRUE` then the solver uses a variant of | ||
| 1235 | the algorithm that computes both right and left eigenvectors. This is | ||
| 1236 | usually much more costly. This option is not available in all solvers, | ||
| 1237 | see table [](#tab:support). | ||
| 1238 | |||
| 1239 | When using two-sided solvers, the problem matrices must have both the | ||
| 1240 | `MATOP_MULT` and `MATOP_MULT_TRANSPOSE` operations defined. | ||
| 1241 | |||
| 1242 | Level: advanced | ||
| 1243 | |||
| 1244 | .seealso: [](ch:eps), `EPSGetTwoSided()`, `EPSGetLeftEigenvector()` | ||
| 1245 | @*/ | ||
| 1246 | 318 | PetscErrorCode EPSSetTwoSided(EPS eps,PetscBool twosided) | |
| 1247 | { | ||
| 1248 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
318 | PetscFunctionBegin; |
| 1249 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
318 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1250 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
318 | PetscValidLogicalCollectiveBool(eps,twosided,2); |
| 1251 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
318 | if (twosided!=eps->twosided) { |
| 1252 | 209 | eps->twosided = twosided; | |
| 1253 | 209 | eps->state = EPS_STATE_INITIAL; | |
| 1254 | } | ||
| 1255 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
318 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1256 | } | ||
| 1257 | |||
| 1258 | /*@ | ||
| 1259 | EPSGetTwoSided - Returns the flag indicating whether a two-sided variant | ||
| 1260 | of the algorithm is being used or not. | ||
| 1261 | |||
| 1262 | Not Collective | ||
| 1263 | |||
| 1264 | Input Parameter: | ||
| 1265 | . eps - the linear eigensolver context | ||
| 1266 | |||
| 1267 | Output Parameter: | ||
| 1268 | . twosided - the returned flag | ||
| 1269 | |||
| 1270 | Level: advanced | ||
| 1271 | |||
| 1272 | .seealso: [](ch:eps), `EPSSetTwoSided()` | ||
| 1273 | @*/ | ||
| 1274 | 68 | PetscErrorCode EPSGetTwoSided(EPS eps,PetscBool *twosided) | |
| 1275 | { | ||
| 1276 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
68 | PetscFunctionBegin; |
| 1277 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
68 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1278 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
68 | PetscAssertPointer(twosided,2); |
| 1279 | 68 | *twosided = eps->twosided; | |
| 1280 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
68 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1281 | } | ||
| 1282 | |||
| 1283 | /*@ | ||
| 1284 | EPSSetTrueResidual - Specifies if the solver must compute the true residual | ||
| 1285 | explicitly or not. | ||
| 1286 | |||
| 1287 | Logically Collective | ||
| 1288 | |||
| 1289 | Input Parameters: | ||
| 1290 | + eps - the linear eigensolver context | ||
| 1291 | - trueres - whether true residuals are required or not | ||
| 1292 | |||
| 1293 | Options Database Key: | ||
| 1294 | . -eps_true_residual - toggles the true residual | ||
| 1295 | |||
| 1296 | Notes: | ||
| 1297 | If the user sets `trueres`=`PETSC_TRUE` then the solver explicitly computes | ||
| 1298 | the true residual for each eigenpair approximation, and uses it for | ||
| 1299 | convergence testing. Computing the residual is usually an expensive | ||
| 1300 | operation. Some solvers (e.g., Krylov solvers) can avoid this computation | ||
| 1301 | by using a cheap estimate of the residual norm, but this may sometimes | ||
| 1302 | give inaccurate results (especially if a spectral transform is being | ||
| 1303 | used). On the contrary, preconditioned eigensolvers (e.g., Davidson solvers) | ||
| 1304 | do rely on computing the true residual, so this option is irrelevant for them. | ||
| 1305 | |||
| 1306 | Level: advanced | ||
| 1307 | |||
| 1308 | .seealso: [](ch:eps), `EPSGetTrueResidual()` | ||
| 1309 | @*/ | ||
| 1310 | 90 | PetscErrorCode EPSSetTrueResidual(EPS eps,PetscBool trueres) | |
| 1311 | { | ||
| 1312 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
90 | PetscFunctionBegin; |
| 1313 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
90 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1314 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
90 | PetscValidLogicalCollectiveBool(eps,trueres,2); |
| 1315 | 90 | eps->trueres = trueres; | |
| 1316 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
90 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1317 | } | ||
| 1318 | |||
| 1319 | /*@ | ||
| 1320 | EPSGetTrueResidual - Returns the flag indicating whether true | ||
| 1321 | residuals must be computed explicitly or not. | ||
| 1322 | |||
| 1323 | Not Collective | ||
| 1324 | |||
| 1325 | Input Parameter: | ||
| 1326 | . eps - the linear eigensolver context | ||
| 1327 | |||
| 1328 | Output Parameter: | ||
| 1329 | . trueres - the returned flag | ||
| 1330 | |||
| 1331 | Level: advanced | ||
| 1332 | |||
| 1333 | .seealso: [](ch:eps), `EPSSetTrueResidual()` | ||
| 1334 | @*/ | ||
| 1335 | 80 | PetscErrorCode EPSGetTrueResidual(EPS eps,PetscBool *trueres) | |
| 1336 | { | ||
| 1337 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
80 | PetscFunctionBegin; |
| 1338 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
80 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1339 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
80 | PetscAssertPointer(trueres,2); |
| 1340 | 80 | *trueres = eps->trueres; | |
| 1341 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
80 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1342 | } | ||
| 1343 | |||
| 1344 | /*@ | ||
| 1345 | EPSSetTrackAll - Specifies if the solver must compute the residual norm of all | ||
| 1346 | approximate eigenpairs or not. | ||
| 1347 | |||
| 1348 | Logically Collective | ||
| 1349 | |||
| 1350 | Input Parameters: | ||
| 1351 | + eps - the linear eigensolver context | ||
| 1352 | - trackall - whether to compute all residuals or not | ||
| 1353 | |||
| 1354 | Notes: | ||
| 1355 | If the user sets `trackall`=`PETSC_TRUE` then the solver computes (or estimates) | ||
| 1356 | the residual norm for each eigenpair approximation. Computing the residual is | ||
| 1357 | usually an expensive operation and solvers commonly compute only the residual | ||
| 1358 | associated to the first unconverged eigenpair. | ||
| 1359 | |||
| 1360 | The option `-eps_monitor_all` automatically activates this option. | ||
| 1361 | |||
| 1362 | Level: developer | ||
| 1363 | |||
| 1364 | .seealso: [](ch:eps), `EPSGetTrackAll()` | ||
| 1365 | @*/ | ||
| 1366 | 1521 | PetscErrorCode EPSSetTrackAll(EPS eps,PetscBool trackall) | |
| 1367 | { | ||
| 1368 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1521 | PetscFunctionBegin; |
| 1369 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1521 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1370 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
1521 | PetscValidLogicalCollectiveBool(eps,trackall,2); |
| 1371 | 1521 | eps->trackall = trackall; | |
| 1372 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
1521 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1373 | } | ||
| 1374 | |||
| 1375 | /*@ | ||
| 1376 | EPSGetTrackAll - Returns the flag indicating whether all residual norms must | ||
| 1377 | be computed or not. | ||
| 1378 | |||
| 1379 | Not Collective | ||
| 1380 | |||
| 1381 | Input Parameter: | ||
| 1382 | . eps - the linear eigensolver context | ||
| 1383 | |||
| 1384 | Output Parameter: | ||
| 1385 | . trackall - the returned flag | ||
| 1386 | |||
| 1387 | Level: developer | ||
| 1388 | |||
| 1389 | .seealso: [](ch:eps), `EPSSetTrackAll()` | ||
| 1390 | @*/ | ||
| 1391 | 10 | PetscErrorCode EPSGetTrackAll(EPS eps,PetscBool *trackall) | |
| 1392 | { | ||
| 1393 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 1394 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
10 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1395 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
10 | PetscAssertPointer(trackall,2); |
| 1396 | 10 | *trackall = eps->trackall; | |
| 1397 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
10 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1398 | } | ||
| 1399 | |||
| 1400 | /*@ | ||
| 1401 | EPSSetPurify - Disable eigenvector purification (which is enabled by default). | ||
| 1402 | |||
| 1403 | Logically Collective | ||
| 1404 | |||
| 1405 | Input Parameters: | ||
| 1406 | + eps - the linear eigensolver context | ||
| 1407 | - purify - whether purification is done or not, use `PETSC_FALSE` to disable it | ||
| 1408 | |||
| 1409 | Options Database Key: | ||
| 1410 | . -eps_purify - toggles the purification flag | ||
| 1411 | |||
| 1412 | Notes: | ||
| 1413 | By default, eigenvectors of generalized symmetric eigenproblems are purified | ||
| 1414 | in order to purge directions in the nullspace of matrix $B$. If the user knows | ||
| 1415 | that $B$ is non-singular, then purification can be safely deactivated and some | ||
| 1416 | computational cost is avoided (this is particularly important in interval computations). | ||
| 1417 | |||
| 1418 | More details are given in section [](#sec:purif). | ||
| 1419 | |||
| 1420 | Level: intermediate | ||
| 1421 | |||
| 1422 | .seealso: [](ch:eps), [](#sec:purif), `EPSGetPurify()`, `EPSSetInterval()` | ||
| 1423 | @*/ | ||
| 1424 | 40 | PetscErrorCode EPSSetPurify(EPS eps,PetscBool purify) | |
| 1425 | { | ||
| 1426 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
40 | PetscFunctionBegin; |
| 1427 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
40 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1428 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
40 | PetscValidLogicalCollectiveBool(eps,purify,2); |
| 1429 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
40 | if (purify!=eps->purify) { |
| 1430 | 20 | eps->purify = purify; | |
| 1431 | 20 | eps->state = EPS_STATE_INITIAL; | |
| 1432 | } | ||
| 1433 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
40 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1434 | } | ||
| 1435 | |||
| 1436 | /*@ | ||
| 1437 | EPSGetPurify - Returns the flag indicating whether purification is activated | ||
| 1438 | or not. | ||
| 1439 | |||
| 1440 | Not Collective | ||
| 1441 | |||
| 1442 | Input Parameter: | ||
| 1443 | . eps - the linear eigensolver context | ||
| 1444 | |||
| 1445 | Output Parameter: | ||
| 1446 | . purify - the returned flag | ||
| 1447 | |||
| 1448 | Level: intermediate | ||
| 1449 | |||
| 1450 | .seealso: [](ch:eps), `EPSSetPurify()` | ||
| 1451 | @*/ | ||
| 1452 | 10 | PetscErrorCode EPSGetPurify(EPS eps,PetscBool *purify) | |
| 1453 | { | ||
| 1454 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
| 1455 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
10 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1456 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
10 | PetscAssertPointer(purify,2); |
| 1457 | 10 | *purify = eps->purify; | |
| 1458 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
10 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1459 | } | ||
| 1460 | |||
| 1461 | /*@ | ||
| 1462 | EPSSetOptionsPrefix - Sets the prefix used for searching for all | ||
| 1463 | `EPS` options in the database. | ||
| 1464 | |||
| 1465 | Logically Collective | ||
| 1466 | |||
| 1467 | Input Parameters: | ||
| 1468 | + eps - the linear eigensolver context | ||
| 1469 | - prefix - the prefix string to prepend to all `EPS` option requests | ||
| 1470 | |||
| 1471 | Notes: | ||
| 1472 | A hyphen (-) must NOT be given at the beginning of the prefix name. | ||
| 1473 | The first character of all runtime options is AUTOMATICALLY the | ||
| 1474 | hyphen. | ||
| 1475 | |||
| 1476 | For example, to distinguish between the runtime options for two | ||
| 1477 | different `EPS` contexts, one could call | ||
| 1478 | .vb | ||
| 1479 | EPSSetOptionsPrefix(eps1,"eig1_") | ||
| 1480 | EPSSetOptionsPrefix(eps2,"eig2_") | ||
| 1481 | .ve | ||
| 1482 | |||
| 1483 | Level: advanced | ||
| 1484 | |||
| 1485 | .seealso: [](ch:eps), `EPSAppendOptionsPrefix()`, `EPSGetOptionsPrefix()` | ||
| 1486 | @*/ | ||
| 1487 | 2137 | PetscErrorCode EPSSetOptionsPrefix(EPS eps,const char prefix[]) | |
| 1488 | { | ||
| 1489 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2137 | PetscFunctionBegin; |
| 1490 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
2137 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1491 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2137 | if (!eps->st) PetscCall(EPSGetST(eps,&eps->st)); |
| 1492 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2137 | PetscCall(STSetOptionsPrefix(eps->st,prefix)); |
| 1493 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2137 | if (!eps->V) PetscCall(EPSGetBV(eps,&eps->V)); |
| 1494 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2137 | PetscCall(BVSetOptionsPrefix(eps->V,prefix)); |
| 1495 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2137 | if (!eps->ds) PetscCall(EPSGetDS(eps,&eps->ds)); |
| 1496 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2137 | PetscCall(DSSetOptionsPrefix(eps->ds,prefix)); |
| 1497 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2137 | if (!eps->rg) PetscCall(EPSGetRG(eps,&eps->rg)); |
| 1498 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2137 | PetscCall(RGSetOptionsPrefix(eps->rg,prefix)); |
| 1499 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2137 | PetscCall(PetscObjectSetOptionsPrefix((PetscObject)eps,prefix)); |
| 1500 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
415 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1501 | } | ||
| 1502 | |||
| 1503 | /*@ | ||
| 1504 | EPSAppendOptionsPrefix - Appends to the prefix used for searching for all | ||
| 1505 | `EPS` options in the database. | ||
| 1506 | |||
| 1507 | Logically Collective | ||
| 1508 | |||
| 1509 | Input Parameters: | ||
| 1510 | + eps - the linear eigensolver context | ||
| 1511 | - prefix - the prefix string to prepend to all `EPS` option requests | ||
| 1512 | |||
| 1513 | Notes: | ||
| 1514 | A hyphen (-) must NOT be given at the beginning of the prefix name. | ||
| 1515 | The first character of all runtime options is AUTOMATICALLY the hyphen. | ||
| 1516 | |||
| 1517 | Level: advanced | ||
| 1518 | |||
| 1519 | .seealso: [](ch:eps), `EPSSetOptionsPrefix()`, `EPSGetOptionsPrefix()` | ||
| 1520 | @*/ | ||
| 1521 | 1686 | PetscErrorCode EPSAppendOptionsPrefix(EPS eps,const char prefix[]) | |
| 1522 | { | ||
| 1523 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1686 | PetscFunctionBegin; |
| 1524 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1686 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1525 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1686 | if (!eps->st) PetscCall(EPSGetST(eps,&eps->st)); |
| 1526 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1686 | PetscCall(STAppendOptionsPrefix(eps->st,prefix)); |
| 1527 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1686 | if (!eps->V) PetscCall(EPSGetBV(eps,&eps->V)); |
| 1528 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1686 | PetscCall(BVAppendOptionsPrefix(eps->V,prefix)); |
| 1529 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1686 | if (!eps->ds) PetscCall(EPSGetDS(eps,&eps->ds)); |
| 1530 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1686 | PetscCall(DSAppendOptionsPrefix(eps->ds,prefix)); |
| 1531 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1686 | if (!eps->rg) PetscCall(EPSGetRG(eps,&eps->rg)); |
| 1532 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1686 | PetscCall(RGAppendOptionsPrefix(eps->rg,prefix)); |
| 1533 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1686 | PetscCall(PetscObjectAppendOptionsPrefix((PetscObject)eps,prefix)); |
| 1534 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
333 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1535 | } | ||
| 1536 | |||
| 1537 | /*@ | ||
| 1538 | EPSGetOptionsPrefix - Gets the prefix used for searching for all | ||
| 1539 | `EPS` options in the database. | ||
| 1540 | |||
| 1541 | Not Collective | ||
| 1542 | |||
| 1543 | Input Parameter: | ||
| 1544 | . eps - the linear eigensolver context | ||
| 1545 | |||
| 1546 | Output Parameter: | ||
| 1547 | . prefix - pointer to the prefix string used is returned | ||
| 1548 | |||
| 1549 | Level: advanced | ||
| 1550 | |||
| 1551 | .seealso: [](ch:eps), `EPSSetOptionsPrefix()`, `EPSAppendOptionsPrefix()` | ||
| 1552 | @*/ | ||
| 1553 | 318 | PetscErrorCode EPSGetOptionsPrefix(EPS eps,const char *prefix[]) | |
| 1554 | { | ||
| 1555 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
318 | PetscFunctionBegin; |
| 1556 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
318 | PetscValidHeaderSpecific(eps,EPS_CLASSID,1); |
| 1557 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
318 | PetscAssertPointer(prefix,2); |
| 1558 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
318 | PetscCall(PetscObjectGetOptionsPrefix((PetscObject)eps,prefix)); |
| 1559 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
54 | PetscFunctionReturn(PETSC_SUCCESS); |
| 1560 | } | ||
| 1561 |