39
Panzer A Finite Element Assembly Engine within the Trilinos Framework Jason M. Gates, Roger P. Pawlowksi, Eric C. Cyr Sandia NaƟonal Laboratories March 3, 2017 Sandia National Laboratories is a multi-mission laboratory managed and operated by Sandia Corporation, a wholly owned subsidiary of Lockheed Martin Corporation, for the U.S. Department of Energy’s National Nuclear Security Administration under contract DE-AC04-94AL85000. SAND NO. 2017-1977 C

Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

  • Upload
    lexuyen

  • View
    219

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Panzer

A Finite Element Assembly Engine within the Trilinos Framework

Jason M. Gates, Roger P. Pawlowksi, Eric C. Cyr

Sandia Na onal Laboratories

March 3, 2017

Sandia National Laboratories is a multi-mission laboratory managed and operated by Sandia Corporation, a wholly owned subsidiary of Lockheed MartinCorporation, for the U.S. Department of Energy’s National Nuclear Security Administration under contract DE-AC04-94AL85000. SAND NO. 2017-1977 C

Page 2: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

What is Panzer?

C++ Library

General finite element assembly engine for mul -physics

simula on

Supports 1-, 2-, & 3-D unstructured mesh calcula ons

Supplies quan es needed for advanced solu on and analysis

algorithms

residuals

Jacobians

parameter sensi vi es

stochas c residuals/etc.

Page 3: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

What is Panzer?

Contains no physics-specific code—physics applica ons are

light-weight front ends

Massively parallel for complex physics

Leverages template-based generic programming[5] to assemble

quan es of interest

Incorporates 35 Trilinos packages

Page 4: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

What is Panzer not?

Applica on

Domain specific language

Front end preprocessor/interpreter

deal.II, FEniCS, MFEM, MOOSE, Sundance

Page 5: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Panzer’s History

Lessons learned from Sandia’s PDE physics codes

Charon1, MPSalsa, etc.

Monolithic applica on−→ library of packages

Capabili es explored/developed−→ Phalanx, Panzer

Page 6: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Panzer’s History

Drekar: advanced algorithm demonstra on

Applica ons (Drekar, Charon2, EMPIRE, etc.) drive Panzer’s

requirements, design goals

Coupled mul -physics

Large scale simula on (>100k cores)

Finite element focussed (currently)

Embedded analysis (AD, sensi vi es)

Technology sharing and deployment

Panzer provides applica ons with flexible infrastructure, core

technologies

Page 7: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Panzer Enables

Applica ons

Turbulent CFD

Magnetohydrodynamics

Semiconductor devices

Suppor ng technologies

Algebraic mul grid

Block precondi oning

Uncertainty quan fica on

IMEX

PDE constrained op miza on

Compa ble discre za ons

Page 8: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Element & Physics Blocks

Element Block 0 Element Block 1

Solid

Physics

Block

Fluid

Physics

Block

Users divide the domain into element blocks

Each element block maps to a single physics block

Physics blocks contain a list of equa on sets

Page 9: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Equa on Sets

Solid Fluid

Equa on sets define the form of the PDE

Details are filled in using closure models

Navier-Stokes

∂u

∂t+ u · ∇u−∇ · (ν∇u) +∇p = f

∇ · u = 0

Energy∂T

∂t+ u · ∇T −∇ · (σ∇T) = 0

Page 10: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Data Mapping U li es

Finite element discre za ons have changed

Historically used nodal equal-order finite elements

New code embraces mixed discre za ons

Also using high-order compa ble discre za ons

Hgrad (nodal), Hcurl (edge), Hdiv (face)

Requires extra data management (orienta ons)

Hgrad Hcurl Hdiv

Page 11: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Data Mapping U li es

Three primary pieces:

FieldPa ern Describes basis layout & con nuity of fields

ConnManager Mesh topology from field pa ern (mesh abstrac on)

DOFManager Manages and computes unknown field numbers

Panzer = mesh-agnos c

