Skip to content

Commit fd326ce

Browse files
committed
Use backend delegates for work vectors
1 parent 0002d81 commit fd326ce

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

interface/ceed.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,15 @@ int CeedReference(Ceed ceed) {
827827
@ref Developer
828828
**/
829829
int 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
**/
854863
int 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
**/
938966
int 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

Comments
 (0)