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 Taylor-Green Vortex 6 7 #include "../qfunctions/taylorgreen.h" 8 9 #include <navierstokes.h> 10 11 PetscErrorCode NS_TAYLOR_GREEN(ProblemData problem, DM dm, void *ctx) { 12 Honee honee = *(Honee *)ctx; 13 Ceed ceed = honee->ceed; 14 MPI_Comm comm = honee->comm; 15 TaylorGreenContext taylorgreen_ctx; 16 CeedQFunctionContext taylorgreen_qfctx; 17 SetupContext setup_ctx; 18 19 PetscFunctionBeginUser; 20 PetscCall(NS_NEWTONIAN_IG(problem, dm, ctx)); 21 22 PetscCall(PetscNew(&taylorgreen_ctx)); 23 PetscCallCeed(ceed, CeedQFunctionContextGetData(problem->ics.qfctx, CEED_MEM_HOST, &setup_ctx)); 24 *taylorgreen_ctx = (struct TaylorGreenContext_){ 25 .reference = setup_ctx->reference, 26 .newt_ctx = setup_ctx->newt_ctx, 27 .lx = setup_ctx->lx, 28 .ly = setup_ctx->ly, 29 .lz = setup_ctx->lz, 30 }; 31 PetscCallCeed(ceed, CeedQFunctionContextRestoreData(problem->ics.qfctx, &setup_ctx)); 32 33 PetscOptionsBegin(comm, NULL, "Options for TAYLOR-GREEN problem", NULL); 34 PetscInt u_size = PETSC_STATIC_ARRAY_LENGTH(taylorgreen_ctx->u); 35 PetscCall(PetscOptionsScalarArray("-taylorgreen_background_velocity", "Background velocity to add to Taylor-Green initial condition", NULL, 36 taylorgreen_ctx->u, &u_size, NULL)); 37 PetscOptionsEnd(); 38 39 PetscCallCeed(ceed, CeedQFunctionContextCreate(honee->ceed, &taylorgreen_qfctx)); 40 PetscCallCeed(ceed, CeedQFunctionContextSetData(taylorgreen_qfctx, CEED_MEM_HOST, CEED_USE_POINTER, sizeof(*taylorgreen_ctx), taylorgreen_ctx)); 41 PetscCallCeed(ceed, CeedQFunctionContextSetDataDestroy(taylorgreen_qfctx, CEED_MEM_HOST, FreeContextPetsc)); 42 43 PetscCallCeed(ceed, CeedQFunctionContextDestroy(&problem->ics.qfctx)); 44 problem->ics = (HoneeQFSpec){ 45 .qf_func_ptr = ICsTaylorGreen, 46 .qf_loc = ICsTaylorGreen_loc, 47 .qfctx = taylorgreen_qfctx, 48 }; 49 PetscFunctionReturn(PETSC_SUCCESS); 50 } 51