Skip to content

Commit 67c4c60

Browse files
committed
assembly - add CeedOperatorLinearAssembleGetNumEntries
1 parent 4fd67f6 commit 67c4c60

File tree

2 files changed

+36
-12
lines changed

2 files changed

+36
-12
lines changed

include/ceed/ceed.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,7 @@ CEED_EXTERN int CeedOperatorLinearAssemblePointBlockDiagonal(CeedOperator op, C
438438
CEED_EXTERN int CeedOperatorLinearAssembleAddPointBlockDiagonal(CeedOperator op, CeedVector assembled, CeedRequest *request);
439439
CEED_EXTERN int CeedOperatorLinearAssemblePointBlockDiagonalSymbolic(CeedOperator op, CeedSize *num_entries, CeedInt **rows, CeedInt **cols);
440440
CEED_EXTERN int CeedOperatorLinearAssembleSymbolic(CeedOperator op, CeedSize *num_entries, CeedInt **rows, CeedInt **cols);
441+
CEED_EXTERN int CeedOperatorLinearAssembleGetNumEntries(CeedOperator op, CeedSize *num_entries);
441442
CEED_EXTERN int CeedOperatorLinearAssemble(CeedOperator op, CeedVector values);
442443
CEED_EXTERN int CeedOperatorCompositeGetMultiplicity(CeedOperator op, CeedInt num_skip_indices, CeedInt *skip_indices, CeedVector mult);
443444
CEED_EXTERN int CeedOperatorMultigridLevelCreate(CeedOperator op_fine, CeedVector p_mult_fine, CeedElemRestriction rstr_coarse,

interface/ceed-preconditioning.c

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,40 @@ static int CeedOperatorAssemblyCountEntriesSingle(CeedOperator op, CeedSize *num
956956
return CEED_ERROR_SUCCESS;
957957
}
958958

959+
/**
960+
@brief Count number of entries for assembled `CeedOperator`
961+
962+
@param[in] op `CeedOperator` to assemble
963+
@param[out] num_entries Number of entries in assembled representation
964+
965+
@return An error code: 0 - success, otherwise - failure
966+
967+
@ref Utility
968+
**/
969+
int CeedOperatorLinearAssembleGetNumEntries(CeedOperator op, CeedSize *num_entries) {
970+
bool is_composite;
971+
CeedInt num_suboperators;
972+
CeedOperator *sub_operators;
973+
974+
CeedCall(CeedOperatorCheckReady(op));
975+
CeedCall(CeedOperatorIsComposite(op, &is_composite));
976+
977+
*num_entries = 0;
978+
if (is_composite) {
979+
CeedCall(CeedOperatorCompositeGetNumSub(op, &num_suboperators));
980+
CeedCall(CeedOperatorCompositeGetSubList(op, &sub_operators));
981+
for (CeedInt k = 0; k < num_suboperators; ++k) {
982+
CeedSize single_entries;
983+
984+
CeedCall(CeedOperatorAssemblyCountEntriesSingle(sub_operators[k], &single_entries));
985+
*num_entries += single_entries;
986+
}
987+
} else {
988+
CeedCall(CeedOperatorAssemblyCountEntriesSingle(op, num_entries));
989+
}
990+
return CEED_ERROR_SUCCESS;
991+
}
992+
959993
/**
960994
@brief Common code for creating a multigrid coarse `CeedOperator` and level transfer `CeedOperator` for a `CeedOperator`
961995
@@ -2462,18 +2496,7 @@ int CeedOperatorLinearAssembleSymbolic(CeedOperator op, CeedSize *num_entries, C
24622496
// Default interface implementation
24632497

24642498
// Count entries and allocate rows, cols arrays
2465-
*num_entries = 0;
2466-
if (is_composite) {
2467-
CeedCall(CeedOperatorCompositeGetNumSub(op, &num_suboperators));
2468-
CeedCall(CeedOperatorCompositeGetSubList(op, &sub_operators));
2469-
for (CeedInt k = 0; k < num_suboperators; ++k) {
2470-
CeedCall(CeedOperatorAssemblyCountEntriesSingle(sub_operators[k], &single_entries));
2471-
*num_entries += single_entries;
2472-
}
2473-
} else {
2474-
CeedCall(CeedOperatorAssemblyCountEntriesSingle(op, &single_entries));
2475-
*num_entries += single_entries;
2476-
}
2499+
CeedCall(CeedOperatorLinearAssembleGetNumEntries(op, num_entries));
24772500
CeedCall(CeedCalloc(*num_entries, rows));
24782501
CeedCall(CeedCalloc(*num_entries, cols));
24792502

0 commit comments

Comments
 (0)