xref: /honee/problems/bc_slip.c (revision 337840fc9f8b699b98947f09e30443f8c0c7f962)
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 
SlipBCSetup_CreateIFunctionQF(BCDefinition bc_def,CeedQFunction * qf)155e79d562SJames Wright static PetscErrorCode SlipBCSetup_CreateIFunctionQF(BCDefinition bc_def, CeedQFunction *qf) {
165e79d562SJames Wright   Honee         honee;
175e79d562SJames Wright   HoneeBCStruct honee_bc;
189ed3d70dSJames Wright 
199ed3d70dSJames Wright   PetscFunctionBeginUser;
205e79d562SJames Wright   PetscCall(BCDefinitionGetContext(bc_def, &honee_bc));
215e79d562SJames Wright   honee = honee_bc->honee;
225e79d562SJames Wright 
230c373b74SJames Wright   switch (honee->phys->state_var) {
249ed3d70dSJames Wright     case STATEVAR_CONSERVATIVE:
255e79d562SJames Wright       PetscCall(HoneeBCCreateIFunctionQF(bc_def, Slip_Conserv, Slip_Conserv_loc, honee_bc->qfctx, qf));
269ed3d70dSJames Wright       break;
279ed3d70dSJames Wright     case STATEVAR_PRIMITIVE:
285e79d562SJames Wright       PetscCall(HoneeBCCreateIFunctionQF(bc_def, Slip_Prim, Slip_Prim_loc, honee_bc->qfctx, qf));
299ed3d70dSJames Wright       break;
309b103f75SJames Wright     case STATEVAR_ENTROPY:
315e79d562SJames Wright       PetscCall(HoneeBCCreateIFunctionQF(bc_def, Slip_Entropy, Slip_Entropy_loc, honee_bc->qfctx, qf));
329b103f75SJames Wright       break;
339ed3d70dSJames Wright   }
345e79d562SJames Wright   PetscFunctionReturn(PETSC_SUCCESS);
355e79d562SJames Wright }
369ed3d70dSJames Wright 
SlipBCSetup_CreateIJacobianQF(BCDefinition bc_def,CeedQFunction * qf)375e79d562SJames Wright static PetscErrorCode SlipBCSetup_CreateIJacobianQF(BCDefinition bc_def, CeedQFunction *qf) {
385e79d562SJames Wright   Honee         honee;
395e79d562SJames Wright   HoneeBCStruct honee_bc;
405e79d562SJames Wright 
415e79d562SJames Wright   PetscFunctionBeginUser;
425e79d562SJames Wright   PetscCall(BCDefinitionGetContext(bc_def, &honee_bc));
435e79d562SJames Wright   honee = honee_bc->honee;
445e79d562SJames Wright   switch (honee->phys->state_var) {
455e79d562SJames Wright     case STATEVAR_CONSERVATIVE:
465e79d562SJames Wright       PetscCall(HoneeBCCreateIJacobianQF(bc_def, Slip_Jacobian_Conserv, Slip_Jacobian_Conserv_loc, honee_bc->qfctx, qf));
475e79d562SJames Wright       break;
485e79d562SJames Wright     case STATEVAR_PRIMITIVE:
495e79d562SJames Wright       PetscCall(HoneeBCCreateIJacobianQF(bc_def, Slip_Jacobian_Prim, Slip_Jacobian_Prim_loc, honee_bc->qfctx, qf));
505e79d562SJames Wright       break;
515e79d562SJames Wright     case STATEVAR_ENTROPY:
525e79d562SJames Wright       PetscCall(HoneeBCCreateIJacobianQF(bc_def, Slip_Jacobian_Entropy, Slip_Jacobian_Entropy_loc, honee_bc->qfctx, qf));
535e79d562SJames Wright       break;
545e79d562SJames Wright   }
555e79d562SJames Wright   PetscFunctionReturn(PETSC_SUCCESS);
565e79d562SJames Wright }
575e79d562SJames Wright 
SlipBCSetup(BCDefinition bc_def,ProblemData problem,DM dm,void * ctx,CeedQFunctionContext newtonian_ig_qfctx)585e79d562SJames Wright PetscErrorCode SlipBCSetup(BCDefinition bc_def, ProblemData problem, DM dm, void *ctx, CeedQFunctionContext newtonian_ig_qfctx) {
595e79d562SJames Wright   Honee         honee = *(Honee *)ctx;
605e79d562SJames Wright   Ceed          ceed  = honee->ceed;
615e79d562SJames Wright   HoneeBCStruct honee_bc;
625e79d562SJames Wright 
635e79d562SJames Wright   PetscFunctionBeginUser;
645e79d562SJames Wright   PetscCall(PetscNew(&honee_bc));
655e79d562SJames Wright   honee_bc->honee              = honee;
661abc2837SJames Wright   honee_bc->num_comps_jac_data = 5;
675e79d562SJames Wright   PetscCallCeed(ceed, CeedQFunctionContextReferenceCopy(newtonian_ig_qfctx, &honee_bc->qfctx));
685e79d562SJames Wright 
69*26d401f3SJames Wright   PetscCall(BCDefinitionSetContext(bc_def, (PetscCtxDestroyFn *)HoneeBCDestroy, honee_bc));
705e79d562SJames Wright 
715e79d562SJames Wright   PetscCall(BCDefinitionSetIFunction(bc_def, SlipBCSetup_CreateIFunctionQF, HoneeBCAddIFunctionOp));
725e79d562SJames Wright   PetscCall(BCDefinitionSetIJacobian(bc_def, SlipBCSetup_CreateIJacobianQF, HoneeBCAddIJacobianOp));
739ed3d70dSJames Wright   PetscFunctionReturn(PETSC_SUCCESS);
749ed3d70dSJames Wright }
75