1*9ba83ac0SJeremy L Thompson // Copyright (c) 2017-2026, Lawrence Livermore National Security, LLC and other CEED contributors. 298285ab4SZach Atkins // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 398285ab4SZach Atkins // 498285ab4SZach Atkins // SPDX-License-Identifier: BSD-2-Clause 598285ab4SZach Atkins // 698285ab4SZach Atkins // This file is part of CEED: http://github.com/ceed 798285ab4SZach Atkins 898285ab4SZach Atkins /// @file 998285ab4SZach Atkins /// Data structures for PETSc examples 1024a65d3dSJeremy L Thompson #pragma once 11e83e87a5Sjeremylt 12e83e87a5Sjeremylt #include <ceed.h> 13e83e87a5Sjeremylt #include <petsc.h> 14e83e87a5Sjeremylt 15e83e87a5Sjeremylt // ----------------------------------------------------------------------------- 16e83e87a5Sjeremylt // PETSc Operator Structs 17e83e87a5Sjeremylt // ----------------------------------------------------------------------------- 18e83e87a5Sjeremylt 19e83e87a5Sjeremylt // Data for PETSc Matshell 20d4d45553Srezgarshakeri typedef struct OperatorApplyContext_ *OperatorApplyContext; 21d4d45553Srezgarshakeri struct OperatorApplyContext_ { 22e83e87a5Sjeremylt MPI_Comm comm; 23e83e87a5Sjeremylt DM dm; 249b072555Sjeremylt Vec X_loc, Y_loc, diag; 259b072555Sjeremylt CeedVector x_ceed, y_ceed; 26e83e87a5Sjeremylt CeedOperator op; 27e83e87a5Sjeremylt Ceed ceed; 28e83e87a5Sjeremylt }; 29e83e87a5Sjeremylt 30e83e87a5Sjeremylt // Data for PETSc Prolong/Restrict Matshells 31d4d45553Srezgarshakeri typedef struct ProlongRestrContext_ *ProlongRestrContext; 32d4d45553Srezgarshakeri struct ProlongRestrContext_ { 33e83e87a5Sjeremylt MPI_Comm comm; 34e83e87a5Sjeremylt DM dmc, dmf; 359b072555Sjeremylt Vec loc_vec_c, loc_vec_f, mult_vec; 369b072555Sjeremylt CeedVector ceed_vec_c, ceed_vec_f; 379b072555Sjeremylt CeedOperator op_prolong, op_restrict; 38e83e87a5Sjeremylt Ceed ceed; 39e83e87a5Sjeremylt }; 40e83e87a5Sjeremylt 41e83e87a5Sjeremylt // ----------------------------------------------------------------------------- 42e83e87a5Sjeremylt // libCEED Data Structs 43e83e87a5Sjeremylt // ----------------------------------------------------------------------------- 44e83e87a5Sjeremylt 45e83e87a5Sjeremylt // libCEED data struct for level 46e83e87a5Sjeremylt typedef struct CeedData_ *CeedData; 47e83e87a5Sjeremylt struct CeedData_ { 48e83e87a5Sjeremylt Ceed ceed; 491c9a79dbSrezgarshakeri CeedBasis basis_x, basis_u; 509b072555Sjeremylt CeedElemRestriction elem_restr_x, elem_restr_u, elem_restr_u_i, elem_restr_qd_i; 519b072555Sjeremylt CeedQFunction qf_apply; 529b072555Sjeremylt CeedOperator op_apply, op_restrict, op_prolong; 539b072555Sjeremylt CeedVector q_data, x_ceed, y_ceed; 54d4d45553Srezgarshakeri CeedInt q_data_size; 55e83e87a5Sjeremylt }; 56e83e87a5Sjeremylt 57e83e87a5Sjeremylt // BP specific data 58e83e87a5Sjeremylt typedef struct { 599b072555Sjeremylt CeedInt num_comp_x, num_comp_u, topo_dim, q_data_size, q_extra; 609b072555Sjeremylt CeedQFunctionUser setup_geo, setup_rhs, apply, error; 619b072555Sjeremylt const char *setup_geo_loc, *setup_rhs_loc, *apply_loc, *error_loc; 629b072555Sjeremylt CeedEvalMode in_mode, out_mode; 639b072555Sjeremylt CeedQuadMode q_mode; 649b072555Sjeremylt PetscBool enforce_bc; 659b072555Sjeremylt } BPData; 66e83e87a5Sjeremylt 67de1229c5Srezgarshakeri // BP options 68725737e8SJeremy L Thompson typedef enum { 69725737e8SJeremy L Thompson CEED_BP1 = 0, 70725737e8SJeremy L Thompson CEED_BP2 = 1, 71725737e8SJeremy L Thompson CEED_BP3 = 2, 72725737e8SJeremy L Thompson CEED_BP4 = 3, 73725737e8SJeremy L Thompson CEED_BP5 = 4, 74725737e8SJeremy L Thompson CEED_BP6 = 5, 75725737e8SJeremy L Thompson CEED_BP13 = 6, 76725737e8SJeremy L Thompson CEED_BP24 = 7, 77725737e8SJeremy L Thompson CEED_BP15 = 8, 78725737e8SJeremy L Thompson CEED_BP26 = 9, 79725737e8SJeremy L Thompson } BPType; 80de1229c5Srezgarshakeri 81de1229c5Srezgarshakeri // ----------------------------------------------------------------------------- 82de1229c5Srezgarshakeri // Parameter structure for running problems 83de1229c5Srezgarshakeri // ----------------------------------------------------------------------------- 84de1229c5Srezgarshakeri typedef struct RunParams_ *RunParams; 85de1229c5Srezgarshakeri struct RunParams_ { 86de1229c5Srezgarshakeri MPI_Comm comm; 87de1229c5Srezgarshakeri PetscBool test_mode, read_mesh, user_l_nodes, write_solution, simplex; 88de1229c5Srezgarshakeri char *filename, *hostname; 89de1229c5Srezgarshakeri PetscInt local_nodes, degree, q_extra, dim, num_comp_u, *mesh_elem; 90de1229c5Srezgarshakeri PetscInt ksp_max_it_clip[2]; 91de1229c5Srezgarshakeri PetscMPIInt ranks_per_node; 92de1229c5Srezgarshakeri BPType bp_choice; 93de1229c5Srezgarshakeri PetscLogStage solve_stage; 94de1229c5Srezgarshakeri }; 95