Skip to content

Commit 56318ee

Browse files
committed
assembly - add CeedOperatorLinearAssembleGetNumEntries
1 parent 4fd67f6 commit 56318ee

File tree

2 files changed

+38
-12
lines changed

2 files changed

+38
-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: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,42 @@ 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+
972+
CeedCall(CeedOperatorCheckReady(op));
973+
CeedCall(CeedOperatorIsComposite(op, &is_composite));
974+
975+
if (is_composite) {
976+
CeedInt num_suboperators;
977+
CeedOperator *sub_operators;
978+
979+
CeedCall(CeedOperatorCompositeGetNumSub(op, &num_suboperators));
980+
CeedCall(CeedOperatorCompositeGetSubList(op, &sub_operators));
981+
982+
*num_entries = 0;
983+
for (CeedInt k = 0; k < num_suboperators; ++k) {
984+
CeedSize single_entries;
985+
986+
CeedCall(CeedOperatorAssemblyCountEntriesSingle(sub_operators[k], &single_entries));
987+
*num_entries += single_entries;
988+
}
989+
} else {
990+
CeedCall(CeedOperatorAssemblyCountEntriesSingle(op, num_entries));
991+
}
992+
return CEED_ERROR_SUCCESS;
993+
}
994+
959995
/**
960996
@brief Common code for creating a multigrid coarse `CeedOperator` and level transfer `CeedOperator` for a `CeedOperator`
961997
@@ -2462,18 +2498,7 @@ int CeedOperatorLinearAssembleSymbolic(CeedOperator op, CeedSize *num_entries, C
24622498
// Default interface implementation
24632499

24642500
// 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-
}
2501+
CeedCall(CeedOperatorLinearAssembleGetNumEntries(op, num_entries));
24772502
CeedCall(CeedCalloc(*num_entries, rows));
24782503
CeedCall(CeedCalloc(*num_entries, cols));
24792504

0 commit comments

Comments
 (0)