xref: /honee/problems/bc_slip.c (revision 5e79d5629814bf0aae86ae210d3bec329a078911)
1ae2b091fSJames Wright // SPDX-FileCopyrightText: Copyright (c) 2017-2024, HONEE contributors.
2ae2b091fSJames Wright // SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause
39ed3d70dSJames Wright 
49ed3d70dSJames Wright /// @file
59ed3d70dSJames Wright /// Utility functions for setting up slip boundary condition
69ed3d70dSJames Wright 
79ed3d70dSJames Wright #include "../qfunctions/bc_slip.h"
89ed3d70dSJames Wright 
99ed3d70dSJames Wright #include <ceed.h>
109ed3d70dSJames Wright #include <petscdm.h>
119ed3d70dSJames Wright 
12149fb536SJames Wright #include <navierstokes.h>
139ed3d70dSJames Wright #include "../qfunctions/newtonian_types.h"
149ed3d70dSJames Wright 
15*5e79d562SJames Wright static PetscErrorCode SlipBCSetup_CreateIFunctionQF(BCDefinition bc_def, CeedQFunction *qf) {
16*5e79d562SJames Wright   Honee         honee;
17*5e79d562SJames Wright   HoneeBCStruct honee_bc;
189ed3d70dSJames Wright 
199ed3d70dSJames Wright   PetscFunctionBeginUser;
20*5e79d562SJames Wright   PetscCall(BCDefinitionGetContext(bc_def, &honee_bc));
21*5e79d562SJames Wright   honee = honee_bc->honee;
22*5e79d562SJames Wright 
230c373b74SJames Wright   switch (honee->phys->state_var) {
249ed3d70dSJames Wright     case STATEVAR_CONSERVATIVE:
25*5e79d562SJames Wright       PetscCall(HoneeBCCreateIFunctionQF(bc_def, Slip_Conserv, Slip_Conserv_loc, honee_bc->qfctx, qf));
269ed3d70dSJames Wright       break;
279ed3d70dSJames Wright     case STATEVAR_PRIMITIVE:
28*5e79d562SJames Wright       PetscCall(HoneeBCCreateIFunctionQF(bc_def, Slip_Prim, Slip_Prim_loc, honee_bc->qfctx, qf));
299ed3d70dSJames Wright       break;
309b103f75SJames Wright     case STATEVAR_ENTROPY:
31*5e79d562SJames Wright       PetscCall(HoneeBCCreateIFunctionQF(bc_def, Slip_Entropy, Slip_Entropy_loc, honee_bc->qfctx, qf));
329b103f75SJames Wright       break;
339ed3d70dSJames Wright   }
34*5e79d562SJames Wright   PetscFunctionReturn(PETSC_SUCCESS);
35*5e79d562SJames Wright }
369ed3d70dSJames Wright 
37*5e79d562SJames Wright static PetscErrorCode SlipBCSetup_CreateIJacobianQF(BCDefinition bc_def, CeedQFunction *qf) {
38*5e79d562SJames Wright   Honee         honee;
39*5e79d562SJames Wright   HoneeBCStruct honee_bc;
40*5e79d562SJames Wright 
41*5e79d562SJames Wright   PetscFunctionBeginUser;
42*5e79d562SJames Wright   PetscCall(BCDefinitionGetContext(bc_def, &honee_bc));
43*5e79d562SJames Wright   honee = honee_bc->honee;
44*5e79d562SJames Wright   switch (honee->phys->state_var) {
45*5e79d562SJames Wright     case STATEVAR_CONSERVATIVE:
46*5e79d562SJames Wright       PetscCall(HoneeBCCreateIJacobianQF(bc_def, Slip_Jacobian_Conserv, Slip_Jacobian_Conserv_loc, honee_bc->qfctx, qf));
47*5e79d562SJames Wright       break;
48*5e79d562SJames Wright     case STATEVAR_PRIMITIVE:
49*5e79d562SJames Wright       PetscCall(HoneeBCCreateIJacobianQF(bc_def, Slip_Jacobian_Prim, Slip_Jacobian_Prim_loc, honee_bc->qfctx, qf));
50*5e79d562SJames Wright       break;
51*5e79d562SJames Wright     case STATEVAR_ENTROPY:
52*5e79d562SJames Wright       PetscCall(HoneeBCCreateIJacobianQF(bc_def, Slip_Jacobian_Entropy, Slip_Jacobian_Entropy_loc, honee_bc->qfctx, qf));
53*5e79d562SJames Wright       break;
54*5e79d562SJames Wright   }
55*5e79d562SJames Wright   PetscFunctionReturn(PETSC_SUCCESS);
56*5e79d562SJames Wright }
57*5e79d562SJames Wright 
58*5e79d562SJames Wright PetscErrorCode SlipBCSetup(BCDefinition bc_def, ProblemData problem, DM dm, void *ctx, CeedQFunctionContext newtonian_ig_qfctx) {
59*5e79d562SJames Wright   Honee         honee = *(Honee *)ctx;
60*5e79d562SJames Wright   Ceed          ceed  = honee->ceed;
61*5e79d562SJames Wright   HoneeBCStruct honee_bc;
62*5e79d562SJames Wright 
63*5e79d562SJames Wright   PetscFunctionBeginUser;
64*5e79d562SJames Wright   PetscCall(PetscNew(&honee_bc));
65*5e79d562SJames Wright   honee_bc->honee             = honee;
66*5e79d562SJames Wright   honee_bc->jac_data_size_sur = problem->jac_data_size_sur;
67*5e79d562SJames Wright   PetscCallCeed(ceed, CeedQFunctionContextReferenceCopy(newtonian_ig_qfctx, &honee_bc->qfctx));
68*5e79d562SJames Wright 
69*5e79d562SJames Wright   PetscCall(BCDefinitionSetContext(bc_def, HoneeBCDestroy, honee_bc));
70*5e79d562SJames Wright 
71*5e79d562SJames Wright   PetscCall(BCDefinitionSetIFunction(bc_def, SlipBCSetup_CreateIFunctionQF, HoneeBCAddIFunctionOp));
72*5e79d562SJames Wright   PetscCall(BCDefinitionSetIJacobian(bc_def, SlipBCSetup_CreateIJacobianQF, HoneeBCAddIJacobianOp));
739ed3d70dSJames Wright   PetscFunctionReturn(PETSC_SUCCESS);
749ed3d70dSJames Wright }
75