xref: /libCEED/rust/libceed-sys/c-src/backends/blocked/ceed-blocked.c (revision 3d8e882215d238700cdceb37404f76ca7fa24eaa)
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