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