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
NS_TAYLOR_GREEN(ProblemData problem,DM dm,void * ctx)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