panzer_stk = concrete implementa on of ConnManager

Page 12: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

FieldPa ern

Linear pressure, temperature

Quadra c veloci es

ux, uy, p, T

∂u

∂t+ u · ∇u−∇ · (ν∇u) +∇p = f

∇ · u = 0∂T

∂t+ u · ∇T −∇ · (σ∇T) = 0

Page 13: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

FieldPa ern

Linear pressure, temperature

Quadra c veloci es

ux, uy, p, Tp, T

∂u

∂t+ u · ∇u−∇ · (ν∇u) +∇p = f

∇ · u = 0∂T

∂t+ u · ∇T −∇ · (σ∇T) = 0

Page 14: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

FieldPa ern

Linear pressure, temperature

Quadra c veloci es

ux, uy, p, Tp, T ux, uy

∂u

∂t+ u · ∇u−∇ · (ν∇u) +∇p = f

∇ · u = 0∂T

∂t+ u · ∇T −∇ · (σ∇T) = 0

Page 15: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

FieldPa ern

Linear pressure, temperature

Quadra c veloci es

ux, uy, p, Tp, T ux, uy ux, uy, p, T

⋃=

∂u

∂t+ u · ∇u−∇ · (ν∇u) +∇p = f

∇ · u = 0∂T

∂t+ u · ∇T −∇ · (σ∇T) = 0

Page 16: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

ConnManager

Linear pressure, temperature

Quadra c veloci es

Solid (T) Fluid (ux, uy, p, T)

Numbering = mesh topology

0 1 2

3 4 5

6 7 8

9 10

11 12

13 14

15 16

17 18 19

20 21

22 23 24

25 26

27 28

29 30

31 32

33 34

35 36

37 38

39 40

41 42

43 44

Page 17: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

DOFManager[1]

Linear pressure, temperature

Quadra c veloci es

Solid (T) Fluid (ux, uy, p, T)

Unknown field numbering

0 12 ,3 ,4 ,5

6 78 ,9 ,10

, 11

12 13

14, 15 ,16

, 17

18, 19 ,20

, 21

22, 23 ,24

, 25

26, 27 ,28

, 29

30, 31 ,32

, 33

34, 35 ,36

, 37

38, 39 ,40

, 41

42, 43

44, 45

46, 47

48, 49

50, 51

52, 53

54, 55

56, 57

58, 59

60, 61

62, 63

64, 65

66, 67

68, 69

70, 71

72, 73

~x =

0

1

2

3

4

5

6

7

8

9

10

11

..

.

26

27

28

29

30

31

32

33

..

.

70

71

72

73

Page 18: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

DAG-Based Assembly (Phalanx)[2, 3, 4]

Decompose complex model into graph of simple kernels

Rapid development, separa on of concerns, extensibility

Automated dependency tracking

Topological sort to order evalua ons

φiu

uu

uiui

∇u

∇φiu

pi

∇p

∇φip

transientM fluxM

RC

fluxE

ν f

sourceM

RM

RMRC

φiT

T

Ti Ti

∇T

∇φiT

transientE

σ

RE

RE

RM =

∫Ω

(∂u

∂t+ u · ∇u−∇ · (ν∇u) +∇p− f

)· v dΩ, RC =

∫Ω(∇ · u) · v dΩ, RE =

∫Ω

(∂T

∂t+ u · ∇T −∇ · (σ∇T)

)· v dΩ

Page 19: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

DAG-Based Assembly (Phalanx)[2, 3, 4]

Nodes can be swapped out

Separa on of data and kernels opera ng on the data

Mul -physics complexity handled automa cally

Easy to add equa ons, change models, test in isola on

φiu

uu

uiui

∇u

∇φiu

pi

∇p

∇φip

transientM fluxM

RC

fluxE

ν f

sourceM

RM

RMRC

φiT

T

Ti Ti

∇T

∇φiT

transientE

σ

RE

RE

RM =

∫Ω

(∂u

∂t+ u · ∇u−∇ · (ν∇u) +∇p− f

)· v dΩ, RC =

