Actual source code: feceed.c
1: #include <petsc/private/petscfeimpl.h>
3: #ifdef PETSC_HAVE_LIBCEED
4: #include <petscfeceed.h>
6: /*@C
7: PetscFESetCeed - Set the `Ceed` object to a `PetscFE`
9: Not Collective
11: Input Parameters:
12: + fe - The `PetscFE`
13: - ceed - The `Ceed` object
15: Level: intermediate
17: .seealso: `PetscFE`, `PetscFEGetCeedBasis()`, `DMGetCeed()`
18: @*/
19: PetscErrorCode PetscFESetCeed(PetscFE fe, Ceed ceed)
20: {
22: if (fe->ceed == ceed) return 0;
23: CeedReferenceCopy(ceed, &fe->ceed);
24: return 0;
25: }
27: /*@C
28: PetscFEGetCeedBasis - Get the `Ceed` object mirroring this `PetscFE`
30: Not Collective
32: Input Parameter:
33: . fe - The `PetscFE`
35: Output Parameter:
36: . basis - The `CeedBasis`
38: Level: intermediate
40: Note:
41: This is a borrowed reference, so it is not freed.
43: .seealso: `PetscFE`, `PetscFESetCeed()`, `DMGetCeed()`
44: @*/
45: PetscErrorCode PetscFEGetCeedBasis(PetscFE fe, CeedBasis *basis)
46: {
47: PetscSpace sp;
48: PetscQuadrature q;
49: PetscInt dim, Nc, deg, ord;
53: if (!fe->ceedBasis && fe->ceed) {
54: PetscFEGetSpatialDimension(fe, &dim);
55: PetscFEGetNumComponents(fe, &Nc);
56: PetscFEGetBasisSpace(fe, &sp);
57: PetscSpaceGetDegree(sp, °, NULL);
58: PetscFEGetQuadrature(fe, &q);
59: PetscQuadratureGetOrder(q, &ord);
60: CeedBasisCreateTensorH1Lagrange(fe->ceed, dim, Nc, deg + 1, (ord + 1) / 2, CEED_GAUSS, &fe->ceedBasis);
61: }
62: *basis = fe->ceedBasis;
63: return 0;
64: }
66: #endif