1 // SPDX-FileCopyrightText: Copyright (c) 2017-2024, HONEE contributors. 2 // SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause 3 4 /// @file 5 /// Utility functions for setting up slip boundary condition 6 7 #include "../qfunctions/bc_slip.h" 8 9 #include <ceed.h> 10 #include <petscdm.h> 11 12 #include <navierstokes.h> 13 #include "../qfunctions/newtonian_types.h" 14 15 static PetscErrorCode SlipBCSetup_CreateIFunctionQF(BCDefinition bc_def, CeedQFunction *qf) { 16 Honee honee; 17 HoneeBCStruct honee_bc; 18 19 PetscFunctionBeginUser; 20 PetscCall(BCDefinitionGetContext(bc_def, &honee_bc)); 21 honee = honee_bc->honee; 22 23 switch (honee->phys->state_var) { 24 case STATEVAR_CONSERVATIVE: 25 PetscCall(HoneeBCCreateIFunctionQF(bc_def, Slip_Conserv, Slip_Conserv_loc, honee_bc->qfctx, qf)); 26 break; 27 case STATEVAR_PRIMITIVE: 28 PetscCall(HoneeBCCreateIFunctionQF(bc_def, Slip_Prim, Slip_Prim_loc, honee_bc->qfctx, qf)); 29 break; 30 case STATEVAR_ENTROPY: 31 PetscCall(HoneeBCCreateIFunctionQF(bc_def, Slip_Entropy, Slip_Entropy_loc, honee_bc->qfctx, qf)); 32 break; 33 } 34 PetscFunctionReturn(PETSC_SUCCESS); 35 } 36 37 static PetscErrorCode SlipBCSetup_CreateIJacobianQF(BCDefinition bc_def, CeedQFunction *qf) { 38 Honee honee; 39 HoneeBCStruct honee_bc; 40 41 PetscFunctionBeginUser; 42 PetscCall(BCDefinitionGetContext(bc_def, &honee_bc)); 43 honee = honee_bc->honee; 44 switch (honee->phys->state_var) { 45 case STATEVAR_CONSERVATIVE: 46 PetscCall(HoneeBCCreateIJacobianQF(bc_def, Slip_Jacobian_Conserv, Slip_Jacobian_Conserv_loc, honee_bc->qfctx, qf)); 47 break; 48 case STATEVAR_PRIMITIVE: 49 PetscCall(HoneeBCCreateIJacobianQF(bc_def, Slip_Jacobian_Prim, Slip_Jacobian_Prim_loc, honee_bc->qfctx, qf)); 50 break; 51 case STATEVAR_ENTROPY: 52 PetscCall(HoneeBCCreateIJacobianQF(bc_def, Slip_Jacobian_Entropy, Slip_Jacobian_Entropy_loc, honee_bc->qfctx, qf)); 53 break; 54 } 55 PetscFunctionReturn(PETSC_SUCCESS); 56 } 57 58 PetscErrorCode SlipBCSetup(BCDefinition bc_def, ProblemData problem, DM dm, void *ctx, CeedQFunctionContext newtonian_ig_qfctx) { 59 Honee honee = *(Honee *)ctx; 60 Ceed ceed = honee->ceed; 61 HoneeBCStruct honee_bc; 62 63 PetscFunctionBeginUser; 64 PetscCall(PetscNew(&honee_bc)); 65 honee_bc->honee = honee; 66 honee_bc->num_comps_jac_data = 5; 67 PetscCallCeed(ceed, CeedQFunctionContextReferenceCopy(newtonian_ig_qfctx, &honee_bc->qfctx)); 68 69 PetscCall(BCDefinitionSetContext(bc_def, (PetscCtxDestroyFn *)HoneeBCDestroy, honee_bc)); 70 71 PetscCall(BCDefinitionSetIFunction(bc_def, SlipBCSetup_CreateIFunctionQF, HoneeBCAddIFunctionOp)); 72 PetscCall(BCDefinitionSetIJacobian(bc_def, SlipBCSetup_CreateIJacobianQF, HoneeBCAddIJacobianOp)); 73 PetscFunctionReturn(PETSC_SUCCESS); 74 } 75