| 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 | A function that is obtained by combining two other functions (either by | ||
| 12 | addition, multiplication, division or composition) | ||
| 13 | |||
| 14 | addition: f(x) = f1(x)+f2(x) | ||
| 15 | multiplication: f(x) = f1(x)*f2(x) | ||
| 16 | division: f(x) = f1(x)/f2(x) f(A) = f2(A)\f1(A) | ||
| 17 | composition: f(x) = f2(f1(x)) | ||
| 18 | */ | ||
| 19 | |||
| 20 | #include <slepc/private/fnimpl.h> /*I "slepcfn.h" I*/ | ||
| 21 | |||
| 22 | typedef struct { | ||
| 23 | FN f1,f2; /* functions */ | ||
| 24 | FNCombineType comb; /* how the functions are combined */ | ||
| 25 | } FN_COMBINE; | ||
| 26 | |||
| 27 | 2196 | static PetscErrorCode FNEvaluateFunction_Combine(FN fn,PetscScalar x,PetscScalar *y) | |
| 28 | { | ||
| 29 | 2196 | FN_COMBINE *ctx = (FN_COMBINE*)fn->data; | |
| 30 | 2196 | PetscScalar a,b; | |
| 31 | |||
| 32 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2196 | PetscFunctionBegin; |
| 33 |
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.
|
2196 | PetscCall(FNEvaluateFunction(ctx->f1,x,&a)); |
| 34 |
4/5✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
|
2196 | switch (ctx->comb) { |
| 35 | 528 | case FN_COMBINE_ADD: | |
| 36 |
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.
|
528 | PetscCall(FNEvaluateFunction(ctx->f2,x,&b)); |
| 37 | 528 | *y = a+b; | |
| 38 | 528 | break; | |
| 39 | 424 | case FN_COMBINE_MULTIPLY: | |
| 40 |
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.
|
424 | PetscCall(FNEvaluateFunction(ctx->f2,x,&b)); |
| 41 | 424 | *y = a*b; | |
| 42 | 424 | break; | |
| 43 | 424 | case FN_COMBINE_DIVIDE: | |
| 44 |
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.
|
424 | PetscCall(FNEvaluateFunction(ctx->f2,x,&b)); |
| 45 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
424 | PetscCheck(b!=0.0,PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Function not defined in the requested value"); |
| 46 | 424 | *y = a/b; | |
| 47 | 424 | break; | |
| 48 | 820 | case FN_COMBINE_COMPOSE: | |
| 49 |
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.
|
820 | PetscCall(FNEvaluateFunction(ctx->f2,a,y)); |
| 50 | break; | ||
| 51 | } | ||
| 52 |
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.
|
484 | PetscFunctionReturn(PETSC_SUCCESS); |
| 53 | } | ||
| 54 | |||
| 55 | 96 | static PetscErrorCode FNEvaluateDerivative_Combine(FN fn,PetscScalar x,PetscScalar *yp) | |
| 56 | { | ||
| 57 | 96 | FN_COMBINE *ctx = (FN_COMBINE*)fn->data; | |
| 58 | 96 | PetscScalar a,b,ap,bp; | |
| 59 | |||
| 60 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
96 | PetscFunctionBegin; |
| 61 |
4/5✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
|
96 | switch (ctx->comb) { |
| 62 | 24 | case FN_COMBINE_ADD: | |
| 63 |
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.
|
24 | PetscCall(FNEvaluateDerivative(ctx->f1,x,&ap)); |
| 64 |
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.
|
24 | PetscCall(FNEvaluateDerivative(ctx->f2,x,&bp)); |
| 65 | 24 | *yp = ap+bp; | |
| 66 | 24 | break; | |
| 67 | 24 | case FN_COMBINE_MULTIPLY: | |
| 68 |
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.
|
24 | PetscCall(FNEvaluateDerivative(ctx->f1,x,&ap)); |
| 69 |
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.
|
24 | PetscCall(FNEvaluateDerivative(ctx->f2,x,&bp)); |
| 70 |
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.
|
24 | PetscCall(FNEvaluateFunction(ctx->f1,x,&a)); |
| 71 |
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.
|
24 | PetscCall(FNEvaluateFunction(ctx->f2,x,&b)); |
| 72 | 24 | *yp = ap*b+a*bp; | |
| 73 | 24 | break; | |
| 74 | 24 | case FN_COMBINE_DIVIDE: | |
| 75 |
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.
|
24 | PetscCall(FNEvaluateDerivative(ctx->f1,x,&ap)); |
| 76 |
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.
|
24 | PetscCall(FNEvaluateDerivative(ctx->f2,x,&bp)); |
| 77 |
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.
|
24 | PetscCall(FNEvaluateFunction(ctx->f1,x,&a)); |
| 78 |
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.
|
24 | PetscCall(FNEvaluateFunction(ctx->f2,x,&b)); |
| 79 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24 | PetscCheck(b!=0.0,PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Derivative not defined in the requested value"); |
| 80 | 24 | *yp = (ap*b-a*bp)/(b*b); | |
| 81 | 24 | break; | |
| 82 | 24 | case FN_COMBINE_COMPOSE: | |
| 83 |
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.
|
24 | PetscCall(FNEvaluateFunction(ctx->f1,x,&a)); |
| 84 |
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.
|
24 | PetscCall(FNEvaluateDerivative(ctx->f1,x,&ap)); |
| 85 |
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.
|
24 | PetscCall(FNEvaluateDerivative(ctx->f2,a,yp)); |
| 86 | 24 | *yp *= ap; | |
| 87 | 24 | break; | |
| 88 | } | ||
| 89 |
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); |
| 90 | } | ||
| 91 | |||
| 92 | 125 | static PetscErrorCode FNEvaluateFunctionMat_Combine(FN fn,Mat A,Mat B) | |
| 93 | { | ||
| 94 | 125 | FN_COMBINE *ctx = (FN_COMBINE*)fn->data; | |
| 95 | 125 | Mat W,Z,F; | |
| 96 | 125 | PetscBool iscuda; | |
| 97 | |||
| 98 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
125 | PetscFunctionBegin; |
| 99 |
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.
|
125 | PetscCall(FN_AllocateWorkMat(fn,A,&W)); |
| 100 |
4/5✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
|
125 | switch (ctx->comb) { |
| 101 | 38 | case FN_COMBINE_ADD: | |
| 102 |
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.
|
38 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f1,A,W,PETSC_FALSE)); |
| 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.
|
38 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f2,A,B,PETSC_FALSE)); |
| 104 |
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.
|
38 | PetscCall(MatAXPY(B,1.0,W,SAME_NONZERO_PATTERN)); |
| 105 | break; | ||
| 106 | 28 | case FN_COMBINE_MULTIPLY: | |
| 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.
|
28 | PetscCall(FN_AllocateWorkMat(fn,A,&Z)); |
| 108 |
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.
|
28 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f1,A,W,PETSC_FALSE)); |
| 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.
|
28 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f2,A,Z,PETSC_FALSE)); |
| 110 |
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.
|
28 | PetscCall(MatMatMult(W,Z,MAT_REUSE_MATRIX,PETSC_DEFAULT,&B)); |
| 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.
|
28 | PetscCall(FN_FreeWorkMat(fn,&Z)); |
| 112 | break; | ||
| 113 | 28 | case FN_COMBINE_DIVIDE: | |
| 114 |
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.
|
28 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f2,A,W,PETSC_FALSE)); |
| 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.
|
28 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f1,A,B,PETSC_FALSE)); |
| 116 |
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.
|
28 | PetscCall(PetscObjectTypeCompare((PetscObject)A,MATSEQDENSECUDA,&iscuda)); |
| 117 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 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.
|
48 | PetscCall(MatGetFactor(W,iscuda?MATSOLVERCUDA:MATSOLVERPETSC,MAT_FACTOR_LU,&F)); |
| 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.
|
28 | PetscCall(MatLUFactorSymbolic(F,W,NULL,NULL,NULL)); |
| 119 |
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.
|
28 | PetscCall(MatLUFactorNumeric(F,W,NULL)); |
| 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.
|
28 | PetscCall(MatMatSolve(F,B,B)); |
| 121 |
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.
|
28 | PetscCall(MatDestroy(&F)); |
| 122 | break; | ||
| 123 | 31 | case FN_COMBINE_COMPOSE: | |
| 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.
|
31 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f1,A,W,PETSC_FALSE)); |
| 125 |
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.
|
31 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f2,W,B,PETSC_FALSE)); |
| 126 | break; | ||
| 127 | } | ||
| 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.
|
125 | PetscCall(FN_FreeWorkMat(fn,&W)); |
| 129 |
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.
|
19 | PetscFunctionReturn(PETSC_SUCCESS); |
| 130 | } | ||
| 131 | |||
| 132 | 512 | static PetscErrorCode FNEvaluateFunctionMatVec_Combine(FN fn,Mat A,Vec v) | |
| 133 | { | ||
| 134 | 512 | FN_COMBINE *ctx = (FN_COMBINE*)fn->data; | |
| 135 | 512 | PetscBool iscuda; | |
| 136 | 512 | Mat Z,F; | |
| 137 | 512 | Vec w; | |
| 138 | |||
| 139 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
512 | PetscFunctionBegin; |
| 140 |
4/5✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
|
512 | switch (ctx->comb) { |
| 141 | 228 | case FN_COMBINE_ADD: | |
| 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.
|
228 | PetscCall(VecDuplicate(v,&w)); |
| 143 |
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.
|
228 | PetscCall(FNEvaluateFunctionMatVec_Private(ctx->f1,A,w,PETSC_FALSE)); |
| 144 |
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.
|
228 | PetscCall(FNEvaluateFunctionMatVec_Private(ctx->f2,A,v,PETSC_FALSE)); |
| 145 |
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.
|
228 | PetscCall(VecAXPY(v,1.0,w)); |
| 146 |
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.
|
228 | PetscCall(VecDestroy(&w)); |
| 147 | break; | ||
| 148 | 28 | case FN_COMBINE_MULTIPLY: | |
| 149 |
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.
|
28 | PetscCall(VecDuplicate(v,&w)); |
| 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.
|
28 | PetscCall(FN_AllocateWorkMat(fn,A,&Z)); |
| 151 |
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.
|
28 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f1,A,Z,PETSC_FALSE)); |
| 152 |
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.
|
28 | PetscCall(FNEvaluateFunctionMatVec_Private(ctx->f2,A,w,PETSC_FALSE)); |
| 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.
|
28 | PetscCall(MatMult(Z,w,v)); |
| 154 |
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.
|
28 | PetscCall(FN_FreeWorkMat(fn,&Z)); |
| 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.
|
28 | PetscCall(VecDestroy(&w)); |
| 156 | break; | ||
| 157 | 228 | case FN_COMBINE_DIVIDE: | |
| 158 |
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.
|
228 | PetscCall(VecDuplicate(v,&w)); |
| 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.
|
228 | PetscCall(FN_AllocateWorkMat(fn,A,&Z)); |
| 160 |
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.
|
228 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f2,A,Z,PETSC_FALSE)); |
| 161 |
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.
|
228 | PetscCall(FNEvaluateFunctionMatVec_Private(ctx->f1,A,w,PETSC_FALSE)); |
| 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.
|
228 | PetscCall(PetscObjectTypeCompare((PetscObject)A,MATSEQDENSECUDA,&iscuda)); |
| 163 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 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.
|
448 | PetscCall(MatGetFactor(Z,iscuda?MATSOLVERCUDA:MATSOLVERPETSC,MAT_FACTOR_LU,&F)); |
| 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.
|
228 | PetscCall(MatLUFactorSymbolic(F,Z,NULL,NULL,NULL)); |
| 165 |
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.
|
228 | PetscCall(MatLUFactorNumeric(F,Z,NULL)); |
| 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.
|
228 | PetscCall(MatSolve(F,w,v)); |
| 167 |
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.
|
228 | PetscCall(MatDestroy(&F)); |
| 168 |
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.
|
228 | PetscCall(FN_FreeWorkMat(fn,&Z)); |
| 169 |
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.
|
228 | PetscCall(VecDestroy(&w)); |
| 170 | break; | ||
| 171 | 28 | case FN_COMBINE_COMPOSE: | |
| 172 |
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.
|
28 | PetscCall(FN_AllocateWorkMat(fn,A,&Z)); |
| 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.
|
28 | PetscCall(FNEvaluateFunctionMat_Private(ctx->f1,A,Z,PETSC_FALSE)); |
| 174 |
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.
|
28 | PetscCall(FNEvaluateFunctionMatVec_Private(ctx->f2,Z,v,PETSC_FALSE)); |
| 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.
|
28 | PetscCall(FN_FreeWorkMat(fn,&Z)); |
| 176 | break; | ||
| 177 | } | ||
| 178 |
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.
|
96 | PetscFunctionReturn(PETSC_SUCCESS); |
| 179 | } | ||
| 180 | |||
| 181 | 72 | static PetscErrorCode FNView_Combine(FN fn,PetscViewer viewer) | |
| 182 | { | ||
| 183 | 72 | FN_COMBINE *ctx = (FN_COMBINE*)fn->data; | |
| 184 | 72 | PetscBool isascii; | |
| 185 | 72 | char str[50]; | |
| 186 | |||
| 187 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
72 | PetscFunctionBegin; |
| 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.
|
72 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
| 189 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
72 | if (isascii) { |
| 190 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
72 | if (fn->alpha!=(PetscScalar)1.0 || fn->beta!=(PetscScalar)1.0) { |
| 191 | ✗ | PetscCall(SlepcSNPrintfScalar(str,sizeof(str),fn->alpha,PETSC_TRUE)); | |
| 192 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer," scaling factors: inner %s",str)); | |
| 193 | ✗ | PetscCall(SlepcSNPrintfScalar(str,sizeof(str),fn->beta,PETSC_TRUE)); | |
| 194 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"outer %s\n",str)); | |
| 195 | } | ||
| 196 |
3/5✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
|
72 | switch (ctx->comb) { |
| 197 | 24 | case FN_COMBINE_ADD: | |
| 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.
|
24 | PetscCall(PetscViewerASCIIPrintf(viewer," two added functions f1+f2\n")); |
| 199 | break; | ||
| 200 | 24 | case FN_COMBINE_MULTIPLY: | |
| 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.
|
24 | PetscCall(PetscViewerASCIIPrintf(viewer," two multiplied functions f1*f2\n")); |
| 202 | break; | ||
| 203 | ✗ | case FN_COMBINE_DIVIDE: | |
| 204 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer," a quotient of two functions f1/f2\n")); | |
| 205 | break; | ||
| 206 | 24 | case FN_COMBINE_COMPOSE: | |
| 207 |
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.
|
24 | PetscCall(PetscViewerASCIIPrintf(viewer," two composed functions f2(f1(.))\n")); |
| 208 | break; | ||
| 209 | } | ||
| 210 |
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.
|
72 | PetscCall(PetscViewerASCIIPushTab(viewer)); |
| 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.
|
72 | PetscCall(FNView(ctx->f1,viewer)); |
| 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.
|
72 | PetscCall(FNView(ctx->f2,viewer)); |
| 213 |
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.
|
72 | PetscCall(PetscViewerASCIIPopTab(viewer)); |
| 214 | } | ||
| 215 |
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.
|
12 | PetscFunctionReturn(PETSC_SUCCESS); |
| 216 | } | ||
| 217 | |||
| 218 | 129 | static PetscErrorCode FNCombineSetChildren_Combine(FN fn,FNCombineType comb,FN f1,FN f2) | |
| 219 | { | ||
| 220 | 129 | FN_COMBINE *ctx = (FN_COMBINE*)fn->data; | |
| 221 | |||
| 222 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
129 | PetscFunctionBegin; |
| 223 | 129 | ctx->comb = comb; | |
| 224 |
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.
|
129 | PetscCall(PetscObjectReference((PetscObject)f1)); |
| 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.
|
129 | PetscCall(FNDestroy(&ctx->f1)); |
| 226 | 129 | ctx->f1 = f1; | |
| 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.
|
129 | PetscCall(PetscObjectReference((PetscObject)f2)); |
| 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.
|
129 | PetscCall(FNDestroy(&ctx->f2)); |
| 229 | 129 | ctx->f2 = f2; | |
| 230 |
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.
|
129 | PetscFunctionReturn(PETSC_SUCCESS); |
| 231 | } | ||
| 232 | |||
| 233 | /*@ | ||
| 234 | FNCombineSetChildren - Sets the two child functions that constitute this | ||
| 235 | combined function, and the way they must be combined. | ||
| 236 | |||
| 237 | Logically Collective | ||
| 238 | |||
| 239 | Input Parameters: | ||
| 240 | + fn - the math function context | ||
| 241 | . comb - how to combine the functions (addition, multiplication, division or composition) | ||
| 242 | . f1 - first function | ||
| 243 | - f2 - second function | ||
| 244 | |||
| 245 | Level: intermediate | ||
| 246 | |||
| 247 | .seealso: [](sec:fn), `FNCOMBINE`, `FNCombineGetChildren()` | ||
| 248 | @*/ | ||
| 249 | 129 | PetscErrorCode FNCombineSetChildren(FN fn,FNCombineType comb,FN f1,FN f2) | |
| 250 | { | ||
| 251 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
129 | PetscFunctionBegin; |
| 252 |
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.
|
129 | PetscValidHeaderSpecific(fn,FN_CLASSID,1); |
| 253 |
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.
|
129 | PetscValidLogicalCollectiveEnum(fn,comb,2); |
| 254 |
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.
|
129 | PetscValidHeaderSpecific(f1,FN_CLASSID,3); |
| 255 |
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.
|
129 | PetscValidHeaderSpecific(f2,FN_CLASSID,4); |
| 256 |
8/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 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 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.
|
129 | PetscTryMethod(fn,"FNCombineSetChildren_C",(FN,FNCombineType,FN,FN),(fn,comb,f1,f2)); |
| 257 |
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.
|
129 | PetscFunctionReturn(PETSC_SUCCESS); |
| 258 | } | ||
| 259 | |||
| 260 | 34 | static PetscErrorCode FNCombineGetChildren_Combine(FN fn,FNCombineType *comb,FN *f1,FN *f2) | |
| 261 | { | ||
| 262 | 34 | FN_COMBINE *ctx = (FN_COMBINE*)fn->data; | |
| 263 | |||
| 264 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
34 | PetscFunctionBegin; |
| 265 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
34 | if (comb) *comb = ctx->comb; |
| 266 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
34 | if (f1) { |
| 267 |
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.
|
34 | if (!ctx->f1) PetscCall(FNCreate(PetscObjectComm((PetscObject)fn),&ctx->f1)); |
| 268 | 34 | *f1 = ctx->f1; | |
| 269 | } | ||
| 270 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
34 | if (f2) { |
| 271 |
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.
|
34 | if (!ctx->f2) PetscCall(FNCreate(PetscObjectComm((PetscObject)fn),&ctx->f2)); |
| 272 | 34 | *f2 = ctx->f2; | |
| 273 | } | ||
| 274 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
| 275 | } | ||
| 276 | |||
| 277 | /*@ | ||
| 278 | FNCombineGetChildren - Gets the two child functions that constitute this | ||
| 279 | combined function, and the way they are combined. | ||
| 280 | |||
| 281 | Not Collective | ||
| 282 | |||
| 283 | Input Parameter: | ||
| 284 | . fn - the math function context | ||
| 285 | |||
| 286 | Output Parameters: | ||
| 287 | + comb - how to combine the functions (addition, multiplication, division or composition) | ||
| 288 | . f1 - first function | ||
| 289 | - f2 - second function | ||
| 290 | |||
| 291 | Level: intermediate | ||
| 292 | |||
| 293 | .seealso: [](sec:fn), `FNCOMBINE`, `FNCombineSetChildren()` | ||
| 294 | @*/ | ||
| 295 | 34 | PetscErrorCode FNCombineGetChildren(FN fn,FNCombineType *comb,FN *f1,FN *f2) | |
| 296 | { | ||
| 297 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
34 | PetscFunctionBegin; |
| 298 |
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.
|
34 | PetscValidHeaderSpecific(fn,FN_CLASSID,1); |
| 299 |
9/16✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ 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.
|
34 | PetscUseMethod(fn,"FNCombineGetChildren_C",(FN,FNCombineType*,FN*,FN*),(fn,comb,f1,f2)); |
| 300 |
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); |
| 301 | } | ||
| 302 | |||
| 303 | 48 | static PetscErrorCode FNDuplicate_Combine(FN fn,MPI_Comm comm,FN *newfn) | |
| 304 | { | ||
| 305 | 48 | FN_COMBINE *ctx = (FN_COMBINE*)fn->data,*ctx2 = (FN_COMBINE*)(*newfn)->data; | |
| 306 | |||
| 307 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
48 | PetscFunctionBegin; |
| 308 | 48 | ctx2->comb = ctx->comb; | |
| 309 |
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.
|
48 | PetscCall(FNDuplicate(ctx->f1,comm,&ctx2->f1)); |
| 310 |
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.
|
48 | PetscCall(FNDuplicate(ctx->f2,comm,&ctx2->f2)); |
| 311 |
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.
|
8 | PetscFunctionReturn(PETSC_SUCCESS); |
| 312 | } | ||
| 313 | |||
| 314 | 177 | static PetscErrorCode FNDestroy_Combine(FN fn) | |
| 315 | { | ||
| 316 | 177 | FN_COMBINE *ctx = (FN_COMBINE*)fn->data; | |
| 317 | |||
| 318 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
177 | PetscFunctionBegin; |
| 319 |
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.
|
177 | PetscCall(FNDestroy(&ctx->f1)); |
| 320 |
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.
|
177 | PetscCall(FNDestroy(&ctx->f2)); |
| 321 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
|
177 | PetscCall(PetscFree(fn->data)); |
| 322 |
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.
|
177 | PetscCall(PetscObjectComposeFunction((PetscObject)fn,"FNCombineSetChildren_C",NULL)); |
| 323 |
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.
|
177 | PetscCall(PetscObjectComposeFunction((PetscObject)fn,"FNCombineGetChildren_C",NULL)); |
| 324 |
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.
|
31 | PetscFunctionReturn(PETSC_SUCCESS); |
| 325 | } | ||
| 326 | |||
| 327 | /*MC | ||
| 328 | FNCOMBINE - FNCOMBINE = "combine" - A mathematical function that is defined | ||
| 329 | by combining two previously defined functions, e.g., by addition. Use | ||
| 330 | `FNCombineSetChildren()` to specify which functions must be combined and how. | ||
| 331 | |||
| 332 | Level: beginner | ||
| 333 | |||
| 334 | .seealso: [](sec:fn), `FN`, `FNType`, `FNSetType()`, `FNCombineSetChildren()` | ||
| 335 | M*/ | ||
| 336 | |||
| 337 | 177 | SLEPC_EXTERN PetscErrorCode FNCreate_Combine(FN fn) | |
| 338 | { | ||
| 339 | 177 | FN_COMBINE *ctx; | |
| 340 | |||
| 341 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
177 | PetscFunctionBegin; |
| 342 |
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.
|
177 | PetscCall(PetscNew(&ctx)); |
| 343 | 177 | fn->data = (void*)ctx; | |
| 344 | |||
| 345 | 177 | fn->ops->evaluatefunction = FNEvaluateFunction_Combine; | |
| 346 | 177 | fn->ops->evaluatederivative = FNEvaluateDerivative_Combine; | |
| 347 | 177 | fn->ops->evaluatefunctionmat[0] = FNEvaluateFunctionMat_Combine; | |
| 348 | 177 | fn->ops->evaluatefunctionmatvec[0] = FNEvaluateFunctionMatVec_Combine; | |
| 349 | #if defined(PETSC_HAVE_CUDA) | ||
| 350 | 54 | fn->ops->evaluatefunctionmatcuda[0] = FNEvaluateFunctionMat_Combine; | |
| 351 | 54 | fn->ops->evaluatefunctionmatveccuda[0] = FNEvaluateFunctionMatVec_Combine; | |
| 352 | #endif | ||
| 353 | 177 | fn->ops->view = FNView_Combine; | |
| 354 | 177 | fn->ops->duplicate = FNDuplicate_Combine; | |
| 355 | 177 | fn->ops->destroy = FNDestroy_Combine; | |
| 356 |
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.
|
177 | PetscCall(PetscObjectComposeFunction((PetscObject)fn,"FNCombineSetChildren_C",FNCombineSetChildren_Combine)); |
| 357 |
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.
|
177 | PetscCall(PetscObjectComposeFunction((PetscObject)fn,"FNCombineGetChildren_C",FNCombineGetChildren_Combine)); |
| 358 |
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.
|
31 | PetscFunctionReturn(PETSC_SUCCESS); |
| 359 | } | ||
| 360 |