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, &deg, 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