petsc and unstructured finite elements...2005/07/26 · - hyperlinked manual, examples, and manual...
TRANSCRIPT
![Page 1: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/1.jpg)
PETSc and Unstructured Finite Elements
Matthew Knepley and Dmitry Karpeev
Mathematics and Computer Science Division
Argonne National Laboratory
![Page 2: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/2.jpg)
What is PETSc?
• A freely available and supported research code
- Download from http://www.mcs.anl.gov/petsc
- Free for everyone, including industrial users
- Hyperlinked manual, examples, and manual pages for all routines
- Hundreds of tutorial-style examples
- Support via email: [email protected]
- Usable from C, C++, Fortran 77/90, and soon Python
![Page 3: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/3.jpg)
What is PETSc?
• Portable to any parallel system supporting MPI, including:
- Tightly coupled systems
Cray T3E, SGI Origin, IBM SP, HP 9000, Sub Enterprise
- Loosely coupled systems, such as networks of workstations
Compaq,HP, IBM, SGI, Sun, PCs running Linux or Windows
• PETSc History
- Begun September 1991
- Over 8,500 downloads since 1995 (version 2), currently 250 per month
• PETSc Funding and Support
- Department of Energy
SciDAC, MICS Program
- National Science Foundation
CIG, CISE, Multidisciplinary Challenge Program
![Page 4: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/4.jpg)
Linear Algebra Abstractions
• Allows reuse of iterative solvers (Krylov methods)
• Vec and Mat
• KSP and SNES can be seen as a nonlinear operator
![Page 5: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/5.jpg)
Hierarchy Abstractions
• Allows reuse of multilevel solvers and preconditioners (Multigrid)
• DA is a logically Cartesian grid
- Also contains linear discretization
- User works locally and DA handles parallel communication
• DM represents a hierarchy of meshes and associated approximation spaces
- Abstracts the control flow of a multilevel method
- User can specify local operators, or they are creating using Galerkin
- User can specify restriction and prologation, or use builtin linear space
![Page 6: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/6.jpg)
Getting More Help
• http://www.mcs.anl.gov/petsc
• Hyperlinked documentation
- Manual
- Manual pages for evey method
- HTML of all example code (linked to manual pages)
• FAQ
• Full support at [email protected]
• High profile users
- David Keyes
- Rich Martineau
- Richard Katz
![Page 7: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/7.jpg)
Needs of FEM Simulation
![Page 8: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/8.jpg)
Why Do We Need Another FEM Framework?
• Reusability
- Rarely goes beyond linear algebra
• Complexity
- Lack of effective mathematical abstractions creates inpenetrable code
• Extensibility
- Lack of effective mathematical abstractions prevents generalization
• Modularity
- Lack of effective mathematical abstractions inhibits component sharing
![Page 9: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/9.jpg)
What Do We Need For FEM Simulation?
• Mesh topology and geometry
- Hand coded =⇒ Sieve and Array
• Discretization
- Hand coded =⇒ FIAT
• Weak form PDE
- Hand coded =⇒ FFC/Expression AST interface
• Integration
- Hand coded quadrature =⇒ FFC/Generated quadrature
• Assembly
- A big mess =⇒ Sieve and Array
• Algebraic solve
- PETSc interfaces
• Preconditioning
- Often involves LinearAlgebra/Discretization/Mesh
![Page 10: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/10.jpg)
Trial Framework
Boundary Conditions
Weak Form
Finite Element
Mesh Generator
FIAT
ASE
PETSc VisualizationSieve
Sieve
FFC
Mesh Data
![Page 11: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/11.jpg)
The Sieve
![Page 12: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/12.jpg)
What is a Sieve?
A Sieve encodes topology
• Category with arrows denoting a covering relation
- We say that cap elements cover base elements
- Any set of elements is called a chain
• Model for set theory
• Hierarchical geometric data
- Finite element meshes
- Multipole octree
• Clean separation between topology and data organized by the topology
- Con-fused in most packages, e.g. PETSc Vec
![Page 13: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/13.jpg)
Simple Sieve
Topological elements are encoded as (process, local id)
(0,1)
(0,4)
(0,0)
(0,5) (0,6)
(0,3) (0,2)
(0,1) (0,3)(0,2)
(0,5)
(0,0)
(0,6) (0,4)
![Page 14: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/14.jpg)
Sieve Primitives
Cone: The set of cap elements covering a base element
cone(0, 0) = {(0, 1), (0, 2), (0, 3)}
Closure: The iterated cone
closure(0, 0) = {(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6)}
Support: The set of base elements covered by a cap element
support(0, 4) = {(0, 2), (0, 3)}
Star: The iterated support
star(0, 4) = {(0, 2), (0, 3), (0, 0)}
![Page 15: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/15.jpg)
Doublet Mesh
We can examine the meet and join using two adjacent elements
(0,2) (0,3) (0,5) (0,6)
(0,7) (0,10)
(0,0) (0,1)
(0,4)
(0,8) (0,9)
(0,1)(0,0)
(0,2)
(0,3)(0,4) (0,5)
(0,6)
(0,7)
(0,8)
(0,9)
(0,10)
![Page 16: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/16.jpg)
Doublet Mesh II
These elements provide a different lattice
(0,0)
(0,2)
(0,3)(0,4)
(0,7)
(0,8)
(0,9)
(0,0) (0,1)
(0,1)
(0,6)
(0,10)
(0,11)
(0,12)
(0,7) (0,8) (0,9) (0,10) (0,12)
(0,2) (0,3) (0,5) (0,6)(0,4) (0,11)
(0,5)
![Page 17: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/17.jpg)
Tetrahedron Mesh
(0,5)
(0,6)(0,7)
(0,8)
(0,9)
(0,10)
(0,11)
(0,12) (0,13)
(0,14)
(0,0)
(0,1) (0,2) (0,3) (0,4)
(0,5) (0,6) (0,7) (0,8) (0,9) (0,10)
(0,11) (0,12) (0,13) (0,14)
![Page 18: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/18.jpg)
Lattice Operations
Meet: The smallest set of elements whose star contains the given chain
- Can be seen as the intersection of the closures of the chain elements
- For the doublet mesh, meet((0, 0), (0, 1)) = (0, 4)
- For the split doublet mesh, meet((0, 0), (0, 1)) = (0, 9)
Join: The smallest set of elements whose closure contain the given chain
- Can be seen as the intersection of the supports of the chain elements
- For the doublet mesh, join((0, 0), (0, 1)) = ((0, 0), (0, 1))
- For the tetrahedron, join((0, 5), (0, 7)) = (0, 1)
- However, also for the tetrahedron, join((0, 5), (0, 9)) = (0, 0)
![Page 19: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/19.jpg)
Cone Completion
In a distributed Sieve, parts of an elements’s cone may lie on different processes.Completion constructs another local Sieve which contains the missing parts ofeach local cone.
• Dual operation of support completion
- Uses the same communication routine
• Single parallel operation is sufficient for Sieve
• Enables many other parallel operations
- Dual graph construction
- Graph partitioning
- Parallel and periodic meshing
![Page 20: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/20.jpg)
The Sieved Array
![Page 21: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/21.jpg)
Restriction
Restriction is the dual operation to covering
• Allows global fields to be manipulated locally
- This is the heart of FEM
• Ties value storage to the topology (hierarchy)
• Can apply to any mesh subset (chain)
- Single element
- Mesh boundary
- Local submesh
• Looks like indexing with elements
![Page 22: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/22.jpg)
Sieved Arrays
• Represent values organized by the underlying topology
- Solution fields
- Mesh geometry
- Boundary markers
- Chemical species
• Allows natural operations of restriction and prolongation (assembly)
- Many different storage policies may be used
• Allows user to work completely locally, letting the Array handle assembly
- Very similar to PETSc strategy for parallelism
• Arrays are sections of a fibre bundle over the mesh
- Transition between chains is a (nontrivial) map between vector spaces
![Page 23: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/23.jpg)
Sifting
Sifting is the operation of restricting an Array to a chain
• Nontrivial assembly and restriction policies
- replacement/preservation
- addition
- coordinate transformation
- orientation using the input chain
- Nonconforming overlapping grids
• Decouples storage/restriction policy from continuum mathematics
- Vectors are not Arrays
• Seems to tied to the storage to factor out
![Page 24: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/24.jpg)
Stack
A Stack connects two Sieves with vertical arrows
(0,2) (0,3) (0,5) (0,6)
(0,7) (0,10)
(0,0) (0,1)
(0,4)
(0,8) (0,9)
(−1,0) (−1,1) (−1,3) (−1,4)(−1,2) Top
Bottom
![Page 25: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/25.jpg)
Degrees of Freedom
Stacks organize the degrees of freedom over a mesh
• The top (discrete) sieve contains the degrees of freedom
• The bottom sieve is the mesh topology
• Sieve operations now occur over vertical arrows
• Lattice operations will now have pullback and pushforward versions
![Page 26: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/26.jpg)
Degrees of Freedom for Multiple Fields
Using a DOF and Field Stack with common top Sieve, we can extract the vari-ables from a given field using the meet operation.
� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � �
Topology
DOFs
Fields
![Page 27: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/27.jpg)
Trial Implementation
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
Topology
Chains
DOFs
Top
Bottom
= inner Stack
![Page 28: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/28.jpg)
Examples
![Page 29: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/29.jpg)
Dual Graph Creation
topology = mesh.getTopology()
# Loop over all edges
completion, footprint = topology.supportCompletion(supportFootprint)
for edge in topology.heightStratum(1):
support = topology.support(edge)
if len(support) == 2:
dualTopology.addCone(support, edge)
elif len(support) == 1 and completion.capContains(edge):
cone = (support[0], completion.support(edge)[0])
dualTopology.addCone(cone, edge)
dualMesh.setTopology(dualTopology)
![Page 30: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/30.jpg)
Mesh Partitioning
def partitionDoublet(self, topology):
if rank == 0:
topology.addCone(topology.closure((0, 0)), (-1, 0))
topology.addCone(topology.closure((0, 1)), (-1, 1))
else:
topology.addBasePoint((-1, rank))
![Page 31: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/31.jpg)
Mesh Partitioning
def genericPartition(self, comm, topology):
# Cone complete to move the partitions to the other processors
completion, footprint = topology.coneCompletion(footprintTypeCone)
# Merge in the completion
topology.add(completion)
# Cone complete again to build the local topology
completion, footprint = topology.coneCompletion(footprintTypeCone)
# Merge in the completion
topology.add(completion)
# Restrict to the local partition
topology.restrictBase(topology.cone((-1, rank)))
# Optional: Support complete to get the adjacency information
![Page 32: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/32.jpg)
FEM Numbering
Start by creating the discretizations and a Stack
elements = [FIAT.Lagrange.Lagrange(FIAT.shapes.TRIANGLE, 2),
FIAT.Lagrange.Lagrange(FIAT.shapes.TRIANGLE, 3)]
ranks = [1, 0]
dof = ALE.Sieve.Sieve()
numbering = ALE.Stack.Stack()
numbering.setTop(dof)
numbering.setBottom(topology)
![Page 33: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/33.jpg)
FEM Numbering
def multipleFieldsStack(self, topology):
completion, footprint = topology.supportCompletion(supportType)
for p in topology.space():
if completion.capContains(p):
support = footprint.support([p]+list(completion.support(p)))
if [0 for processTie in support if processTie[1] < rank]:
continue
indices = []
for field in range(len(elements)):
entityDof = len(dualBases[field].getNodeIDs(topology.depth(p))[0])
tensorSize = entityDof*max(1, dim*ranks[field])
var = [(-(rank+1), index+i) for i in range(tensorSize)]
indices.extend(var); index += dof
dof.addCone(var, (-1, field))
numbering.addCone(var, p)
completion, footprint = topology.coneCompletion(coneType)
![Page 34: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/34.jpg)
FEM Assembly
elements = mesh.heightStratum(0)
elemU = u.restrict(elements)
# Loop over highest dimensional elements
for element in elements:
# We want values over the element and all its coverings
chain = mesh.closure(element)
# Retrieve the field coefficients for this element
coeffs = elemU.getValues([element])
# Calculate the stiffness matrix and load vector
K, f = self.integrate(coeffs, self.jacobian(element, mesh, space))
# Place results in global storage
elemF.setValues([chain], f)
elemA.setValues([[chain], [chain]], K)
F = elemF.prolong([])
A = elemA.prolong([])
![Page 35: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/35.jpg)
FEM Assembly
Notice that the prior code is independent of:
• dimension
• element type
• finite element
• sifting policy
![Page 36: PETSc and Unstructured Finite Elements...2005/07/26 · - Hyperlinked manual, examples, and manual pages for all routines - Hundreds of tutorial-style examples - Support via email:](https://reader033.vdocument.in/reader033/viewer/2022042213/5eb744a3cafa4d301b330e96/html5/thumbnails/36.jpg)
Conclusions
Better mathematical abstractions bring concrete benefits:
• Vast reduction in complexity
- Dimension independent code
- Only a single communication routine to optimize
- One relation handles all hierarchy
• Expansion of capabilities
- Can handle hybrid meshes
- Can hande complicated topologies (magnetization)
- Can hande complicated structures (faults)