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 11991aef52SJames Wright PetscErrorCode NS_TAYLOR_GREEN(ProblemData problem, DM dm, void *ctx, SimpleBC bc) { 12*d9f57b1cSJames Wright Honee honee = *(Honee *)ctx; 13*d9f57b1cSJames Wright Ceed ceed = honee->ceed; 14*d9f57b1cSJames Wright MPI_Comm comm = honee->comm; 15*d9f57b1cSJames Wright TaylorGreenContext taylorgreen_ctx; 16*d9f57b1cSJames Wright CeedQFunctionContext taylorgreen_qfctx; 17*d9f57b1cSJames Wright SetupContext setup_ctx; 18*d9f57b1cSJames Wright PetscScalar background_velocity[3] = {0}; 19*d9f57b1cSJames Wright PetscInt background_velocity_size = PETSC_STATIC_ARRAY_LENGTH(background_velocity); 20*d9f57b1cSJames Wright 21692bc0d9SJames Wright PetscFunctionBeginUser; 22692bc0d9SJames Wright PetscCall(NS_NEWTONIAN_IG(problem, dm, ctx, bc)); 23692bc0d9SJames Wright 24*d9f57b1cSJames Wright PetscOptionsBegin(comm, NULL, "Options for TAYLOR-GREEN problem", NULL); 25*d9f57b1cSJames Wright PetscCall(PetscOptionsScalarArray("-taylorgreen_background_velocity", "Background velocity to add to Taylor-Green initial condition", NULL, 26*d9f57b1cSJames Wright background_velocity, &background_velocity_size, NULL)); 27*d9f57b1cSJames Wright PetscOptionsEnd(); 28*d9f57b1cSJames Wright 29*d9f57b1cSJames Wright PetscCall(PetscCalloc1(1, &taylorgreen_ctx)); 30*d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextGetData(problem->ics.qfctx, CEED_MEM_HOST, &setup_ctx)); 31*d9f57b1cSJames Wright taylorgreen_ctx->reference = setup_ctx->reference; 32*d9f57b1cSJames Wright taylorgreen_ctx->gas = setup_ctx->gas; 33*d9f57b1cSJames Wright taylorgreen_ctx->lx = setup_ctx->lx; 34*d9f57b1cSJames Wright taylorgreen_ctx->ly = setup_ctx->ly; 35*d9f57b1cSJames Wright taylorgreen_ctx->lz = setup_ctx->lz; 36*d9f57b1cSJames Wright PetscCall(PetscArraycpy(taylorgreen_ctx->u, background_velocity, background_velocity_size)); 37*d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextRestoreData(problem->ics.qfctx, &setup_ctx)); 38*d9f57b1cSJames Wright 39*d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextCreate(honee->ceed, &taylorgreen_qfctx)); 40*d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextSetData(taylorgreen_qfctx, CEED_MEM_HOST, CEED_USE_POINTER, sizeof(*taylorgreen_ctx), taylorgreen_ctx)); 41*d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextSetDataDestroy(taylorgreen_qfctx, CEED_MEM_HOST, FreeContextPetsc)); 42*d9f57b1cSJames Wright 43*d9f57b1cSJames Wright PetscCallCeed(ceed, CeedQFunctionContextDestroy(&problem->ics.qfctx)); 44e07531f7SJames Wright problem->ics.qf_func_ptr = ICsTaylorGreen; 45e07531f7SJames Wright problem->ics.qf_loc = ICsTaylorGreen_loc; 46*d9f57b1cSJames Wright problem->ics.qfctx = taylorgreen_qfctx; 47692bc0d9SJames Wright PetscFunctionReturn(PETSC_SUCCESS); 48692bc0d9SJames Wright } 49