xref: /honee/problems/bc_slip.c (revision 0aab724992399e7bc3a3c0143aa36f671b31063e)
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, 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