∫Ω(∇ · u) · v dΩ, RE =

∫Ω

(∂T

∂t+ u · ∇T −∇ · (σ∇T)

)· v dΩ

Page 20: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Evaluators

Declare fields to evaluate (or to contribute to)

Declare dependent fields

Func on to perform evalua on

Templated on evalua on type

Specializa ons for sca ers & gathers

User code reused for residual, Jacobian, Hessian, etc.

φiu

uu

uiui

∇u

∇φiu

pi

∇p

∇φip

transientM fluxM

RC

fluxE

ν f

sourceM

RM

RMRC

φiT

T

Ti Ti

∇T

∇φiT

transientE

σ

RE

RE

RM =

∫Ω

(∂u

∂t+ u · ∇u−∇ · (ν∇u) +∇p− f

)· v dΩ, RC =

∫Ω(∇ · u) · v dΩ, RE =

∫Ω

(∂T

∂t+ u · ∇T −∇ · (σ∇T)

)· v dΩ

Page 21: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

An Example Problem

git clone [email protected]:trilinos/Trilinos

cd Trilinos/packages/panzer/adapters-stk/tutorial/siamCse17

−∆u(x, y) + k2u(x, y) = f(x, y), (x, y) ∈ Ω = (0, 1)× (0, 1)

u(x, y) = 0, (x, y) ∈ ∂Ω

Page 22: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

An Example Problem

git clone [email protected]:trilinos/Trilinos

cd Trilinos/packages/panzer/adapters-stk/tutorial/siamCse17

−∆u(x, y) + k2u(x, y) = sin(2πx) sin(2πy), (x, y) ∈ Ω

u(x, y) = 0, (x, y) ∈ ∂Ω

Page 23: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

An Example Problem

git clone [email protected]:trilinos/Trilinos

cd Trilinos/packages/panzer/adapters-stk/tutorial/siamCse17

−∆u(x, y) + (1− 8π2)u(x, y) = sin(2πx) sin(2πy), (x, y) ∈ Ω

u(x, y) = 0, (x, y) ∈ ∂Ω

Page 24: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

An Example Problem

git clone [email protected]:trilinos/Trilinos

cd Trilinos/packages/panzer/adapters-stk/tutorial/siamCse17

−∆u(x, y) + (1− 8π2)u(x, y) = sin(2πx) sin(2πy), (x, y) ∈ Ω

u(x, y) = 0, (x, y) ∈ ∂Ω

Weak Form∫Ω∇u · ∇v dΩ+ (1− 8π2)

∫Ωuv dΩ =

∫Ωsin(2πx) sin(2πy)v dΩ

Page 25: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

An Example Problem

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 26: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Create an Equa onSet

// myEquationSet.hpptemplate<typename EvalT>class MyEquationSet

:public panzer::EquationSet_DefaultImpl <EvalT>

public:

MyEquationSet(...);void buildAndRegisterEquationSetEvaluators(...) const;

private:std::string dofName_;

// end of class MyEquationSet

Page 27: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Add the Degree of Freedom and its Gradient

// myEquationSetImpl.hpptemplate<typename EvalT>MyEquationSet<EvalT>::MyEquationSet(...)

...dofName_ = "U";std::string basisType("HGrad");int basisOrder(1), integrationOrder(2);this->addDOF(dofName_, basisType,

basisOrder, integrationOrder);this->addDOFGrad(dofName_);...this->setupDOFs();

// end of Constructor

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0

φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 28: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Add the Laplacian Term

// still in myEquationSetImpl.hpptemplate<typename EvalT> void

MyEquationSet::buildAndRegisterEquationSetEvaluators(

PHX::FieldManager<panzer::Traits>& fm,...) const

Teuchos::RCP<panzer::IntegrationRule>

ir =this->getIntRuleForDOF(dofName_);

Teuchos::RCP<panzer::BasisIRLayout>basis =this->getBasisIRLayoutForDOF(dofName_);

