1ae2b091fSJames Wright // SPDX-FileCopyrightText: Copyright (c) 2017-2024, HONEE contributors. 2ae2b091fSJames Wright // SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause 3692bc0d9SJames Wright 4692bc0d9SJames Wright /// @file 5692bc0d9SJames Wright /// Utility functions for setting up Taylor-Green Vortex 6692bc0d9SJames Wright 7692bc0d9SJames Wright #include "../qfunctions/taylorgreen.h" 8692bc0d9SJames Wright 9149fb536SJames Wright #include <navierstokes.h> 10692bc0d9SJames Wright 11d3c60affSJames Wright PetscErrorCode NS_TAYLOR_GREEN(ProblemData problem, DM dm, void *ctx) { 12d9f57b1cSJames Wright Honee honee = *(Honee *)ctx; 13d9f57b1cSJames Wright Ceed ceed = honee->ceed; 14d9f57b1cSJames Wright MPI_Comm comm = honee->comm; 15d9f57b1cSJames Wright TaylorGreenContext taylorgreen_ctx; 16d9f57b1cSJames Wright CeedQFunctionContext taylorgreen_qfctx; 17d9f57b1cSJames Wright SetupContext setup_ctx; 18d9f57b1cSJames Wright 19692bc0d9SJames Wright PetscFunctionBeginUser; 20d3c60affSJames Wright PetscCall(NS_NEWTONIAN_IG(problem, dm, ctx)); 21692bc0d9SJames Wright 222d898fa6SJames Wright PetscCall(PetscNew(&taylorgreen_ctx)); 23d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextGetData(problem->ics.qfctx, CEED_MEM_HOST, &setup_ctx)); 24f5dc303cSJames Wright *taylorgreen_ctx = (struct TaylorGreenContext_){ 25f5dc303cSJames Wright .reference = setup_ctx->reference, 26*cde3d787SJames Wright .newt_ctx = setup_ctx->newt_ctx, 27f5dc303cSJames Wright .lx = setup_ctx->lx, 28f5dc303cSJames Wright .ly = setup_ctx->ly, 29f5dc303cSJames Wright .lz = setup_ctx->lz, 30f5dc303cSJames Wright }; 31d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextRestoreData(problem->ics.qfctx, &setup_ctx)); 32d9f57b1cSJames Wright 33f5dc303cSJames Wright PetscOptionsBegin(comm, NULL, "Options for TAYLOR-GREEN problem", NULL); 34f5dc303cSJames Wright PetscInt u_size = PETSC_STATIC_ARRAY_LENGTH(taylorgreen_ctx->u); 35f5dc303cSJames Wright PetscCall(PetscOptionsScalarArray("-taylorgreen_background_velocity", "Background velocity to add to Taylor-Green initial condition", NULL, 36f5dc303cSJames Wright taylorgreen_ctx->u, &u_size, NULL)); 37f5dc303cSJames Wright PetscOptionsEnd(); 38f5dc303cSJames Wright 39d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextCreate(honee->ceed, &taylorgreen_qfctx)); 40d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextSetData(taylorgreen_qfctx, CEED_MEM_HOST, CEED_USE_POINTER, sizeof(*taylorgreen_ctx), taylorgreen_ctx)); 41d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextSetDataDestroy(taylorgreen_qfctx, CEED_MEM_HOST, FreeContextPetsc)); 42d9f57b1cSJames Wright 43d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextDestroy(&problem->ics.qfctx)); 44f5dc303cSJames Wright problem->ics = (HoneeQFSpec){ 45f5dc303cSJames Wright .qf_func_ptr = ICsTaylorGreen, 46f5dc303cSJames Wright .qf_loc = ICsTaylorGreen_loc, 47f5dc303cSJames Wright .qfctx = taylorgreen_qfctx, 48f5dc303cSJames Wright }; 49692bc0d9SJames Wright PetscFunctionReturn(PETSC_SUCCESS); 50692bc0d9SJames Wright } 51