@@ -827,6 +827,15 @@ int CeedReference(Ceed ceed) {
827827 @ref Developer
828828**/
829829int CeedGetWorkVectorMemoryUsage (Ceed ceed , CeedScalar * usage_mb ) {
830+ if (!ceed -> VectorCreate ) {
831+ Ceed delegate ;
832+
833+ CeedCall (CeedGetObjectDelegate (ceed , & delegate , "Vector" ));
834+ CeedCheck (delegate , ceed , CEED_ERROR_UNSUPPORTED , "Backend does not implement VectorCreate" );
835+ CeedCall (CeedGetWorkVectorMemoryUsage (delegate , usage_mb ));
836+ CeedCall (CeedDestroy (& delegate ));
837+ return CEED_ERROR_SUCCESS ;
838+ }
830839 * usage_mb = 0.0 ;
831840 if (ceed -> work_vectors ) {
832841 for (CeedInt i = 0 ; i < ceed -> work_vectors -> num_vecs ; i ++ ) {
@@ -852,6 +861,15 @@ int CeedGetWorkVectorMemoryUsage(Ceed ceed, CeedScalar *usage_mb) {
852861 @ref Backend
853862**/
854863int CeedClearWorkVectors (Ceed ceed , CeedSize min_len ) {
864+ if (!ceed -> VectorCreate ) {
865+ Ceed delegate ;
866+
867+ CeedCall (CeedGetObjectDelegate (ceed , & delegate , "Vector" ));
868+ CeedCheck (delegate , ceed , CEED_ERROR_UNSUPPORTED , "Backend does not implement VectorCreate" );
869+ CeedCall (CeedClearWorkVectors (delegate , min_len ));
870+ CeedCall (CeedDestroy (& delegate ));
871+ return CEED_ERROR_SUCCESS ;
872+ }
855873 if (!ceed -> work_vectors ) return CEED_ERROR_SUCCESS ;
856874 for (CeedInt i = 0 ; i < ceed -> work_vectors -> num_vecs ; i ++ ) {
857875 if (ceed -> work_vectors -> is_in_use [i ]) continue ;
@@ -890,6 +908,16 @@ int CeedGetWorkVector(Ceed ceed, CeedSize len, CeedVector *vec) {
890908 CeedInt i = 0 ;
891909 CeedScalar usage_mb ;
892910
911+ if (!ceed -> VectorCreate ) {
912+ Ceed delegate ;
913+
914+ CeedCall (CeedGetObjectDelegate (ceed , & delegate , "Vector" ));
915+ CeedCheck (delegate , ceed , CEED_ERROR_UNSUPPORTED , "Backend does not implement VectorCreate" );
916+ CeedCall (CeedGetWorkVector (delegate , len , vec ));
917+ CeedCall (CeedDestroy (& delegate ));
918+ return CEED_ERROR_SUCCESS ;
919+ }
920+
893921 if (!ceed -> work_vectors ) CeedCall (CeedWorkVectorsCreate (ceed ));
894922
895923 // Search for big enough work vector
@@ -936,6 +964,16 @@ int CeedGetWorkVector(Ceed ceed, CeedSize len, CeedVector *vec) {
936964 @ref Backend
937965**/
938966int CeedRestoreWorkVector (Ceed ceed , CeedVector * vec ) {
967+ if (!ceed -> VectorCreate ) {
968+ Ceed delegate ;
969+
970+ CeedCall (CeedGetObjectDelegate (ceed , & delegate , "Vector" ));
971+ CeedCheck (delegate , ceed , CEED_ERROR_UNSUPPORTED , "Backend does not implement VectorCreate" );
972+ CeedCall (CeedRestoreWorkVector (delegate , vec ));
973+ CeedCall (CeedDestroy (& delegate ));
974+ return CEED_ERROR_SUCCESS ;
975+ }
976+
939977 for (CeedInt i = 0 ; i < ceed -> work_vectors -> num_vecs ; i ++ ) {
940978 if (* vec == ceed -> work_vectors -> vecs [i ]) {
941979 CeedCheck (ceed -> work_vectors -> is_in_use [i ], ceed , CEED_ERROR_ACCESS , "Work vector %" CeedSize_FMT " was not checked out but is being returned" );
0 commit comments