| /petsc/src/tao/constrained/impls/admm/ |
| H A D | admm.c | 29 TAO_ADMM *am = (TAO_ADMM *)tao->data; in TaoADMMToleranceUpdate() local 35 mis = am->subsolverX; in TaoADMMToleranceUpdate() 36 tempJR = am->workJacobianRight; in TaoADMMToleranceUpdate() 37 tempL = am->workLeft; in TaoADMMToleranceUpdate() 39 …PetscCall(TaoComputeJacobianEquality(mis, am->y, mis->jacobian_equality, mis->jacobian_equality_pr… in TaoADMMToleranceUpdate() 40 PetscCall(MatMultTranspose(mis->jacobian_equality, am->y, tempJR)); in TaoADMMToleranceUpdate() 43 PetscCall(VecWAXPY(tempJR, -1., am->Bzold, am->Bz)); in TaoADMMToleranceUpdate() 45 PetscCall(VecNorm(tempL, NORM_2, &am->dualres)); in TaoADMMToleranceUpdate() 46 am->dualres *= am->mu; in TaoADMMToleranceUpdate() 49 PetscCall(VecNorm(am->Ax, NORM_2, &Axnorm)); in TaoADMMToleranceUpdate() [all …]
|
| /petsc/src/mat/impls/aij/seq/ |
| H A D | symtranspose.c | 15 PetscInt an = A->cmap->N, am = A->rmap->N; in MatTransposeSymbolic_SeqAIJ() local 21 PetscCall(PetscMalloc1(ai[am], &atj)); in MatTransposeSymbolic_SeqAIJ() 25 for (i = 0; i < ai[am]; i++) ati[aj[i] + 1] += 1; in MatTransposeSymbolic_SeqAIJ() 34 for (i = 0; i < am; i++) { in MatTransposeSymbolic_SeqAIJ() 43 …PetscCall(MatCreateSeqAIJWithArrays(PetscObjectComm((PetscObject)A), an, am, ati, atj, NULL, &At)); in MatTransposeSymbolic_SeqAIJ() 60 PetscInt an = A->cmap->N, am = A->rmap->N; in MatTranspose_SeqAIJ() local 81 PetscCall(PetscMalloc1(ai[am], &atj)); in MatTranspose_SeqAIJ() 84 for (i = 0; i < ai[am]; i++) ati[aj[i] + 1] += 1; in MatTranspose_SeqAIJ() 87 PetscCall(PetscMalloc1(ai[am], &ata)); in MatTranspose_SeqAIJ() 102 for (i = 0; i < am; i++) { in MatTranspose_SeqAIJ() [all …]
|
| H A D | matmatmult.c | 148 PetscInt am = A->rmap->N, bn = B->cmap->N, bm = B->rmap->N; in MatMatMultSymbolic_SeqAIJ_SeqAIJ_LLCondensed() local 159 PetscCall(PetscMalloc1(am + 2, &ci)); in MatMatMultSymbolic_SeqAIJ_SeqAIJ_LLCondensed() 171 …PetscCall(PetscFreeSpaceGet(PetscRealIntMultTruncate(fill, PetscIntSumTruncate(ai[am], bi[bm])), &… in MatMatMultSymbolic_SeqAIJ_SeqAIJ_LLCondensed() 176 for (i = 0; i < am; i++) { in MatMatMultSymbolic_SeqAIJ_SeqAIJ_LLCondensed() 210 PetscCall(PetscMalloc1(ci[am] + 1, &cj)); in MatMatMultSymbolic_SeqAIJ_SeqAIJ_LLCondensed() 215 …PetscCall(MatSetSeqAIJWithArrays_private(PetscObjectComm((PetscObject)A), am, bn, ci, cj, NULL, ((… in MatMatMultSymbolic_SeqAIJ_SeqAIJ_LLCondensed() 229 afill = (PetscReal)ci[am] / (ai[am] + bi[bm]) + 1.e-5; in MatMatMultSymbolic_SeqAIJ_SeqAIJ_LLCondensed() 236 if (ci[am]) { in MatMatMultSymbolic_SeqAIJ_SeqAIJ_LLCondensed() 253 PetscInt am = A->rmap->n, cm = C->rmap->n; in MatMatMultNumeric_SeqAIJ_SeqAIJ_Sorted() local 284 for (i = 0; i < am; i++) { in MatMatMultNumeric_SeqAIJ_SeqAIJ_Sorted() [all …]
|
| H A D | aijfact.c | 2056 PetscInt reallocs = 0, i, *ai = a->i, *aj = a->j, am = A->rmap->n, *ui, *udiag; in MatICCFactorSymbolic_SeqAIJ() local 2075 PetscCall(PetscShmgetAllocateArray(am + 1, sizeof(PetscInt), (void **)&ui)); in MatICCFactorSymbolic_SeqAIJ() 2076 PetscCall(PetscMalloc1(am + 1, &udiag)); in MatICCFactorSymbolic_SeqAIJ() 2081 for (i = 0; i < am; i++) { in MatICCFactorSymbolic_SeqAIJ() 2086 PetscCall(PetscMalloc1(ui[am] + 1, &uj)); in MatICCFactorSymbolic_SeqAIJ() 2088 for (i = 0; i < am; i++) { in MatICCFactorSymbolic_SeqAIJ() 2099 PetscCall(PetscMalloc1(am + 1, &ajtmp)); in MatICCFactorSymbolic_SeqAIJ() 2103 PetscCall(PetscMalloc4(am, &uj_ptr, am, &uj_lvl_ptr, am, &jl, am, &il)); in MatICCFactorSymbolic_SeqAIJ() 2104 for (i = 0; i < am; i++) { in MatICCFactorSymbolic_SeqAIJ() 2105 jl[i] = am; in MatICCFactorSymbolic_SeqAIJ() [all …]
|
| H A D | matrart.c | 109 …PetscInt cn = B->cmap->n, bm = B->rmap->n, col, i, j, n, *ai = a->i, *aj, am = A->rmap->… in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense() local 110 PetscInt am2 = 2 * am, am3 = 3 * am, bm4 = 4 * bm; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense() 118 …eck(am == R->cmap->n, PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Number columns in R %" PetscInt_FMT " n… in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense() 146 c2 = c + am; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense() 147 c3 = c2 + am; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense() 148 c4 = c3 + am; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense() 150 for (i = 0; i < am; i++) { /* over rows of A in those columns */ in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense() 162 c[am + i] = r2; in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense() 191 for (i = 0; i < am; i++) { /* over rows of A in those columns */ in MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqDense()
|
| H A D | matptap.c | 70 PetscInt an = A->cmap->N, am = A->rmap->N, pn = P->cmap->N, pm = P->rmap->N; in MatPtAPSymbolic_SeqAIJ_SeqAIJ_SparseAxpy() local 94 …PetscCall(PetscFreeSpaceGet(PetscRealIntMultTruncate(fill, PetscIntSumTruncate(ai[am], pi[pm])), &… in MatPtAPSymbolic_SeqAIJ_SeqAIJ_SparseAxpy() 169 afill = (PetscReal)ci[pn] / (ai[am] + pi[pm] + 1.e-5); in MatPtAPSymbolic_SeqAIJ_SeqAIJ_SparseAxpy() 195 PetscInt am = A->rmap->N, cn = C->cmap->N, cm = C->rmap->N; in MatPtAPNumeric_SeqAIJ_SeqAIJ_SparseAxpy() local 222 for (i = 0; i < am; i++) { in MatPtAPNumeric_SeqAIJ_SeqAIJ_SparseAxpy()
|
| /petsc/src/mat/impls/aij/seq/bas/ |
| H A D | basfactor.c | 10 PetscInt reallocs = 0, i, *ai = a->i, *aj = a->j, am = A->rmap->n, *ui; in MatICCFactorSymbolic_SeqAIJ_Bas() local 27 PetscCall(PetscMalloc1(am + 1, &ui)); in MatICCFactorSymbolic_SeqAIJ_Bas() 30 for (i = 0; i < am; i++) ui[i + 1] = ui[i] + ai[i + 1] - adiag[i]; in MatICCFactorSymbolic_SeqAIJ_Bas() 31 PetscCall(PetscMalloc1(ui[am] + 1, &uj)); in MatICCFactorSymbolic_SeqAIJ_Bas() 33 for (i = 0; i < am; i++) { in MatICCFactorSymbolic_SeqAIJ_Bas() 43 PetscCall(spbas_pattern_only(am, am, ai, aj, &Pattern_0)); in MatICCFactorSymbolic_SeqAIJ_Bas() 63 PetscCall(PetscMalloc1(ui[am], &b->a)); in MatICCFactorSymbolic_SeqAIJ_Bas() 78 PetscCall(PetscMalloc1(am, &b->solve_work)); in MatICCFactorSymbolic_SeqAIJ_Bas() 79 b->maxnz = b->nz = ui[am]; in MatICCFactorSymbolic_SeqAIJ_Bas() 85 if (ai[am] != 0) { in MatICCFactorSymbolic_SeqAIJ_Bas() [all …]
|
| /petsc/src/mat/tests/ |
| H A D | ex104.c | 12 PetscInt i, M = 10, N = 5, j, nrows, ncols, am, an, rstart, rend; in main() local 134 PetscCall(MatGetLocalSize(A, &am, &an)); in main() 137 PetscCall(MatSetSizes(C, PETSC_DECIDE, PETSC_DECIDE, am, am)); in main() 139 PetscCall(MatSetSizes(C, am, am, PETSC_DECIDE, PETSC_DECIDE)); in main() 163 PetscInt am, an, aM, aN; in main() local 165 PetscCall(MatGetLocalSize(A, &am, &an)); in main()
|
| H A D | ex122.c | 12 PetscInt nza, am, an; in main() local 33 PetscCall(MatGetLocalSize(A, &am, &an)); in main() 35 PetscCall(MatSetSizes(B, PETSC_DECIDE, am, N, PETSC_DECIDE)); in main()
|
| H A D | ex109.c | 8 PetscInt i, M, N, Istart, Iend, n = 7, j, J, Ii, m = 8, am, an; in main() local 34 am = Iend - Istart; in main() 62 PetscCall(MatGetLocalSize(A, &am, &an)); in main() 75 PetscCall(MatSetSizes(C, am, PETSC_DECIDE, PETSC_DECIDE, N)); in main()
|
| /petsc/src/mat/impls/baij/seq/ |
| H A D | baijfact.c | 890 PetscInt i, j, am = a->mbs; in MatCholeskyFactorNumeric_SeqBAIJ_N_NaturalOrdering() local 901 PetscCall(PetscMalloc3(am, &rtmp, am, &il, am, &jl)); in MatCholeskyFactorNumeric_SeqBAIJ_N_NaturalOrdering() 905 for (i = 0; i < am; i++) { in MatCholeskyFactorNumeric_SeqBAIJ_N_NaturalOrdering() 907 jl[i] = am; in MatCholeskyFactorNumeric_SeqBAIJ_N_NaturalOrdering() 911 for (k = 0; k < am; k++) { in MatCholeskyFactorNumeric_SeqBAIJ_N_NaturalOrdering() 1022 PetscInt reallocs = 0, i, *ai = a->i, *aj = a->j, am = a->mbs, bs = A->rmap->bs, *ui; in MatICCFactorSymbolic_SeqBAIJ() local 1054 PetscCall(PetscMalloc1(am + 1, &ui)); in MatICCFactorSymbolic_SeqBAIJ() 1055 …for (i = 0; i < am; i++) ui[i] = ai[i + 1] - adiag[i]; /* ui: rowlengths - changes when !perm_iden… in MatICCFactorSymbolic_SeqBAIJ() 1061 for (i = 0; i < am; i++) { in MatICCFactorSymbolic_SeqBAIJ() 1079 PetscCall(PetscMalloc1(am + 1, &ui)); in MatICCFactorSymbolic_SeqBAIJ() [all …]
|
| /petsc/src/mat/utils/ |
| H A D | multequal.c | 14 PetscInt am, an, bm, bn, k; in MatMultEqual_Private() local 29 PetscCall(MatGetLocalSize(A, &am, &an)); in MatMultEqual_Private() 31 …am == bm && an == bn, PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Mat A,Mat B: local dim %" PetscInt_FMT … in MatMultEqual_Private() 121 PetscInt am, an, bm, bn, cm, cn, k; in MatMatMultEqual_Private() local 138 PetscCall(MatGetLocalSize(A, &am, &an)); in MatMatMultEqual_Private() 143 an = am; in MatMatMultEqual_Private() 144 am = tt; in MatMatMultEqual_Private() 151 …am == cm && bn == cn, PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Mat A, B, C local dim %" PetscInt_FMT "… in MatMatMultEqual_Private() 442 PetscInt i, am, an, bm, bn, cm, cn; in MatProjMultEqual_Private() local 446 PetscCall(MatGetLocalSize(A, &am, &an)); in MatProjMultEqual_Private() [all …]
|
| /petsc/src/mat/impls/aij/mpi/ |
| H A D | mpiptap.c | 103 PetscInt i, rstart, rend, cm, ncols, row, *api, *apj, am = A->rmap->n, apnz, nout; in MatPtAPNumeric_MPIAIJ_MPIAIJ_scalable() local 141 for (i = 0; i < am; i++) { in MatPtAPNumeric_MPIAIJ_MPIAIJ_scalable() 223 PetscInt am = A->rmap->n, pm = P->rmap->n, pN = P->cmap->N, pn = P->cmap->n; in MatPtAPSymbolic_MPIAIJ_MPIAIJ_scalable() local 290 …et(PetscRealIntMultTruncate(fill, PetscIntSumTruncate(ad->i[am], PetscIntSumTruncate(ao->i[am], p_… in MatPtAPSymbolic_MPIAIJ_MPIAIJ_scalable() 292 …PetscCall(PetscFreeSpaceGet(PetscRealIntMultTruncate(fill, PetscIntSumTruncate(ad->i[am], p_loc->i… in MatPtAPSymbolic_MPIAIJ_MPIAIJ_scalable() 297 PetscCall(PetscMalloc1(am + 1, &api)); in MatPtAPSymbolic_MPIAIJ_MPIAIJ_scalable() 299 for (i = 0; i < am; i++) { in MatPtAPSymbolic_MPIAIJ_MPIAIJ_scalable() 343 PetscCall(PetscCalloc2(api[am], &apj, api[am], &apv)); in MatPtAPSymbolic_MPIAIJ_MPIAIJ_scalable() 348 PetscCall(MatCreateSeqAIJWithArrays(PETSC_COMM_SELF, am, pN, api, apj, apv, &ptap->AP_loc)); in MatPtAPSymbolic_MPIAIJ_MPIAIJ_scalable() 353 apfill = (PetscReal)api[am] / (ad->i[am] + ao->i[am] + p_loc->i[pm] + 1); in MatPtAPSymbolic_MPIAIJ_MPIAIJ_scalable() [all …]
|
| H A D | mpimatmatmult.c | 203 PetscInt am = A->rmap->n, pN = P->cmap->N, pn = P->cmap->n, pm = P->rmap->n; in MatMatMultSymbolic_MPIAIJ_MPIAIJ_nonscalable() local 237 PetscCall(PetscMalloc1(am + 1, &api)); in MatMatMultSymbolic_MPIAIJ_MPIAIJ_nonscalable() 245 …ceGet(PetscRealIntMultTruncate(fill, PetscIntSumTruncate(adi[am], PetscIntSumTruncate(aoi[am], pi_… in MatMatMultSymbolic_MPIAIJ_MPIAIJ_nonscalable() 248 MatPreallocateBegin(comm, am, pn, dnz, onz); in MatMatMultSymbolic_MPIAIJ_MPIAIJ_nonscalable() 249 for (i = 0; i < am; i++) { in MatMatMultSymbolic_MPIAIJ_MPIAIJ_nonscalable() 293 PetscCall(PetscMalloc1(api[am], &ptap->apj)); in MatMatMultSymbolic_MPIAIJ_MPIAIJ_nonscalable() 302 PetscCall(MatSetSizes(C, am, pn, PETSC_DETERMINE, PETSC_DETERMINE)); in MatMatMultSymbolic_MPIAIJ_MPIAIJ_nonscalable() 324 afill = (PetscReal)api[am] / (adi[am] + aoi[am] + pi_loc[pm] + 1) + 1.e-5; in MatMatMultSymbolic_MPIAIJ_MPIAIJ_nonscalable() 331 if (api[am]) { in MatMatMultSymbolic_MPIAIJ_MPIAIJ_nonscalable() 810 PetscInt am = A->rmap->n, pn = P->cmap->n, pm = P->rmap->n, lsize = pn + 20; in MatMatMultSymbolic_MPIAIJ_MPIAIJ() local [all …]
|
| /petsc/src/mat/impls/sbaij/seq/ |
| H A D | sbaijfact2.c | 2474 PetscInt bs = A->rmap->bs, am = a->mbs, *ai = a->i, *aj = a->j; in MatICCFactorSymbolic_SeqSBAIJ() local 2498 PetscCall(PetscMalloc1(am + 1, &ui)); in MatICCFactorSymbolic_SeqSBAIJ() 2499 PetscCall(PetscMalloc1(am + 1, &udiag)); in MatICCFactorSymbolic_SeqSBAIJ() 2505 for (i = 0; i < am; i++) { in MatICCFactorSymbolic_SeqSBAIJ() 2510 PetscCall(PetscMalloc1(ui[am], &uj)); in MatICCFactorSymbolic_SeqSBAIJ() 2512 for (i = 0; i < am; i++) { in MatICCFactorSymbolic_SeqSBAIJ() 2524 PetscCall(PetscMalloc4(am, &uj_ptr, am, &uj_lvl_ptr, am, &il, am, &jl)); in MatICCFactorSymbolic_SeqSBAIJ() 2525 for (i = 0; i < am; i++) { in MatICCFactorSymbolic_SeqSBAIJ() 2526 jl[i] = am; in MatICCFactorSymbolic_SeqSBAIJ() 2531 nlnk = am + 1; in MatICCFactorSymbolic_SeqSBAIJ() [all …]
|
| /petsc/doc/community/meetings/2025/ |
| H A D | index.md | 15 - Monday, May 19 - Tutorial (tutorials begin at 9am) 16 - Tuesday, May 20 - Meeting (begin at 9am) 29 | 9:00 am | Introduction … 30 | 9:15 am | Tutorial I: Introductory PETSc … 40 | 9:00 am | Meeting Introduction … 41 | 9:05 am | A projection method for particle resampling … 42 | 9:30 am | Dense Broyden-Fletcher-Goldfarb-Shanno (BFGS) … 43 | 10:00 am | IBAMR: Immersed-Boundary Adaptive Mesh Refinement … 44 | 10:30 am | TaoTerm … 45 | 10:45 am | **Coffee Break** … [all …]
|
| /petsc/src/ksp/pc/tutorials/ |
| H A D | ex4.c | 166 …PetscInt boundary_indices_size, am, an, bm, bn, condensed_am, astart, aend, Dstart, Dend,… in main() local 202 PetscCall(MatGetSize(A, &am, NULL)); in main() 204 const PetscInt nc = am / 2; in main() 236 PetscCall(MatGetLocalSize(Acondensed, &am, &an)); in main()
|
| /petsc/doc/community/meetings/2023/ |
| H A D | index.md | 29 - Tuesday, June 6: 10:15 am to 5:30 pm 30 - Wednesday, June 7: 9 am to 3 pm 34 - Monday, June 5: 10 am to 12 pm 38 - Tuesday, June 6: 9 am to 10 am 75 | 10:00 am | Newbie tutorial ([Slides][s_00], [Video][v_00]) … 76 | 11:30 am | Follow-up questions and meetings … 77 | 12:00 am | **Lunch** for tutorial attendees and early arrivees … 95 | 9:00 am | Newbie Developer Workshop (optional) … 96 | 10:00 am | **Coffee Break** … 97 | 10:15 am | Experiences in solving nonlinear eigenvalue problems with SLEPc ([Slides][s_10], [Vide… [all …]
|
| /petsc/src/ksp/pc/impls/ml/ |
| H A D | ml.c | 175 PetscInt am = A->rmap->n, an = A->cmap->n, i, j, k; in MatConvert_MPIAIJ_ML() local 179 …PetscCheck(am == an, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "A must have a square diagonal portion,… in MatConvert_MPIAIJ_ML() 183 PetscCall(PetscMalloc1(1 + am, &ci)); in MatConvert_MPIAIJ_ML() 185 for (i = 0; i < am; i++) ci[i + 1] = ci[i] + (ai[i + 1] - ai[i]) + (bi[i + 1] - bi[i]); in MatConvert_MPIAIJ_ML() 186 PetscCall(PetscMalloc1(1 + ci[am], &cj)); in MatConvert_MPIAIJ_ML() 187 PetscCall(PetscMalloc1(1 + ci[am], &ca)); in MatConvert_MPIAIJ_ML() 190 for (i = 0; i < am; i++) { in MatConvert_MPIAIJ_ML() 205 PetscCheck(k == ci[am], PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "k: %d != ci[am]: %d", k, ci[am]); in MatConvert_MPIAIJ_ML() 209 PetscCall(MatCreateSeqAIJWithArrays(PETSC_COMM_SELF, am, an, ci, cj, ca, Aloc)); in MatConvert_MPIAIJ_ML() 223 for (i = 0; i < am; i++) { in MatConvert_MPIAIJ_ML()
|
| /petsc/src/ts/tutorials/ |
| H A D | ex53.c | 1267 PetscReal a1, a2, am; 1314 am = (a1 + a2)/2.0; 1315 ym = PetscTanReal(am) - PetscRealPart(A1/A2)*am; 1318 a1 = am; 1320 a2 = am; 1324 am = a2; 1327 zeroArray[i-1] = am; 1515 PetscReal a1, a2, am; in mandelZeros() local 1541 am = a1; in mandelZeros() 1545 am = (a1 + a2) / 2.0; in mandelZeros() [all …]
|
| /petsc/src/ksp/pc/tests/ |
| H A D | ex5.c | 33 PCMGType am = PC_MG_MULTIPLICATIVE; in main() local 49 if (flg) am = PC_MG_ADDITIVE; in main() 51 if (flg) am = PC_MG_FULL; in main() 69 PetscCall(PCMGSetType(pcmg, am)); in main()
|
| /petsc/src/ksp/pc/impls/mg/ |
| H A D | mg.c | 344 PCMGType mgtype = mg->am; in PCMGSetLevels_MG() 633 if (mg->am == PC_MG_MULTIPLICATIVE) { in PCApply_MG_Internal() 637 } else if (mg->am == PC_MG_ADDITIVE) { in PCApply_MG_Internal() 639 } else if (mg->am == PC_MG_KASKADE) { in PCApply_MG_Internal() 722 mgtype = mg->am; in PCSetFromOptions_MG() 725 if (mg->am == PC_MG_MULTIPLICATIVE) { in PCSetFromOptions_MG() 785 …iewer, " type is %s, levels=%" PetscInt_FMT " cycles=%s\n", PCMGTypes[mg->am], levels, cyclename)… in PCView_MG() 786 …if (mg->am == PC_MG_MULTIPLICATIVE) PetscCall(PetscViewerASCIIPrintf(viewer, " Cycles per PCApp… in PCView_MG() 1168 …if (mglevels[i]->smoothu == mglevels[i]->smoothd || mg->am == PC_MG_FULL || mg->am == PC_MG_KASKAD… in PCSetUp_MG() 1366 mg->am = form; in PCMGSetType() [all …]
|
| /petsc/include/petsc/private/ |
| H A D | pcmgimpl.h | 54 PCMGType am; /* Multiplicative, additive or full */ member
|
| /petsc/ |
| H A D | CONTRIBUTING | 29 by me, under the same open-source license (unless I am
|
| /petsc/doc/community/bofs/ |
| H A D | 2026_Feb_CASS.md | 12 **Time:** Feb 11, 2026, 10:00am - 11:30am (Central Time, US and Canada)
|