@@ -712,18 +712,19 @@ static int CeedOperatorAssembleSymbolicSingle(CeedOperator op, CeedSize offset,
712712 Note: If the value of `assembled` or `rstr` passed to this function are non-`NULL` , then it is assumed that they hold valid pointers.
713713 These objects will be destroyed if `*assembled` or `*rstr` is the only reference to the object.
714714
715- @param[in] op `CeedOperator` to assemble `CeedQFunction`
716- @param[in] use_parent Boolean flag to check for fallback parent implementation
717- @param[out] assembled `CeedVector` to store assembled `CeedQFunction` at quadrature points
718- @param[out] rstr `CeedElemRestriction` for `CeedVector` containing assembled `CeedQFunction`
719- @param[in] request Address of @ref CeedRequest for non-blocking completion, else @ref CEED_REQUEST_IMMEDIATE
715+ @param[in] op `CeedOperator` to assemble `CeedQFunction`
716+ @param[in] build_objects Boolean flag indicating whether the `assembled` vector has been allocated
717+ @param[in] use_parent Boolean flag to check for fallback parent implementation
718+ @param[out] assembled `CeedVector` to store assembled `CeedQFunction` at quadrature points
719+ @param[out] rstr `CeedElemRestriction` for `CeedVector` containing assembled `CeedQFunction`
720+ @param[in] request Address of @ref CeedRequest for non-blocking completion, else @ref CEED_REQUEST_IMMEDIATE
720721
721722 @return An error code: 0 - success, otherwise - failure
722723
723724 @ref User
724725**/
725- static int CeedOperatorLinearAssembleQFunctionBuildOrUpdate_Core (CeedOperator op , bool use_parent , CeedVector * assembled , CeedElemRestriction * rstr ,
726- CeedRequest * request ) {
726+ static int CeedOperatorLinearAssembleQFunctionBuildOrUpdate_Core (CeedOperator op , bool build_objects , bool use_parent , CeedVector * assembled ,
727+ CeedElemRestriction * rstr , CeedRequest * request ) {
727728 int (* LinearAssembleQFunctionUpdate )(CeedOperator , CeedVector , CeedElemRestriction , CeedRequest * ) = NULL ;
728729 CeedOperator op_assemble = NULL ;
729730 CeedOperator op_fallback_parent = NULL ;
@@ -766,6 +767,10 @@ static int CeedOperatorLinearAssembleQFunctionBuildOrUpdate_Core(CeedOperator op
766767 CeedCall (CeedQFunctionAssemblyDataSetUpdateNeeded (data , false));
767768
768769 // Copy reference from internally held copy
770+ if (build_objects ) {
771+ * assembled = NULL ;
772+ * rstr = NULL ;
773+ }
769774 CeedCall (CeedVectorReferenceCopy (assembled_vec , assembled ));
770775 CeedCall (CeedElemRestrictionReferenceCopy (assembled_rstr , rstr ));
771776 CeedCall (CeedVectorDestroy (& assembled_vec ));
@@ -792,18 +797,19 @@ static int CeedOperatorLinearAssembleQFunctionBuildOrUpdate_Core(CeedOperator op
792797 Note: If the value of `assembled` or `rstr` passed to this function are non-`NULL` , then it is assumed that they hold valid pointers.
793798 These objects will be destroyed if `*assembled` or `*rstr` is the only reference to the object.
794799
795- @param[in] op `CeedOperator` to assemble `CeedQFunction`
796- @param[out] assembled `CeedVector` to store assembled `CeedQFunction` at quadrature points
797- @param[out] rstr `CeedElemRestriction` for `CeedVector` containing assembled `CeedQFunction`
798- @param[in] request Address of @ref CeedRequest for non-blocking completion, else @ref CEED_REQUEST_IMMEDIATE
800+ @param[in] op `CeedOperator` to assemble `CeedQFunction`
801+ @param[in] build_objects Boolean flag indicating whether the `assembled` vector has been allocated
802+ @param[out] assembled `CeedVector` to store assembled `CeedQFunction` at quadrature points
803+ @param[out] rstr `CeedElemRestriction` for `CeedVector` containing assembled `CeedQFunction`
804+ @param[in] request Address of @ref CeedRequest for non-blocking completion, else @ref CEED_REQUEST_IMMEDIATE
799805
800806 @return An error code: 0 - success, otherwise - failure
801807
802808 @ref Developer
803809**/
804- int CeedOperatorLinearAssembleQFunctionBuildOrUpdateFallback (CeedOperator op , CeedVector * assembled , CeedElemRestriction * rstr ,
810+ int CeedOperatorLinearAssembleQFunctionBuildOrUpdateFallback (CeedOperator op , bool build_objects , CeedVector * assembled , CeedElemRestriction * rstr ,
805811 CeedRequest * request ) {
806- return CeedOperatorLinearAssembleQFunctionBuildOrUpdate_Core (op , false, assembled , rstr , request );
812+ return CeedOperatorLinearAssembleQFunctionBuildOrUpdate_Core (op , build_objects , false, assembled , rstr , request );
807813}
808814
809815/**
@@ -2325,7 +2331,8 @@ int CeedOperatorLinearAssembleQFunction(CeedOperator op, CeedVector *assembled,
23252331 @ref User
23262332**/
23272333int CeedOperatorLinearAssembleQFunctionBuildOrUpdate (CeedOperator op , CeedVector * assembled , CeedElemRestriction * rstr , CeedRequest * request ) {
2328- return CeedOperatorLinearAssembleQFunctionBuildOrUpdate_Core (op , true, assembled , rstr , request );
2334+ assert (assembled );
2335+ return CeedOperatorLinearAssembleQFunctionBuildOrUpdate_Core (op , * assembled == NULL , true, assembled , rstr , request );
23292336}
23302337
23312338/**
0 commit comments