Date: 2025-03-29T05:58:19+00:00

Actual source code: feceed.c

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

      3: #include <petscfeceed.h>

      5: /*@C
      6:   PetscFESetCeed - Set the `Ceed` object to a `PetscFE`

      8:   Not Collective

     10:   Input Parameters:
     11: + fe   - The `PetscFE`
     12: - ceed - The `Ceed` object

     14:   Level: intermediate

     16: .seealso: `PetscFE`, `PetscFEGetCeedBasis()`, `DMGetCeed()`
     17: @*/
     18: PetscErrorCode PetscFESetCeed(PetscFE fe, Ceed ceed)
     19: {
     20:   PetscFunctionBegin;
     22:   if (fe->ceed == ceed) PetscFunctionReturn(PETSC_SUCCESS);
     23:   PetscCallCEED(CeedReferenceCopy(ceed, &fe->ceed));
     24:   PetscFunctionReturn(PETSC_SUCCESS);
     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;

     51:   PetscFunctionBegin;
     53:   PetscAssertPointer(basis, 2);
     54:   if (!fe->ceedBasis && fe->ceed) {
     55:     PetscCall(PetscFEGetSpatialDimension(fe, &dim));
     56:     PetscCall(PetscFEGetNumComponents(fe, &Nc));
     57:     PetscCall(PetscFEGetBasisSpace(fe, &sp));
     58:     PetscCall(PetscSpaceGetDegree(sp, &deg, NULL));
     59:     PetscCall(PetscFEGetQuadrature(fe, &q));
     60:     PetscCall(PetscQuadratureGetOrder(q, &ord));
     61:     PetscCallCEED(CeedBasisCreateTensorH1Lagrange(fe->ceed, dim, Nc, deg + 1, (ord + 1) / 2, CEED_GAUSS, &fe->ceedBasis));
     62:   }
     63:   *basis = fe->ceedBasis;
     64:   PetscFunctionReturn(PETSC_SUCCESS);
     65: }