...

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0

φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 29: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Add the Laplacian Term

std::string laplacianName("RESIDUAL_"+ dofName_ + "_LAPLACIAN");

Teuchos::ParameterList p;p.set("Residual Name", laplacianName);p.set("Flux Name", "GRAD_" + dofName_);p.set("IR", ir);p.set("Basis", basis);p.set("Multiplier", 1.0);Teuchos::RCP<PHX::Evaluator<panzer::Traits>>

op = Teuchos::rcp(newpanzer::Integrator_GradBasisDotVector <EvalT,

panzer::Traits>(p));this->template

registerEvaluator<EvalT>(fm, op);...

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0

φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 30: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Add the Helmholtz Term

// still inbuildAndRegisterEquationSetEvaluators()std::string helmholtzName("RESIDUAL_"

+ dofName_ + "_HELMHOLTZ");Teuchos::ParameterList p;p.set("Residual Name", helmholtzName);p.set("Value Name", dofName_);p.set("IR", ir);p.set("Basis", basis);p.set("Multiplier",

(1.0 - 8.0 * M_PI * M_PI));Teuchos::RCP<PHX::Evaluator<panzer::Traits>>

op = Teuchos::rcp(newpanzer::Integrator_BasisTimesScalar <EvalT,

panzer::Traits>(p));this->template

registerEvaluator<EvalT>(fm, op);...

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0

φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 31: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Add the Source Term

// still inbuildAndRegisterEquationSetEvaluators()std::string sourceName("RESIDUAL_" +

dofName_ + "_SOURCE");Teuchos::ParameterList p;p.set("Residual Name", sourceName);p.set("Value Name", dofName_ +

"_SOURCE");p.set("IR", ir);p.set("Basis", basis);p.set("Multiplier", -1.0);Teuchos::RCP<PHX::Evaluator<panzer::Traits>>

op = Teuchos::rcp(newpanzer::Integrator_BasisTimesScalar <EvalT,

panzer::Traits>(p));this->template

registerEvaluator<EvalT>(fm, op);...

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0

φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 32: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Add the Residual

// still inbuildAndRegisterEquationSetEvaluators()std::vector<std::string>

residualOperatorNameslaplacianName,helmholtzName, sourceName;

this->buildAndRegisterResidualSummationEvaluator(fm,dofName_, residualOperatorNames);

// end ofbuildAndRegisterEquationSetEvaluators()

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0

φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 33: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Create the Source Func on

// sourceTerm.hpptemplate<typename EvalT, typename Traits>class MySourceTerm

:public

PHX::EvaluatorWithBaseImpl <Traits>,public PHX::EvaluatorDerived<EvalT,

Traits>

public:MySourceTerm(...);void postRegistrationSetup(...);void evaluateFields(...);

private:PHX::MDField<EvalT::ScalarT,

panzer::Cell, panzer::Point>result;

int irDegree_, irIndex_; // end of class MySourceTerm

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0

φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 34: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Create the Source Func on

// sourceTermImpl.hpp...evaluateFields(typename Traits::EvalData

workset)

const auto& coords =workset.int_rules[irIndex]->ip_coordinates;

Kokkos::parallel_for(workset.num_cells,[=] (const panzer::index_t c)

for (int p(0);

p < result.extent_int(1); ++p)

const double& x(coords(c, p, 0)),y(coords(c, p, 1));

result(c, p) = sin(2 * M_PI * x)* sin(2 * M_PI * y);

// end loop over the IPs); // end loop over the cells

// end of evaluateFields()

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0

φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 35: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Create the ClosureModelFactory

// closureModelFactory.hpptemplate<typename EvalT>class MyClosureModelFactory

:public

panzer::ClosureModelFactory<EvalT>

public:typedef std::vector<Teuchos::RCP<

PHX::Evaluator<panzer::Traits>>>EvalVec;

typedef Teuchos::RCP<EvalVec>EvalVecRCP;

EvalVecRCP buildClosureModels(...)const;

// end of class MyClosureModelFactory

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0

φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 36: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Create the ClosureModelFactory

// closureModelFactoryImpl.hpptemplate<typename EvalT>EvalVecRCP MyClosureModelFactory <EvalT>::buildClosureModels(..., const

Teuchos::RCP<panzer::IntegrationRule >&ir, ...) const

