xref: /libCEED/examples/petsc/include/structs.h (revision 98285ab464d104dd6040959f61a83e9969073ceb)
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