1*3d8e8822SJeremy L Thompson // Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors. 2*3d8e8822SJeremy L Thompson // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 34a2e7687Sjeremylt // 4*3d8e8822SJeremy L Thompson // SPDX-License-Identifier: BSD-2-Clause 54a2e7687Sjeremylt // 6*3d8e8822SJeremy L Thompson // This file is part of CEED: http://github.com/ceed 74a2e7687Sjeremylt 8ec3da8bcSJed Brown #include <ceed/ceed.h> 9ec3da8bcSJed Brown #include <ceed/backend.h> 103d576824SJeremy L Thompson #include <stdbool.h> 113d576824SJeremy L Thompson #include <string.h> 124a2e7687Sjeremylt #include "ceed-blocked.h" 134a2e7687Sjeremylt 14f10650afSjeremylt //------------------------------------------------------------------------------ 15f10650afSjeremylt // Backend Init 16f10650afSjeremylt //------------------------------------------------------------------------------ 171d013790SJed Brown CEED_INTERN int CeedInit_Blocked(const char *resource, Ceed ceed) { 184ce2993fSjeremylt int ierr; 194a2e7687Sjeremylt if (strcmp(resource, "/cpu/self") 20856142e1Sjeremylt && strcmp(resource, "/cpu/self/ref/blocked")) 21c042f62fSJeremy L Thompson // LCOV_EXCL_START 22e15f9bd0SJeremy L Thompson return CeedError(ceed, CEED_ERROR_BACKEND, 23e15f9bd0SJeremy L Thompson "Blocked backend cannot use resource: %s", resource); 24c042f62fSJeremy L Thompson // LCOV_EXCL_STOP 25e15f9bd0SJeremy L Thompson ierr = CeedSetDeterministic(ceed, true); CeedChkBackend(ierr); 264a2e7687Sjeremylt 275f67fadeSJeremy L Thompson // Create reference CEED that implementation will be dispatched 284a2e7687Sjeremylt // through unless overridden 29d1d35e2fSjeremylt Ceed ceed_ref; 30d1d35e2fSjeremylt CeedInit("/cpu/self/ref/serial", &ceed_ref); 31d1d35e2fSjeremylt ierr = CeedSetDelegate(ceed, ceed_ref); CeedChkBackend(ierr); 324a2e7687Sjeremylt 33e2f04181SAndrew T. Barker // Set fallback CEED resource for advanced operator functionality 34e2f04181SAndrew T. Barker const char fallbackresource[] = "/cpu/self/ref/serial"; 35e2f04181SAndrew T. Barker ierr = CeedSetOperatorFallbackResource(ceed, fallbackresource); 36e2f04181SAndrew T. Barker CeedChkBackend(ierr); 37e2f04181SAndrew T. Barker 38fe2413ffSjeremylt ierr = CeedSetBackendFunction(ceed, "Ceed", ceed, "OperatorCreate", 39e15f9bd0SJeremy L Thompson CeedOperatorCreate_Blocked); CeedChkBackend(ierr); 404a2e7687Sjeremylt 41e15f9bd0SJeremy L Thompson return CEED_ERROR_SUCCESS; 424a2e7687Sjeremylt } 434a2e7687Sjeremylt 44f10650afSjeremylt //------------------------------------------------------------------------------ 45f10650afSjeremylt // Backend Register 46f10650afSjeremylt //------------------------------------------------------------------------------ 471d013790SJed Brown CEED_INTERN int CeedRegister_Ref_Blocked(void) { 481d013790SJed Brown return CeedRegister("/cpu/self/ref/blocked", CeedInit_Blocked, 55); 494a2e7687Sjeremylt } 50f10650afSjeremylt //------------------------------------------------------------------------------ 51