Lines Matching refs:ctx

65   MatCeedContext ctx;  in MatCeedAssemblePointBlockDiagonalCOO()  local
68 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatCeedAssemblePointBlockDiagonalCOO()
74 for (PetscInt i = 0; i < ctx->num_mats_assembled_pbd; i++) { in MatCeedAssemblePointBlockDiagonalCOO()
75 if (ctx->mats_assembled_pbd[i] == mat_coo) index = i; in MatCeedAssemblePointBlockDiagonalCOO()
91 …PetscCallCeed(ctx->ceed, CeedOperatorLinearAssemblePointBlockDiagonalSymbolic(ctx->op_mult, &num_e… in MatCeedAssemblePointBlockDiagonalCOO()
98 …if (!ctx->coo_values_pbd) PetscCallCeed(ctx->ceed, CeedVectorCreate(ctx->ceed, num_entries, &ctx->… in MatCeedAssemblePointBlockDiagonalCOO()
99 … PetscCall(PetscRealloc(++ctx->num_mats_assembled_pbd * sizeof(Mat), &ctx->mats_assembled_pbd)); in MatCeedAssemblePointBlockDiagonalCOO()
100 ctx->mats_assembled_pbd[ctx->num_mats_assembled_pbd - 1] = mat_coo; in MatCeedAssemblePointBlockDiagonalCOO()
121 …PetscCallCeed(ctx->ceed, CeedOperatorLinearAssemblePointBlockDiagonal(ctx->op_mult, ctx->coo_value… in MatCeedAssemblePointBlockDiagonalCOO()
123 PetscCallCeed(ctx->ceed, CeedVectorGetArrayRead(ctx->coo_values_pbd, mem_type, &values)); in MatCeedAssemblePointBlockDiagonalCOO()
127 PetscCallCeed(ctx->ceed, CeedVectorRestoreArrayRead(ctx->coo_values_pbd, &values)); in MatCeedAssemblePointBlockDiagonalCOO()
146 MatCeedContext ctx; in MatCeedAssembleInnerBlockDiagonalMat() local
149 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatCeedAssembleInnerBlockDiagonalMat()
152 …if (!ctx->mat_assembled_pbd_internal) PetscCall(MatCeedCreateMatCOO(mat_ceed, &ctx->mat_assembled_… in MatCeedAssembleInnerBlockDiagonalMat()
155 PetscCall(MatCeedAssemblePointBlockDiagonalCOO(mat_ceed, ctx->mat_assembled_pbd_internal)); in MatCeedAssembleInnerBlockDiagonalMat()
156 if (mat_inner) *mat_inner = ctx->mat_assembled_pbd_internal; in MatCeedAssembleInnerBlockDiagonalMat()
159 …if (!ctx->mat_assembled_full_internal) PetscCall(MatCeedCreateMatCOO(mat_ceed, &ctx->mat_assembled… in MatCeedAssembleInnerBlockDiagonalMat()
162 PetscCall(MatCeedAssembleCOO(mat_ceed, ctx->mat_assembled_full_internal)); in MatCeedAssembleInnerBlockDiagonalMat()
163 if (mat_inner) *mat_inner = ctx->mat_assembled_full_internal; in MatCeedAssembleInnerBlockDiagonalMat()
179 MatCeedContext ctx; in MatGetVariableBlockDiagonal_Ceed() local
182 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatGetVariableBlockDiagonal_Ceed()
185 PetscCall(MatCeedAssembleInnerBlockDiagonalMat(mat_ceed, ctx->is_ceed_vpbd_valid, mat_vblock)); in MatGetVariableBlockDiagonal_Ceed()
201 MatCeedContext ctx; in MatGetBlockDiagonal_Ceed() local
204 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatGetBlockDiagonal_Ceed()
207 PetscCall(MatCeedAssembleInnerBlockDiagonalMat(mat_ceed, ctx->is_ceed_pbd_valid, mat_block)); in MatGetBlockDiagonal_Ceed()
226 MatCeedContext ctx; in MatGetDiagonalBlock_Ceed() local
229 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatGetDiagonalBlock_Ceed()
232 …if (!ctx->mat_assembled_full_internal) PetscCall(MatCeedCreateMatCOO(mat_ceed, &ctx->mat_assembled… in MatGetDiagonalBlock_Ceed()
235 PetscCall(MatCeedAssembleCOO(mat_ceed, ctx->mat_assembled_full_internal)); in MatGetDiagonalBlock_Ceed()
238 PetscCall(MatGetDiagonalBlock(ctx->mat_assembled_full_internal, mat_block)); in MatGetDiagonalBlock_Ceed()
256 MatCeedContext ctx; in MatView_Ceed() local
260 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatView_Ceed()
278 PetscCall(PetscViewerASCIIPrintf(viewer, "Default COO MatType: %s\n", ctx->coo_mat_type)); in MatView_Ceed()
281 …PetscCall(PetscViewerASCIIPrintf(viewer, "libCEED PB Diagonal Assembly: %s\n", ctx->is_ceed_pbd_va… in MatView_Ceed()
282 …PetscCall(PetscViewerASCIIPrintf(viewer, "libCEED VPB Diagonal Assembly: %s\n", ctx->is_ceed_vpbd_… in MatView_Ceed()
285 if (is_detailed) PetscCallCeed(ctx->ceed, CeedOperatorView(ctx->op_mult, file)); in MatView_Ceed()
286 else PetscCallCeed(ctx->ceed, CeedOperatorViewTerse(ctx->op_mult, file)); in MatView_Ceed()
288 if (ctx->op_mult_transpose) { in MatView_Ceed()
291 if (is_detailed) PetscCallCeed(ctx->ceed, CeedOperatorView(ctx->op_mult_transpose, file)); in MatView_Ceed()
292 else PetscCallCeed(ctx->ceed, CeedOperatorViewTerse(ctx->op_mult_transpose, file)); in MatView_Ceed()
320 MatCeedContext ctx; in MatCreateCeed() local
359 MATCEED_MULT_CEEDOP, MATCEED_MULT_TRANSPOSE_CEEDOP, &ctx)); in MatCreateCeed()
365 …CreateShell(PetscObjectComm((PetscObject)dm_x), Y_l_size, X_l_size, Y_g_size, X_g_size, ctx, mat)); in MatCreateCeed()
402 ctx->is_ceed_pbd_valid = PETSC_TRUE; in MatCreateCeed()
403 ctx->is_ceed_vpbd_valid = PETSC_TRUE; in MatCreateCeed()
404 PetscCallCeed(ctx->ceed, CeedOperatorIsComposite(op_mult, &is_composite)); in MatCreateCeed()
409 PetscCallCeed(ctx->ceed, CeedOperatorCompositeGetNumSub(op_mult, &num_sub_operators)); in MatCreateCeed()
410 PetscCallCeed(ctx->ceed, CeedOperatorCompositeGetSubList(op_mult, &sub_operators)); in MatCreateCeed()
416 … PetscCallCeed(ctx->ceed, CeedOperatorGetOperatorAssemblyData(sub_operators[i], &assembly_data)); in MatCreateCeed()
417 …PetscCallCeed(ctx->ceed, CeedOperatorAssemblyDataGetBases(assembly_data, &num_bases, &active_bases… in MatCreateCeed()
418 PetscCallCeed(ctx->ceed, CeedBasisGetNumComponents(active_bases[0], &num_comp)); in MatCreateCeed()
420 ctx->is_ceed_pbd_valid = PETSC_FALSE; in MatCreateCeed()
421 ctx->is_ceed_vpbd_valid = PETSC_FALSE; in MatCreateCeed()
423 if (num_comp != block_size) ctx->is_ceed_pbd_valid = PETSC_FALSE; in MatCreateCeed()
424 if (num_comp < max_vblock_size) ctx->is_ceed_vpbd_valid = PETSC_FALSE; in MatCreateCeed()
432 PetscCallCeed(ctx->ceed, CeedOperatorGetOperatorAssemblyData(op_mult, &assembly_data)); in MatCreateCeed()
433 …PetscCallCeed(ctx->ceed, CeedOperatorAssemblyDataGetBases(assembly_data, &num_bases, &active_bases… in MatCreateCeed()
434 PetscCallCeed(ctx->ceed, CeedBasisGetNumComponents(active_bases[0], &num_comp)); in MatCreateCeed()
436 ctx->is_ceed_pbd_valid = PETSC_FALSE; in MatCreateCeed()
437 ctx->is_ceed_vpbd_valid = PETSC_FALSE; in MatCreateCeed()
439 if (num_comp != block_size) ctx->is_ceed_pbd_valid = PETSC_FALSE; in MatCreateCeed()
440 if (num_comp < max_vblock_size) ctx->is_ceed_vpbd_valid = PETSC_FALSE; in MatCreateCeed()
446 local_is_valid[0] = local_is_valid[1] = ctx->is_ceed_pbd_valid; in MatCreateCeed()
448 ctx->is_ceed_pbd_valid = global_is_valid[0]; in MatCreateCeed()
449 local_is_valid[0] = local_is_valid[1] = ctx->is_ceed_vpbd_valid; in MatCreateCeed()
451 ctx->is_ceed_vpbd_valid = global_is_valid[0]; in MatCreateCeed()
462 PetscCall(VecGetType(ctx->X_loc, &vec_type)); in MatCreateCeed()
466 PetscCall(PetscStrallocpy(coo_mat_type, &ctx->coo_mat_type)); in MatCreateCeed()
529 MatCeedContext ctx; in MatCeedCopy() local
532 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatCeedCopy()
533 PetscCall(MatCeedContextReference(ctx)); in MatCeedCopy()
534 PetscCall(MatShellSetContext(mat_other, ctx)); in MatCeedCopy()
538 …if (ctx->op_mult_transpose) PetscCall(MatShellSetOperation(mat_other, MATOP_MULT_TRANSPOSE, (void … in MatCeedCopy()
556 PetscCall(DMGetVecType(ctx->dm_x, &vec_type)); in MatCeedCopy()
573 MatCeedContext ctx; in MatCeedSetAssemblyDataUpdateNeeded() local
576 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatCeedSetAssemblyDataUpdateNeeded()
577 …PetscCallCeed(ctx->ceed, CeedOperatorSetQFunctionAssemblyDataUpdateNeeded(ctx->op_mult, update_nee… in MatCeedSetAssemblyDataUpdateNeeded()
578 if (ctx->op_mult_transpose) { in MatCeedSetAssemblyDataUpdateNeeded()
579 …PetscCallCeed(ctx->ceed, CeedOperatorSetQFunctionAssemblyDataUpdateNeeded(ctx->op_mult_transpose, … in MatCeedSetAssemblyDataUpdateNeeded()
599 MatCeedContext ctx; in MatCeedCreateMatCOO() local
602 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatCeedCreateMatCOO()
604 …PetscCheck(ctx->dm_x == ctx->dm_y, PetscObjectComm((PetscObject)mat_ceed), PETSC_ERR_SUP, "COO ass… in MatCeedCreateMatCOO()
621 PetscCall(PetscFree(ctx->coo_mat_type)); in MatCeedCreateMatCOO()
622 PetscCall(PetscStrallocpy(coo_mat_type_cl, &ctx->coo_mat_type)); in MatCeedCreateMatCOO()
631 PetscCall(DMGetMatType(ctx->dm_x, &dm_mat_type)); in MatCeedCreateMatCOO()
633 PetscCall(DMSetMatType(ctx->dm_x, ctx->coo_mat_type)); in MatCeedCreateMatCOO()
634 PetscCall(DMCreateMatrix(ctx->dm_x, mat_coo)); in MatCeedCreateMatCOO()
635 PetscCall(DMSetMatType(ctx->dm_x, dm_mat_type_copy)); in MatCeedCreateMatCOO()
653 MatCeedContext ctx; in MatCeedSetPreallocationCOO() local
656 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatCeedSetPreallocationCOO()
672 …PetscCallCeed(ctx->ceed, CeedOperatorLinearAssembleSymbolic(ctx->op_mult, &num_entries, &rows_ceed… in MatCeedSetPreallocationCOO()
679 …if (!ctx->coo_values_full) PetscCallCeed(ctx->ceed, CeedVectorCreate(ctx->ceed, num_entries, &ctx-… in MatCeedSetPreallocationCOO()
680 … PetscCall(PetscRealloc(++ctx->num_mats_assembled_full * sizeof(Mat), &ctx->mats_assembled_full)); in MatCeedSetPreallocationCOO()
681 ctx->mats_assembled_full[ctx->num_mats_assembled_full - 1] = mat_coo; in MatCeedSetPreallocationCOO()
701 MatCeedContext ctx; in MatCeedAssembleCOO() local
704 PetscCall(MatShellGetContext(mat_ceed, &ctx)); in MatCeedAssembleCOO()
710 for (PetscInt i = 0; i < ctx->num_mats_assembled_full; i++) { in MatCeedAssembleCOO()
711 if (ctx->mats_assembled_full[i] == mat_coo) index = i; in MatCeedAssembleCOO()
731 PetscCallCeed(ctx->ceed, CeedOperatorLinearAssemble(ctx->op_mult, ctx->coo_values_full)); in MatCeedAssembleCOO()
733 PetscCallCeed(ctx->ceed, CeedVectorGetArrayRead(ctx->coo_values_full, mem_type, &values)); in MatCeedAssembleCOO()
737 PetscCallCeed(ctx->ceed, CeedVectorRestoreArrayRead(ctx->coo_values_full, &values)); in MatCeedAssembleCOO()
757 MatCeedContext ctx; in MatCeedSetContextDouble() local
760 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedSetContextDouble()
764 PetscCallCeed(ctx->ceed, CeedOperatorGetContextFieldLabel(ctx->op_mult, name, &label)); in MatCeedSetContextDouble()
770 PetscCallCeed(ctx->ceed, CeedOperatorSetContextDouble(ctx->op_mult, label, &value)); in MatCeedSetContextDouble()
774 if (ctx->op_mult_transpose) { in MatCeedSetContextDouble()
776 … PetscCallCeed(ctx->ceed, CeedOperatorGetContextFieldLabel(ctx->op_mult_transpose, name, &label)); in MatCeedSetContextDouble()
782 … PetscCallCeed(ctx->ceed, CeedOperatorSetContextDouble(ctx->op_mult_transpose, label, &value)); in MatCeedSetContextDouble()
807 MatCeedContext ctx; in MatCeedGetContextDouble() local
810 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedGetContextDouble()
813 CeedOperator op = ctx->op_mult; in MatCeedGetContextDouble()
815 PetscCallCeed(ctx->ceed, CeedOperatorGetContextFieldLabel(op, name, &label)); in MatCeedGetContextDouble()
816 if (!label && ctx->op_mult_transpose) { in MatCeedGetContextDouble()
817 op = ctx->op_mult_transpose; in MatCeedGetContextDouble()
818 PetscCallCeed(ctx->ceed, CeedOperatorGetContextFieldLabel(op, name, &label)); in MatCeedGetContextDouble()
824 … PetscCallCeed(ctx->ceed, CeedOperatorGetContextDoubleRead(op, label, &num_values, &values_ceed)); in MatCeedGetContextDouble()
826 PetscCallCeed(ctx->ceed, CeedOperatorRestoreContextDoubleRead(op, label, &values_ceed)); in MatCeedGetContextDouble()
970 PetscErrorCode MatCeedSetContext(Mat mat, PetscCtxDestroyFn f, void *ctx) { in MatCeedSetContext() argument
974 if (ctx) { in MatCeedSetContext()
976 PetscCall(PetscContainerSetPointer(user_ctx, ctx)); in MatCeedSetContext()
994 PetscErrorCode MatCeedGetContext(Mat mat, void *ctx) { in MatCeedGetContext() argument
999 if (user_ctx) PetscCall(PetscContainerGetPointer(user_ctx, (void **)ctx)); in MatCeedGetContext()
1000 else *(void **)ctx = NULL; in MatCeedGetContext()
1034 MatCeedContext ctx; in MatCeedSetCOOMatType() local
1037 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedSetCOOMatType()
1043 PetscCall(PetscStrlen(ctx->coo_mat_type, &len_old)); in MatCeedSetCOOMatType()
1045 if (len_old == len_new) PetscCall(PetscStrncmp(ctx->coo_mat_type, type, len_old, &is_same)); in MatCeedSetCOOMatType()
1050 if (ctx->mat_assembled_full_internal) { in MatCeedSetCOOMatType()
1051 for (PetscInt i = 0; i < ctx->num_mats_assembled_full; i++) { in MatCeedSetCOOMatType()
1052 if (ctx->mats_assembled_full[i] == ctx->mat_assembled_full_internal) { in MatCeedSetCOOMatType()
1053 for (PetscInt j = i + 1; j < ctx->num_mats_assembled_full; j++) { in MatCeedSetCOOMatType()
1054 ctx->mats_assembled_full[j - 1] = ctx->mats_assembled_full[j]; in MatCeedSetCOOMatType()
1056 ctx->num_mats_assembled_full--; in MatCeedSetCOOMatType()
1058 PetscCall(MatDestroy(&ctx->mat_assembled_full_internal)); in MatCeedSetCOOMatType()
1062 if (ctx->mat_assembled_pbd_internal) { in MatCeedSetCOOMatType()
1063 for (PetscInt i = 0; i < ctx->num_mats_assembled_pbd; i++) { in MatCeedSetCOOMatType()
1064 if (ctx->mats_assembled_pbd[i] == ctx->mat_assembled_pbd_internal) { in MatCeedSetCOOMatType()
1065 for (PetscInt j = i + 1; j < ctx->num_mats_assembled_pbd; j++) { in MatCeedSetCOOMatType()
1066 ctx->mats_assembled_pbd[j - 1] = ctx->mats_assembled_pbd[j]; in MatCeedSetCOOMatType()
1069 ctx->num_mats_assembled_pbd--; in MatCeedSetCOOMatType()
1070 PetscCall(MatDestroy(&ctx->mat_assembled_pbd_internal)); in MatCeedSetCOOMatType()
1074 PetscCall(PetscFree(ctx->coo_mat_type)); in MatCeedSetCOOMatType()
1075 PetscCall(PetscStrallocpy(type, &ctx->coo_mat_type)); in MatCeedSetCOOMatType()
1091 MatCeedContext ctx; in MatCeedGetCOOMatType() local
1094 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedGetCOOMatType()
1095 *type = ctx->coo_mat_type; in MatCeedGetCOOMatType()
1111 MatCeedContext ctx; in MatCeedSetLocalVectors() local
1114 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedSetLocalVectors()
1118 PetscCall(VecGetSize(ctx->X_loc, &len_old)); in MatCeedSetLocalVectors()
1122 PetscCall(VecReferenceCopy(X_loc, &ctx->X_loc)); in MatCeedSetLocalVectors()
1127 PetscCall(VecGetSize(ctx->Y_loc_transpose, &len_old)); in MatCeedSetLocalVectors()
1131 PetscCall(VecReferenceCopy(Y_loc_transpose, &ctx->Y_loc_transpose)); in MatCeedSetLocalVectors()
1148 MatCeedContext ctx; in MatCeedGetLocalVectors() local
1151 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedGetLocalVectors()
1154 PetscCall(VecReferenceCopy(ctx->X_loc, X_loc)); in MatCeedGetLocalVectors()
1158 PetscCall(VecReferenceCopy(ctx->Y_loc_transpose, Y_loc_transpose)); in MatCeedGetLocalVectors()
1193 MatCeedContext ctx; in MatCeedGetCeedOperators() local
1196 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedGetCeedOperators()
1199 PetscCallCeed(ctx->ceed, CeedOperatorReferenceCopy(ctx->op_mult, op_mult)); in MatCeedGetCeedOperators()
1203 PetscCallCeed(ctx->ceed, CeedOperatorReferenceCopy(ctx->op_mult_transpose, op_mult_transpose)); in MatCeedGetCeedOperators()
1220 MatCeedContext ctx; in MatCeedRestoreCeedOperators() local
1223 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedRestoreCeedOperators()
1224 if (op_mult) PetscCallCeed(ctx->ceed, CeedOperatorDestroy(op_mult)); in MatCeedRestoreCeedOperators()
1225 if (op_mult_transpose) PetscCallCeed(ctx->ceed, CeedOperatorDestroy(op_mult_transpose)); in MatCeedRestoreCeedOperators()
1241 MatCeedContext ctx; in MatCeedSetLogEvents() local
1244 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedSetLogEvents()
1245 if (log_event_mult) ctx->log_event_mult = log_event_mult; in MatCeedSetLogEvents()
1246 if (log_event_mult_transpose) ctx->log_event_mult_transpose = log_event_mult_transpose; in MatCeedSetLogEvents()
1262 MatCeedContext ctx; in MatCeedGetLogEvents() local
1265 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedGetLogEvents()
1266 if (log_event_mult) *log_event_mult = ctx->log_event_mult; in MatCeedGetLogEvents()
1267 if (log_event_mult_transpose) *log_event_mult_transpose = ctx->log_event_mult_transpose; in MatCeedGetLogEvents()
1283 MatCeedContext ctx; in MatCeedSetCeedOperatorLogEvents() local
1286 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedSetCeedOperatorLogEvents()
1287 if (log_event_mult) ctx->log_event_ceed_mult = log_event_mult; in MatCeedSetCeedOperatorLogEvents()
1288 if (log_event_mult_transpose) ctx->log_event_ceed_mult_transpose = log_event_mult_transpose; in MatCeedSetCeedOperatorLogEvents()
1304 MatCeedContext ctx; in MatCeedGetCeedOperatorLogEvents() local
1307 PetscCall(MatShellGetContext(mat, &ctx)); in MatCeedGetCeedOperatorLogEvents()
1308 if (log_event_mult) *log_event_mult = ctx->log_event_ceed_mult; in MatCeedGetCeedOperatorLogEvents()
1309 if (log_event_mult_transpose) *log_event_mult_transpose = ctx->log_event_ceed_mult_transpose; in MatCeedGetCeedOperatorLogEvents()
1338 … PetscLogEvent log_event_ceed_mult_transpose, MatCeedContext *ctx) { in MatCeedContextCreate() argument
1344 PetscCall(PetscNew(ctx)); in MatCeedContextCreate()
1345 (*ctx)->ref_count = 1; in MatCeedContextCreate()
1348 (*ctx)->log_event_mult = log_event_mult; in MatCeedContextCreate()
1349 (*ctx)->log_event_mult_transpose = log_event_mult_transpose; in MatCeedContextCreate()
1350 (*ctx)->log_event_ceed_mult = log_event_ceed_mult; in MatCeedContextCreate()
1351 (*ctx)->log_event_ceed_mult_transpose = log_event_ceed_mult_transpose; in MatCeedContextCreate()
1354 PetscCall(DMReferenceCopy(dm_x, &(*ctx)->dm_x)); in MatCeedContextCreate()
1355 PetscCall(DMReferenceCopy(dm_y, &(*ctx)->dm_y)); in MatCeedContextCreate()
1356 if (X_loc) PetscCall(VecReferenceCopy(X_loc, &(*ctx)->X_loc)); in MatCeedContextCreate()
1357 if (Y_loc_transpose) PetscCall(VecReferenceCopy(Y_loc_transpose, &(*ctx)->Y_loc_transpose)); in MatCeedContextCreate()
1365 PetscCall(VecGetArrayReadAndMemType(X, &x, &(*ctx)->mem_type)); in MatCeedContextCreate()
1371 …PetscCheck(CeedOperatorGetCeed(op_mult, &(*ctx)->ceed) == CEED_ERROR_SUCCESS, PETSC_COMM_SELF, PET… in MatCeedContextCreate()
1373 PetscCallCeed((*ctx)->ceed, CeedOperatorGetActiveVectorLengths(op_mult, &x_loc_len, &y_loc_len)); in MatCeedContextCreate()
1374 PetscCallCeed((*ctx)->ceed, CeedOperatorReferenceCopy(op_mult, &(*ctx)->op_mult)); in MatCeedContextCreate()
1375 …if (op_mult_transpose) PetscCallCeed((*ctx)->ceed, CeedOperatorReferenceCopy(op_mult_transpose, &(… in MatCeedContextCreate()
1376 PetscCallCeed((*ctx)->ceed, CeedVectorCreate((*ctx)->ceed, x_loc_len, &(*ctx)->x_loc)); in MatCeedContextCreate()
1377 PetscCallCeed((*ctx)->ceed, CeedVectorCreate((*ctx)->ceed, y_loc_len, &(*ctx)->y_loc)); in MatCeedContextCreate()
1383 PetscCallCeed((*ctx)->ceed, CeedOperatorGetFlopsEstimate(op_mult, &ceed_flops_estimate)); in MatCeedContextCreate()
1384 (*ctx)->flops_mult = ceed_flops_estimate; in MatCeedContextCreate()
1386 …PetscCallCeed((*ctx)->ceed, CeedOperatorGetFlopsEstimate(op_mult_transpose, &ceed_flops_estimate)); in MatCeedContextCreate()
1387 (*ctx)->flops_mult_transpose = ceed_flops_estimate; in MatCeedContextCreate()
1401 PetscCallCeed((*ctx)->ceed, CeedVectorGetLength((*ctx)->x_loc, &ctx_x_loc_len)); in MatCeedContextCreate()
1416 PetscCallCeed((*ctx)->ceed, CeedVectorGetLength((*ctx)->y_loc, &ctx_y_loc_len)); in MatCeedContextCreate()
1439 PetscErrorCode MatCeedContextReference(MatCeedContext ctx) { in MatCeedContextReference() argument
1441 ctx->ref_count++; in MatCeedContextReference()
1456 PetscErrorCode MatCeedContextReferenceCopy(MatCeedContext ctx, MatCeedContext *ctx_copy) { in MatCeedContextReferenceCopy() argument
1458 PetscCall(MatCeedContextReference(ctx)); in MatCeedContextReferenceCopy()
1460 *ctx_copy = ctx; in MatCeedContextReferenceCopy()
1473 PetscErrorCode MatCeedContextDestroy(MatCeedContext *ctx) { in MatCeedContextDestroy() argument
1475 if (!ctx || --(*ctx)->ref_count > 0) PetscFunctionReturn(PETSC_SUCCESS); in MatCeedContextDestroy()
1478 PetscCall(DMDestroy(&(*ctx)->dm_x)); in MatCeedContextDestroy()
1479 PetscCall(DMDestroy(&(*ctx)->dm_y)); in MatCeedContextDestroy()
1480 PetscCall(VecDestroy(&(*ctx)->X_loc)); in MatCeedContextDestroy()
1481 PetscCall(VecDestroy(&(*ctx)->Y_loc_transpose)); in MatCeedContextDestroy()
1482 PetscCall(MatDestroy(&(*ctx)->mat_assembled_full_internal)); in MatCeedContextDestroy()
1483 PetscCall(MatDestroy(&(*ctx)->mat_assembled_pbd_internal)); in MatCeedContextDestroy()
1484 PetscCall(PetscFree((*ctx)->coo_mat_type)); in MatCeedContextDestroy()
1485 PetscCall(PetscFree((*ctx)->mats_assembled_full)); in MatCeedContextDestroy()
1486 PetscCall(PetscFree((*ctx)->mats_assembled_pbd)); in MatCeedContextDestroy()
1489 PetscCallCeed((*ctx)->ceed, CeedVectorDestroy(&(*ctx)->x_loc)); in MatCeedContextDestroy()
1490 PetscCallCeed((*ctx)->ceed, CeedVectorDestroy(&(*ctx)->y_loc)); in MatCeedContextDestroy()
1491 PetscCallCeed((*ctx)->ceed, CeedVectorDestroy(&(*ctx)->coo_values_full)); in MatCeedContextDestroy()
1492 PetscCallCeed((*ctx)->ceed, CeedVectorDestroy(&(*ctx)->coo_values_pbd)); in MatCeedContextDestroy()
1493 PetscCallCeed((*ctx)->ceed, CeedOperatorDestroy(&(*ctx)->op_mult)); in MatCeedContextDestroy()
1494 PetscCallCeed((*ctx)->ceed, CeedOperatorDestroy(&(*ctx)->op_mult_transpose)); in MatCeedContextDestroy()
1495 …PetscCheck(CeedDestroy(&(*ctx)->ceed) == CEED_ERROR_SUCCESS, PETSC_COMM_SELF, PETSC_ERR_LIB, "dest… in MatCeedContextDestroy()
1498 (*ctx)->is_destroyed = PETSC_TRUE; // Flag as destroyed in case someone has stale ref in MatCeedContextDestroy()
1499 PetscCall(PetscFree(*ctx)); in MatCeedContextDestroy()
1516 MatCeedContext ctx; in MatGetDiagonal_Ceed() local
1519 PetscCall(MatShellGetContext(A, &ctx)); in MatGetDiagonal_Ceed()
1523 PetscCall(DMGetLocalVector(ctx->dm_x, &D_loc)); in MatGetDiagonal_Ceed()
1524 PetscCall(VecPetscToCeed(D_loc, &mem_type, ctx->x_loc)); in MatGetDiagonal_Ceed()
1528 …PetscCallCeed(ctx->ceed, CeedOperatorLinearAssembleDiagonal(ctx->op_mult, ctx->x_loc, CEED_REQUEST… in MatGetDiagonal_Ceed()
1532 PetscCall(VecCeedToPetsc(ctx->x_loc, mem_type, D_loc)); in MatGetDiagonal_Ceed()
1536 PetscCall(DMLocalToGlobal(ctx->dm_x, D_loc, ADD_VALUES, D)); in MatGetDiagonal_Ceed()
1537 PetscCall(DMRestoreLocalVector(ctx->dm_x, &D_loc)); in MatGetDiagonal_Ceed()
1554 MatCeedContext ctx; in MatMult_Ceed() local
1557 PetscCall(MatShellGetContext(A, &ctx)); in MatMult_Ceed()
1558 PetscCall(PetscLogEventBegin(ctx->log_event_mult, A, X, Y, NULL)); in MatMult_Ceed()
1562 Vec X_loc = ctx->X_loc, Y_loc; in MatMult_Ceed()
1565 if (!ctx->X_loc) PetscCall(DMGetLocalVector(ctx->dm_x, &X_loc)); in MatMult_Ceed()
1566 PetscCall(DMGetLocalVector(ctx->dm_y, &Y_loc)); in MatMult_Ceed()
1569 PetscCall(DMGlobalToLocal(ctx->dm_x, X, INSERT_VALUES, X_loc)); in MatMult_Ceed()
1572 PetscCall(VecReadPetscToCeed(X_loc, &x_mem_type, ctx->x_loc)); in MatMult_Ceed()
1574 PetscCall(VecPetscToCeed(Y_loc, &y_mem_type, ctx->y_loc)); in MatMult_Ceed()
1577 PetscCall(PetscLogEventBegin(ctx->log_event_ceed_mult, A, X, Y, NULL)); in MatMult_Ceed()
1579 …PetscCallCeed(ctx->ceed, CeedOperatorApplyAdd(ctx->op_mult, ctx->x_loc, ctx->y_loc, CEED_REQUEST_I… in MatMult_Ceed()
1581 PetscCall(PetscLogEventEnd(ctx->log_event_ceed_mult, A, X, Y, NULL)); in MatMult_Ceed()
1584 PetscCall(VecReadCeedToPetsc(ctx->x_loc, x_mem_type, X_loc)); in MatMult_Ceed()
1585 PetscCall(VecCeedToPetsc(ctx->y_loc, y_mem_type, Y_loc)); in MatMult_Ceed()
1589 PetscCall(DMLocalToGlobal(ctx->dm_y, Y_loc, ADD_VALUES, Y)); in MatMult_Ceed()
1592 if (!ctx->X_loc) PetscCall(DMRestoreLocalVector(ctx->dm_x, &X_loc)); in MatMult_Ceed()
1593 PetscCall(DMRestoreLocalVector(ctx->dm_y, &Y_loc)); in MatMult_Ceed()
1597 if (PetscMemTypeDevice(ctx->mem_type)) PetscCall(PetscLogGpuFlops(ctx->flops_mult)); in MatMult_Ceed()
1598 else PetscCall(PetscLogFlops(ctx->flops_mult)); in MatMult_Ceed()
1599 PetscCall(PetscLogEventEnd(ctx->log_event_mult, A, X, Y, NULL)); in MatMult_Ceed()
1615 MatCeedContext ctx; in MatMultTranspose_Ceed() local
1618 PetscCall(MatShellGetContext(A, &ctx)); in MatMultTranspose_Ceed()
1619 PetscCall(PetscLogEventBegin(ctx->log_event_mult_transpose, A, Y, X, NULL)); in MatMultTranspose_Ceed()
1623 Vec X_loc, Y_loc = ctx->Y_loc_transpose; in MatMultTranspose_Ceed()
1626 if (!ctx->Y_loc_transpose) PetscCall(DMGetLocalVector(ctx->dm_y, &Y_loc)); in MatMultTranspose_Ceed()
1627 PetscCall(DMGetLocalVector(ctx->dm_x, &X_loc)); in MatMultTranspose_Ceed()
1630 PetscCall(DMGlobalToLocal(ctx->dm_y, Y, INSERT_VALUES, Y_loc)); in MatMultTranspose_Ceed()
1633 PetscCall(VecReadPetscToCeed(Y_loc, &y_mem_type, ctx->y_loc)); in MatMultTranspose_Ceed()
1635 PetscCall(VecPetscToCeed(X_loc, &x_mem_type, ctx->x_loc)); in MatMultTranspose_Ceed()
1638 PetscCall(PetscLogEventBegin(ctx->log_event_ceed_mult_transpose, A, Y, X, NULL)); in MatMultTranspose_Ceed()
1640 …PetscCallCeed(ctx->ceed, CeedOperatorApplyAdd(ctx->op_mult_transpose, ctx->y_loc, ctx->x_loc, CEED… in MatMultTranspose_Ceed()
1642 PetscCall(PetscLogEventEnd(ctx->log_event_ceed_mult_transpose, A, Y, X, NULL)); in MatMultTranspose_Ceed()
1645 PetscCall(VecReadCeedToPetsc(ctx->y_loc, y_mem_type, Y_loc)); in MatMultTranspose_Ceed()
1646 PetscCall(VecCeedToPetsc(ctx->x_loc, x_mem_type, X_loc)); in MatMultTranspose_Ceed()
1650 PetscCall(DMLocalToGlobal(ctx->dm_x, X_loc, ADD_VALUES, X)); in MatMultTranspose_Ceed()
1653 if (!ctx->Y_loc_transpose) PetscCall(DMRestoreLocalVector(ctx->dm_y, &Y_loc)); in MatMultTranspose_Ceed()
1654 PetscCall(DMRestoreLocalVector(ctx->dm_x, &X_loc)); in MatMultTranspose_Ceed()
1658 if (PetscMemTypeDevice(ctx->mem_type)) PetscCall(PetscLogGpuFlops(ctx->flops_mult_transpose)); in MatMultTranspose_Ceed()
1659 else PetscCall(PetscLogFlops(ctx->flops_mult_transpose)); in MatMultTranspose_Ceed()
1660 PetscCall(PetscLogEventEnd(ctx->log_event_mult_transpose, A, Y, X, NULL)); in MatMultTranspose_Ceed()