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 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 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 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