@@ -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