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