1*98285ab4SZach Atkins // Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors. 2*98285ab4SZach Atkins // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 3*98285ab4SZach Atkins // 4*98285ab4SZach Atkins // SPDX-License-Identifier: BSD-2-Clause 5*98285ab4SZach Atkins // 6*98285ab4SZach Atkins // This file is part of CEED: http://github.com/ceed 7*98285ab4SZach Atkins 8*98285ab4SZach Atkins /// @file 9*98285ab4SZach Atkins /// Data structures for PETSc examples 10*98285ab4SZach Atkins 11b7c563b6SJeremy L Thompson #ifndef libceed_petsc_examples_structs_h 12b7c563b6SJeremy L Thompson #define libceed_petsc_examples_structs_h 13e83e87a5Sjeremylt 14e83e87a5Sjeremylt #include <ceed.h> 15e83e87a5Sjeremylt #include <petsc.h> 16e83e87a5Sjeremylt 17e83e87a5Sjeremylt // ----------------------------------------------------------------------------- 18e83e87a5Sjeremylt // PETSc Operator Structs 19e83e87a5Sjeremylt // ----------------------------------------------------------------------------- 20e83e87a5Sjeremylt 21e83e87a5Sjeremylt // Data for PETSc Matshell 22d4d45553Srezgarshakeri typedef struct OperatorApplyContext_ *OperatorApplyContext; 23d4d45553Srezgarshakeri struct OperatorApplyContext_ { 24e83e87a5Sjeremylt MPI_Comm comm; 25e83e87a5Sjeremylt DM dm; 269b072555Sjeremylt Vec X_loc, Y_loc, diag; 279b072555Sjeremylt CeedVector x_ceed, y_ceed; 28e83e87a5Sjeremylt CeedOperator op; 29e83e87a5Sjeremylt Ceed ceed; 30e83e87a5Sjeremylt }; 31e83e87a5Sjeremylt 32e83e87a5Sjeremylt // Data for PETSc Prolong/Restrict Matshells 33d4d45553Srezgarshakeri typedef struct ProlongRestrContext_ *ProlongRestrContext; 34d4d45553Srezgarshakeri struct ProlongRestrContext_ { 35e83e87a5Sjeremylt MPI_Comm comm; 36e83e87a5Sjeremylt DM dmc, dmf; 379b072555Sjeremylt Vec loc_vec_c, loc_vec_f, mult_vec; 389b072555Sjeremylt CeedVector ceed_vec_c, ceed_vec_f; 399b072555Sjeremylt CeedOperator op_prolong, op_restrict; 40e83e87a5Sjeremylt Ceed ceed; 41e83e87a5Sjeremylt }; 42e83e87a5Sjeremylt 43e83e87a5Sjeremylt // ----------------------------------------------------------------------------- 44e83e87a5Sjeremylt // libCEED Data Structs 45e83e87a5Sjeremylt // ----------------------------------------------------------------------------- 46e83e87a5Sjeremylt 47e83e87a5Sjeremylt // libCEED data struct for level 48e83e87a5Sjeremylt typedef struct CeedData_ *CeedData; 49e83e87a5Sjeremylt struct CeedData_ { 50e83e87a5Sjeremylt Ceed ceed; 511c9a79dbSrezgarshakeri CeedBasis basis_x, basis_u; 529b072555Sjeremylt CeedElemRestriction elem_restr_x, elem_restr_u, elem_restr_u_i, elem_restr_qd_i; 539b072555Sjeremylt CeedQFunction qf_apply; 549b072555Sjeremylt CeedOperator op_apply, op_restrict, op_prolong; 559b072555Sjeremylt CeedVector q_data, x_ceed, y_ceed; 56d4d45553Srezgarshakeri CeedInt q_data_size; 57e83e87a5Sjeremylt }; 58e83e87a5Sjeremylt 59e83e87a5Sjeremylt // BP specific data 60e83e87a5Sjeremylt typedef struct { 619b072555Sjeremylt CeedInt num_comp_x, num_comp_u, topo_dim, q_data_size, q_extra; 629b072555Sjeremylt CeedQFunctionUser setup_geo, setup_rhs, apply, error; 639b072555Sjeremylt const char *setup_geo_loc, *setup_rhs_loc, *apply_loc, *error_loc; 649b072555Sjeremylt CeedEvalMode in_mode, out_mode; 659b072555Sjeremylt CeedQuadMode q_mode; 669b072555Sjeremylt PetscBool enforce_bc; 679b072555Sjeremylt } BPData; 68e83e87a5Sjeremylt 69de1229c5Srezgarshakeri // BP options 702b730f8bSJeremy L Thompson typedef enum { CEED_BP1 = 0, CEED_BP2 = 1, CEED_BP3 = 2, CEED_BP4 = 3, CEED_BP5 = 4, CEED_BP6 = 5 } BPType; 71de1229c5Srezgarshakeri 72de1229c5Srezgarshakeri // ----------------------------------------------------------------------------- 73de1229c5Srezgarshakeri // Parameter structure for running problems 74de1229c5Srezgarshakeri // ----------------------------------------------------------------------------- 75de1229c5Srezgarshakeri typedef struct RunParams_ *RunParams; 76de1229c5Srezgarshakeri struct RunParams_ { 77de1229c5Srezgarshakeri MPI_Comm comm; 78de1229c5Srezgarshakeri PetscBool test_mode, read_mesh, user_l_nodes, write_solution, simplex; 79de1229c5Srezgarshakeri char *filename, *hostname; 80de1229c5Srezgarshakeri PetscInt local_nodes, degree, q_extra, dim, num_comp_u, *mesh_elem; 81de1229c5Srezgarshakeri PetscInt ksp_max_it_clip[2]; 82de1229c5Srezgarshakeri PetscMPIInt ranks_per_node; 83de1229c5Srezgarshakeri BPType bp_choice; 84de1229c5Srezgarshakeri PetscLogStage solve_stage; 85de1229c5Srezgarshakeri }; 86de1229c5Srezgarshakeri 87b7c563b6SJeremy L Thompson #endif // libceed_petsc_examples_structs_h 88