xref: /honee/problems/taylorgreen.c (revision 2d898fa6800fcddb9cd7cb214e287e8576fd592f)
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   PetscScalar          background_velocity[3]   = {0};
19d9f57b1cSJames Wright   PetscInt             background_velocity_size = PETSC_STATIC_ARRAY_LENGTH(background_velocity);
20d9f57b1cSJames Wright 
21692bc0d9SJames Wright   PetscFunctionBeginUser;
22d3c60affSJames Wright   PetscCall(NS_NEWTONIAN_IG(problem, dm, ctx));
23692bc0d9SJames Wright 
24d9f57b1cSJames Wright   PetscOptionsBegin(comm, NULL, "Options for TAYLOR-GREEN problem", NULL);
25d9f57b1cSJames Wright   PetscCall(PetscOptionsScalarArray("-taylorgreen_background_velocity", "Background velocity to add to Taylor-Green initial condition", NULL,
26d9f57b1cSJames Wright                                     background_velocity, &background_velocity_size, NULL));
27d9f57b1cSJames Wright   PetscOptionsEnd();
28d9f57b1cSJames Wright 
29*2d898fa6SJames Wright   PetscCall(PetscNew(&taylorgreen_ctx));
30d9f57b1cSJames Wright   PetscCallCeed(ceed, CeedQFunctionContextGetData(problem->ics.qfctx, CEED_MEM_HOST, &setup_ctx));
31d9f57b1cSJames Wright   taylorgreen_ctx->reference = setup_ctx->reference;
32d9f57b1cSJames Wright   taylorgreen_ctx->gas       = setup_ctx->gas;
33d9f57b1cSJames Wright   taylorgreen_ctx->lx        = setup_ctx->lx;
34d9f57b1cSJames Wright   taylorgreen_ctx->ly        = setup_ctx->ly;
35d9f57b1cSJames Wright   taylorgreen_ctx->lz        = setup_ctx->lz;
36d9f57b1cSJames Wright   PetscCall(PetscArraycpy(taylorgreen_ctx->u, background_velocity, background_velocity_size));
37d9f57b1cSJames Wright   PetscCallCeed(ceed, CeedQFunctionContextRestoreData(problem->ics.qfctx, &setup_ctx));
38d9f57b1cSJames 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));
44e07531f7SJames Wright   problem->ics.qf_func_ptr = ICsTaylorGreen;
45e07531f7SJames Wright   problem->ics.qf_loc      = ICsTaylorGreen_loc;
46d9f57b1cSJames Wright   problem->ics.qfctx       = taylorgreen_qfctx;
47692bc0d9SJames Wright   PetscFunctionReturn(PETSC_SUCCESS);
48692bc0d9SJames Wright }
49