xref: /libCEED/rust/libceed-sys/c-src/backends/opt/ceed-opt-serial.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.
389c6efa4Sjeremylt //
4*3d8e8822SJeremy L Thompson // SPDX-License-Identifier: BSD-2-Clause
589c6efa4Sjeremylt //
6*3d8e8822SJeremy L Thompson // This file is part of CEED:  http://github.com/ceed
789c6efa4Sjeremylt 
8ec3da8bcSJed Brown #include <ceed/ceed.h>
9ec3da8bcSJed Brown #include <ceed/backend.h>
103d576824SJeremy L Thompson #include <stdbool.h>
1189c6efa4Sjeremylt #include <string.h>
1289c6efa4Sjeremylt #include "ceed-opt.h"
1389c6efa4Sjeremylt 
14f10650afSjeremylt //------------------------------------------------------------------------------
15f10650afSjeremylt // Backend Destroy
16f10650afSjeremylt //------------------------------------------------------------------------------
1789c6efa4Sjeremylt static int CeedDestroy_Opt(Ceed ceed) {
1889c6efa4Sjeremylt   int ierr;
1989c6efa4Sjeremylt   Ceed_Opt *data;
20e15f9bd0SJeremy L Thompson   ierr = CeedGetData(ceed, &data); CeedChkBackend(ierr);
21e15f9bd0SJeremy L Thompson   ierr = CeedFree(&data); CeedChkBackend(ierr);
2289c6efa4Sjeremylt 
23e15f9bd0SJeremy L Thompson   return CEED_ERROR_SUCCESS;
2489c6efa4Sjeremylt }
2589c6efa4Sjeremylt 
26f10650afSjeremylt //------------------------------------------------------------------------------
27f10650afSjeremylt // Backend Init
28f10650afSjeremylt //------------------------------------------------------------------------------
2989c6efa4Sjeremylt static int CeedInit_Opt_Serial(const char *resource, Ceed ceed) {
3089c6efa4Sjeremylt   int ierr;
3189c6efa4Sjeremylt   if (strcmp(resource, "/cpu/self")
3289c6efa4Sjeremylt       && strcmp(resource, "/cpu/self/opt/serial"))
33c042f62fSJeremy L Thompson     // LCOV_EXCL_START
34e15f9bd0SJeremy L Thompson     return CeedError(ceed, CEED_ERROR_BACKEND,
35e15f9bd0SJeremy L Thompson                      "Opt backend cannot use resource: %s", resource);
36c042f62fSJeremy L Thompson   // LCOV_EXCL_STOP
37e15f9bd0SJeremy L Thompson   ierr = CeedSetDeterministic(ceed, true); CeedChkBackend(ierr);
3889c6efa4Sjeremylt 
395f67fadeSJeremy L Thompson   // Create reference CEED that implementation will be dispatched
4089c6efa4Sjeremylt   //   through unless overridden
41d1d35e2fSjeremylt   Ceed ceed_ref;
42d1d35e2fSjeremylt   CeedInit("/cpu/self/ref/serial", &ceed_ref);
43d1d35e2fSjeremylt   ierr = CeedSetDelegate(ceed, ceed_ref); CeedChkBackend(ierr);
4489c6efa4Sjeremylt 
45e2f04181SAndrew T. Barker   // Set fallback CEED resource for advanced operator functionality
46e2f04181SAndrew T. Barker   const char fallbackresource[] = "/cpu/self/ref/serial";
47e2f04181SAndrew T. Barker   ierr = CeedSetOperatorFallbackResource(ceed, fallbackresource);
48e2f04181SAndrew T. Barker   CeedChkBackend(ierr);
49e2f04181SAndrew T. Barker 
5089c6efa4Sjeremylt   ierr = CeedSetBackendFunction(ceed, "Ceed", ceed, "Destroy",
51e15f9bd0SJeremy L Thompson                                 CeedDestroy_Opt); CeedChkBackend(ierr);
529b2a10adSJeremy L Thompson   ierr = CeedSetBackendFunction(ceed, "Ceed", ceed, "TensorContractCreate",
539b2a10adSJeremy L Thompson                                 CeedTensorContractCreate_Opt); CeedChkBackend(ierr);
5489c6efa4Sjeremylt   ierr = CeedSetBackendFunction(ceed, "Ceed", ceed, "OperatorCreate",
55e15f9bd0SJeremy L Thompson                                 CeedOperatorCreate_Opt); CeedChkBackend(ierr);
5689c6efa4Sjeremylt 
5789c6efa4Sjeremylt   // Set blocksize
5889c6efa4Sjeremylt   Ceed_Opt *data;
59e15f9bd0SJeremy L Thompson   ierr = CeedCalloc(1, &data); CeedChkBackend(ierr);
60d1d35e2fSjeremylt   data->blk_size = 1;
61e15f9bd0SJeremy L Thompson   ierr = CeedSetData(ceed, data); CeedChkBackend(ierr);
6289c6efa4Sjeremylt 
63e15f9bd0SJeremy L Thompson   return CEED_ERROR_SUCCESS;
6489c6efa4Sjeremylt }
6589c6efa4Sjeremylt 
66f10650afSjeremylt //------------------------------------------------------------------------------
67f10650afSjeremylt // Backend Register
68f10650afSjeremylt //------------------------------------------------------------------------------
691d013790SJed Brown CEED_INTERN int CeedRegister_Opt_Serial(void) {
701d013790SJed Brown   return CeedRegister("/cpu/self/opt/serial", CeedInit_Opt_Serial, 45);
7189c6efa4Sjeremylt }
721d013790SJed Brown 
73f10650afSjeremylt //------------------------------------------------------------------------------
74