xref: /libCEED/examples/petsc/include/structs.h (revision 725737e8460c40d58b42a1300b40f05b75ddbc05)
1d275d636SJeremy L Thompson // Copyright (c) 2017-2025, 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
68*725737e8SJeremy L Thompson typedef enum {
69*725737e8SJeremy L Thompson   CEED_BP1  = 0,
70*725737e8SJeremy L Thompson   CEED_BP2  = 1,
71*725737e8SJeremy L Thompson   CEED_BP3  = 2,
72*725737e8SJeremy L Thompson   CEED_BP4  = 3,
73*725737e8SJeremy L Thompson   CEED_BP5  = 4,
74*725737e8SJeremy L Thompson   CEED_BP6  = 5,
75*725737e8SJeremy L Thompson   CEED_BP13 = 6,
76*725737e8SJeremy L Thompson   CEED_BP24 = 7,
77*725737e8SJeremy L Thompson   CEED_BP15 = 8,
78*725737e8SJeremy L Thompson   CEED_BP26 = 9,
79*725737e8SJeremy 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