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
SlipBCSetup_CreateIFunctionQF(BCDefinition bc_def,CeedQFunction * qf)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
SlipBCSetup_CreateIJacobianQF(BCDefinition bc_def,CeedQFunction * qf)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
SlipBCSetup(BCDefinition bc_def,ProblemData problem,DM dm,void * ctx,CeedQFunctionContext newtonian_ig_qfctx)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