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