Actual source code: fvceed.c

  1: #include <petsc/private/petscfvimpl.h>

  3: #include <petscfvceed.h>

  5: /*@C
  6:   PetscFVSetCeed - Set the `Ceed` object to a `PetscFV`

  8:   Not Collective

 10:   Input Parameters:
 11: + fv   - The `PetscFV`
 12: - ceed - The `Ceed` object

 14:   Level: intermediate

 16: .seealso: `PetscFV`, `PetscFVGetCeedBasis()`, `DMGetCeed()`
 17: @*/
 18: PetscErrorCode PetscFVSetCeed(PetscFV fv, Ceed ceed)
 19: {
 20:   PetscFunctionBegin;
 22:   if (fv->ceed == ceed) PetscFunctionReturn(PETSC_SUCCESS);
 23:   PetscCallCEED(CeedReferenceCopy(ceed, &fv->ceed));
 24:   PetscFunctionReturn(PETSC_SUCCESS);
 25: }

 27: /*@C
 28:   PetscFVGetCeedBasis - Get the `Ceed` object mirroring this `PetscFV`

 30:   Not Collective

 32:   Input Parameter:
 33: . fv - The `PetscFV`

 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: `PetscFV`, `PetscFVSetCeed()`, `DMGetCeed()`
 44: @*/
 45: PetscErrorCode PetscFVGetCeedBasis(PetscFV fv, CeedBasis *basis)
 46: {
 47:   PetscQuadrature q;
 48:   PetscInt        dim, Nc, ord;

 50:   PetscFunctionBegin;
 52:   PetscAssertPointer(basis, 2);
 53:   if (!fv->ceedBasis && fv->ceed) {
 54:     PetscCall(PetscFVGetSpatialDimension(fv, &dim));
 55:     PetscCall(PetscFVGetNumComponents(fv, &Nc));
 56:     PetscCall(PetscFVGetQuadrature(fv, &q));
 57:     PetscCall(PetscQuadratureGetOrder(q, &ord));
 58:     PetscCallCEED(CeedBasisCreateTensorH1Lagrange(fv->ceed, dim, Nc, 1, (ord + 1) / 2, CEED_GAUSS, &fv->ceedBasis));
 59:   }
 60:   *basis = fv->ceedBasis;
 61:   PetscFunctionReturn(PETSC_SUCCESS);
 62: }