EvalVecRCP evaluators =

Teuchos::rcp(new EvalVec);...Teuchos::RCP<PHX::Evaluator<panzer::Traits>>

e =Teuchos::rcp(new MySourceTerm<EvalT,

panzer::Traits>("U_SOURCE", *ir));evaluators->push_back(e);...return evaluators;

// end of buildClosureModels()

R =

∫Ω∇u · ∇v dΩ

+ (1− 8π2)

∫Ωuv dΩ

−∫Ωsin(2πx) sin(2πy)v dΩ

= 0

φiu

u

ui

∇u

∇φiu

HelmholtzLaplacian

f

Source

R

R

Page 37: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Summary of Steps

git clone [email protected]:trilinos/Trilinos

cd Trilinos/packages/panzer/adapters-stk/tutorial/siamCse17

1. Create an Equa onSet

1.1 Add the degree of freedom and its gradient

1.2 Add the Laplacian term

1.3 Add the Helmholtz term

1.4 Add the source term

1.5 Add the residual

2. Create the source func on

3. Create the ClosureModelFactory

Page 38: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

Concluding remarks

Applica on developers focus on complexi es in physics models,

boundary condi ons, etc.

Rapid prototyping with rela ve ease

Advanced analysis = free

Use Panzer−→ use Trilinos

How I use Trilinos

Every-day use: Panzer, Teuchos, Thyra, Phalanx, Epetra/Tpetra

Every once in a while: NOX, LOCA, Piro, Teko

Page 39: Panzer - A Finite Element Assembly Engine within the ... AFiniteElementAssemblyEnginewithintheTrilinosFramework JasonM.Gates,RogerP.Pawlowksi,EricC.Cyr SandiaNaonalLaboratories March3,2017

References

[1] Eric C. Cyr, Mark Hoemmen, Roger P. Pawlowski, and Ben Seefeldt. “Parallel Unknown Numbering for

the Finite-Element Method”. In: (2017). Submi ed to ACM TOMS.

[2] Patrick K. Notz, Roger P. Pawlowski, and James C. Sutherland. “Graph-Based So ware Design for

Managing Complexity and Enabling Concurrency in Mul physics PDE So ware”. In: ACM Trans. Math.

So w. 39.1 (Nov. 2012), 1:1–1:21. : 0098-3500. : 10.1145/2382585.2382586. :

http://doi.acm.org/10.1145/2382585.2382586.

[3] Roger P. Pawlowski, Eric T. Phipps, and Andrew G. Salinger. “Automa ng Embedded Analysis

Capabili es and Managing So ware Complexity in Mul physics Simula on, Part I: Template-based

Generic Programming”. In: Sci. Program. 20.2 (Apr. 2012), pp. 197–219. : 1058-9244. :

10.1155/2012/202071. : http://dx.doi.org/10.1155/2012/202071.

[4] Roger P. Pawlowski, Eric T. Phipps, Andrew G. Salinger, Steven J. Owen, Christopher M. Siefert, and

Ma hew L. Staten. “Automa ng Embedded Analysis Capabili es and Managing So ware Complexity

in Mul physics Simula on, Part II: Applica on to Par al Differen al Equa ons”. In: Sci. Program. 20.3

(July 2012), pp. 327–345. : 1058-9244. : 10.1155/2012/818262. :

http://dx.doi.org/10.1155/2012/818262.

[5] Eric T. Phipps and Roger P. Pawlowski. “Efficient Expression Templates for Operator Overloading-based

Automa c Differen a on”. In: CoRR abs/1205.3506 (2012). :

http://arxiv.org/abs/1205.3506.