xref: /petsc/src/dm/interface/dmceed.c (revision d6685f554fbda8d96c6a5d73ab0e7a4e21a05c51)
1 #include <petsc/private/dmimpl.h>           /*I      "petscdm.h"          I*/
2 
3 #ifdef PETSC_HAVE_LIBCEED
4 #include <petscdmceed.h>
5 
6 /*@C
7   DMGetCeed - Get the LibCEED context associated with this DM
8 
9   Not collective
10 
11   Input Parameter:
12 . DM   - The DM
13 
14   Output Parameter:
15 . ceed - The LibCEED context
16 
17   Level: intermediate
18 
19 .seealso: DMCreate()
20 @*/
21 PetscErrorCode DMGetCeed(DM dm, Ceed *ceed)
22 {
23   PetscErrorCode ierr;
24 
25   PetscFunctionBegin;
26   PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
27   PetscValidPointer(ceed, 2);
28   if (!dm->ceed) {
29     char        ceedresource[PETSC_MAX_PATH_LEN]; /* libCEED resource specifier */
30     const char *prefix;
31 
32     ierr = PetscStrcpy(ceedresource, "/cpu/self");CHKERRQ(ierr);
33     ierr = PetscObjectGetOptionsPrefix((PetscObject) dm, &prefix);CHKERRQ(ierr);
34     ierr = PetscOptionsGetString(NULL, prefix, "-dm_ceed", ceedresource, sizeof(ceedresource), NULL);CHKERRQ(ierr);
35     ierr = CeedInit(ceedresource, &dm->ceed);CHKERRQ_CEED(ierr);
36   }
37   *ceed = dm->ceed;
38   PetscFunctionReturn(0);
39 }
40 
41 #endif
42