35
Finite Elemente Toolboxen Simon Praetorius Institut f¨ ur Wissenschaftliches Rechnen TU Dresden 24. Januar 2013 Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 1 / 35

Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

  • Upload
    phambao

  • View
    237

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Finite Elemente Toolboxen

Simon Praetorius

Institut fur Wissenschaftliches RechnenTU Dresden

24. Januar 2013

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 1 / 35

Page 2: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Outline

1 Ubersicht uber FEM Software

2 deal.II

3 FEniCS

4 AMDiS

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 2 / 35

Page 3: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Ubersicht uber FEM Software

Eine große Menge an Software zu FE-Kalkulationen ist auf dem Markt,z.B.

Abaqus∗

Albert[a] (C)

Algor∗

AMDiS (C++)

Ansys∗

CalculiX (Fortran, C)

Comsol Multiphysics∗

deal.II (C++)

DUNE (C++)

Elmer

feel++ (C++)

Felicity (Matlab)

FEniCS (Python, C++)

FreeFem++ (C++, ...-cs)

GetFem++ (C++, Matlab)

Hermes Project (C, C++)

hpGEM (C++)

KASKADE (C, C++)

LS-Dyna∗

Nastran∗

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 3 / 35

Page 4: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

deal.II: A Finite ElementDifferential Equations Analysis Library

deal.II ist eine C++ Programmierbibliothek mit dem Fokus auf derrechnergestutzten Losung von partiellen Differentialgleichungen, mittelsadaptiver Finite Elemente Methode. Aktuellste Programmiertechnikenwerden genutzt, um eine moderne Schnittstelle bereitzustellen zu denkomplexen Datenstrukturen und Algorithmen, die in diesem Bereichbenotigt werden.

Geschichte

erste veroffentlichte Version: deal.II 3.0 im Jahr 2000 (etwa 124.000Zeilen Quelltext)

heute: mehr als 500.000 Zeilen Code, ca. 500 Downloads pro Monatund 40 aktive Entwickler

siehe auch www.dealii.org

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 4 / 35

Page 5: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

deal.II Basics

Die Bibliothek ist nicht dazu entwicklet, um eine Reihe vonAnwendungsfallen abzudecken. Vielmehr ist sie als Tollbox gedacht, diealles enthalt, was man benotigt, um eine Finite-Elemente Anwendung zuentwickeln. Die wichtigsten Schritte fur ein Finite-Elemente Programm(auch fur komplexe nichtlineare Probleme), sind typischerweise:

1 Beschreibung des Rechengebietes (Gitters) und Definition desFinite-Elemente Raumes

2 Assemblierung eines diskreten linearen, oder linearisiertenGleichungssystems

3 Losung des Gleichungssystems

4 Postprocessing, also numerische Auswertung der Losung, oderVisualisierung

Alle diese Aufgaben werden von deal.II unterstutzt, entweder direkt, oder(z.B. bei der Visualisierung), durch Schnittstellen zu externer Software.

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 5 / 35

Page 6: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Features von deal.II

Einige Beispiele, was deal.II fur Moglichkeiten bietet:

Die Diskretisierung des Rechengebiets basiert auf der Zerlegung inHyper-Cubes, also Linien (1D), Vierecke (2D), oder Hexaeder (3D).

Man kann den Code dimensionsunabhangig entwickeln (1D, 2D, bzw.3D)

Lokale Verfeinerung der Gitter (h, p, und hp Adaptivitat)

Eine große Menge an Finiten Elementen stehen zur Auswahl (z.B.Lagrange bel. Ordnung (Kontinuierlich/Diskontinuierlich), Nedelec,Raviart-Thomas (bel. Ordnung), Zusammengesetzte Elemente,Hierarschische Elemente, ....)

Parallelisierung (mit mehr als 16k Prozessoren moglich)

Wichtige Frage: Wie sieht die Schnittstelle fur den Nutzer aus?

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 6 / 35

Page 7: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (1)

void run() {

make_grid();

setup_system();

assemble_system();

solve();

output_results();

}

void make_grid() {

Point<2> p0(-5.0, -1.0);

Point<2> p1( 5.0, 4.0);

std::vector<unsigned> rep(2);

rep[0] = 10; rep[1] = 5;

GridGenerator::subdivided_hyper_rectangle(

triangulation, rep, p0, p1, true);

}

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 7 / 35

Page 8: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (2)

void setup_system() {

dof_handler.distribute_dofs(fe); // DOFs verteilen

(...)

}

void solve() {

SolverControl solver_control(1000, 1e-12);

SolverCG<> solver(solver_control);

solver.solve(K, solution, f, PreconditionIdentity());

}

void output_results() const {

DataOut<2> data_out; (...) // Losung zuweisen

std::ofstream output("solution.vtu");

data_out.write_vtu(output);

}

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 8 / 35

Page 9: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (3)

void assemble_system()

{

QGauss<2> quadrature_formula(4);

FEValues<2> data(fe, quadrature_formula,

update_values | update_gradients | update_JxW_values);

const unsigned dofs_per_cell = fe.dofs_per_cell;

const unsigned n_q_points = quadrature_formula.size();

FullMatrix<double> E(dofs_per_cell, dofs_per_cell);

Vector<double> e(dofs_per_cell);

std::vector<unsigned> k(dofs_per_cell);

std::map<unsigned, double> boundary_values;

...

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 9 / 35

Page 10: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (4)

...

// Parameters

double F = 1.0, mu = 10.0, lambda = 10.0;

Tensor<2,2,double> A;

A[0][0] = lambda + 2.0*mu; A[1][1] = mu;

DoFHandler<2>::active_cell_iterator

cell = dof_handler.begin_active(),

endc = dof_handler.end();

for (; cell!=endc; ++cell) {

// assemble matrix and vector ...

}

VectorTools::interpolate_boundary_values(

dof_handler, 0, ZeroFunction<2>(), boundary_values);

MatrixTools::apply_boundary_values(

boundary_values, K, solution, f);

}

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 10 / 35

Page 11: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (5)

// assemble matrix and vector ...

data.reinit (cell);

E = 0; E = 0;

for (unsigned a = 0; a < dofs_per_cell; ++a)

for (unsigned b = 0; b < dofs_per_cell; ++b)

for (unsigned iq = 0; iq < n_q_points; ++iq)

E(a,b) += data.shape_grad(a, iq) *

(A * data.shape_grad(b, iq)) *

data.JxW(iq);

for (unsigned a = 0; a < dofs_per_cell; ++a)

for (unsigned iq = 0; iq < n_q_points; ++iq)

e(a) += data.shape_value(a, iq) * F * data.JxW(iq);

...

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 11 / 35

Page 12: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (6)

...

// local to global mapping k(.,.)

cell->get_dof_indices(k);

for (unsigned a = 0; a < dofs_per_cell; ++a)

for (unsigned b = 0; b < dofs_per_cell; ++b)

K.add(k[a], k[b], E(a,b));

for (unsigned a = 0; a < dofs_per_cell; ++a)

f(k[a]) += e(a);

−→That’s it!

Etwa 90 Zeilen Quelltext fur dieses Beispiel notig.

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 12 / 35

Page 13: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

deal.II Fazit

deal.II ist eine sehr machtige Bibliothek.

Trotzdem gibt es eine sehr umfangreiche Dokumentation in Form von48 Tutorial Einheiten.

Man bekommt direkten Zugriff auf die Assemblierung, dieBasisfunktionen, Quadratur etc.. Damit sind auch sehr spezielle Ideenumsetzbar.

Aber: Kompletter Assemblierungsprozess muss noch selbstgeschrieben werden, und jegliche Optimierungen mussen auch manuelleingebaut werden. → sehr viel Wissen wird vorausgesetzt.

Implementierung eines einfachen Beispiels trotzdem rechtzeitaufwendig.

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 13 / 35

Page 14: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Gallery

Figure: Quasistatic deformation: It shows the gradual deformation of a cylinderunder pressure from above, until it essentially fails. The color coding indicatesstress levels in the material.

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 14 / 35

Page 15: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

FEniCS

Das FEniCS Projekt ist eine Zusammenfassung von mehreren Projektenzur Entwicklung von innovativen Konzepten und Werkzeugen zumautomatischen wissenschaftlichen Rechnen, mit Fokus auf demautomatischen Losen von Differentialgleichungen mit der Finite-ElementMethode.Das FEniCS Projekt wurde entwickelt von Forschern aus einer großen Zahlvon Forschungseinrichtungen auf der ganzen Welt, u.A.

Simula Research Laboratory

University of Cambridge

University of Chicago

Texas Tech University

KTH Royal Institute of Technology

Die Entwicklung begann etwa 2003. Siehe dazu www.fenicsproject.org

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 15 / 35

Page 16: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

FEniCS Komponenten

FEniCS ist organisiert, als eine Kollektion von miteinandernverknupften/interagierenden Komponenten, die zusammen das FEniCSProjekt bilden.

Komponenten

die Problemlosungs-Umgebung DOLFIN,

den Formcompiler FFC,

ein Tool zur Tabellierung von Finiten Elementen: FIAT,

den just-in-time Compiler Instant,

eine Code-Generator-Schnittstelle UFC,

die Formbeschreibungssprache UFL

und eine Liste weiterer Pakete.

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 16 / 35

Page 17: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

FEniCS Komponenten

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 17 / 35

Page 18: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Features

Automatische Losung von Variationsproblemen (in nahezumathematischer Notation), linear und nicht-linear

Automatische Fehlerkontrolle durch adaptive Verfeinerung undZielorientierte Fehlerschatzer

Eine große Bibliothek an Finiten Elementen, z.B. Lagrange,(kontinuierlich/diskontinuierlich), Vektorelemente (BDM, RT,Nedelec), Crouzeix-Raviart, ...

Verschiedene Lineare Algebra Backends (PETSc, Trilinos/Epetra,uBlas, MTL4), auch fur parallele Rechnungen geeignet

Simplex-Gitter in 1D (Interval), 2D (Dreieck) und 3D (Tetraeder),mit lokaler Verfeinerung und Gebietszerlegung

Live-Plotting und Ausgabe in verschiedendste Dateiformate

Schnittstellen fur Python und C++

Dokumentation, Tutorial, Buch und online Demos

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 18 / 35

Page 19: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (1)

from dolfin import *

# Generate a mesh

mesh = RectangleMesh(-5.0, -1.0, 5.0, 4.0, 10, 5)

V = FunctionSpace(mesh, "Lagrange", 2)

# Define Dirichlet boundary (x = -5)

def boundary(x):

return x[0] < -5.0 + DOLFIN_EPS

# Define boundary condition

u0 = Constant(0.0)

bc = DirichletBC(V, u0, boundary)

...

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 19 / 35

Page 20: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (2)

...

# Parameters

mu = Constant(10.0)

lmbda = Constant(10.0)

A = as_matrix(((lmbda+2*mu, 0), (0, mu)))

F = Constant(1.0)

# Define variational problem

u = TrialFunction(V)

v = TestFunction(V)

a = inner(A*grad(u), grad(v))*dx

L = F*v*dx

...

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 20 / 35

Page 21: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (3)

...

# Compute solution

u = Function(V)

solve(a == L, u, bc)

# Save solution in VTK format

file = File("elasticity.pvd")

file << u

# Plot solution

plot(u, interactive=True)

−→That’s it!

Etwa 19 Zeilen Quelltext fur dieses Beispiel notig.

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 21 / 35

Page 22: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Gallery

Figure: oben: Verteilte und komplizierte Gitter, unten: Stromung durch eingekrummtes Rohr

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 22 / 35

Page 23: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

AMDiS Adaptive Multi-Dimensional Simulations

AMDiS ist eine Entwicklung aus eigenem Hause, entstanden etwa 2005,als eine Neu-/Weiterentwicklung der C-Bibliothek ALBERTA. Es wurdeals modulares objektorientiertes Framework konzipiert und wird heute invielen Bereichen genutzt und weiterentwickelt.Grundkonzept, die in AMDiS umgesetzt wurden:

Hohes Abstraktionslevel: (Physikalische) Probleme werden soformuliert, dass der Nutzer sich moglichst wenig, um die numerischenDetails kummern muss.

Allgemeingultigkeit: Mit AMDiS kann eine sehr große Klasse anProblemen umgesetzt werden. Lineare und nichtlineare Probleme,stationare, wie auch zeitabhangige Probleme konnen behandeltwerden. Verschiedene Probleme der selben Dimension, oderunterschiedlicher Dimension konnen gekoppelt werden in einemProgramm und auch Systeme von Gleichungen konnen umgesetztwerden.

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 23 / 35

Page 24: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

AMDiS Adaptive Multi-Dimensional Simulations

Erweiterbarkeit und Wiederverwendbarkeit: Eine Schnittstelle zurErweiterung der Funktionalitat von AMDiS an verschiedendstenStellen wird bereitgestellt, so konnen z.B. eigene Fehlerschatzer,Gleichungssystemloser, Vorkonditionierer, Zeitschritt Verfahren...bereitgestellt werden.

Effizienz: Zur schnellen Losung von Problemen sind eine Reihe anWerkzeugen implementiert, wie adaptive Gitter, Parallelisierung,...

siehe auch www.amdis-fem.org

Entwickler

Simon Vey

Christina Stocker

Thomas Wittkowski

Andreas Naumann

(Simon Praetorius)

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 24 / 35

Page 25: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

AMDiS - Simulationsaufbau

AMDiS Programme bestehen in der Regel aus drei Teilen:

1 Einem (Macro-)Gitter (Grundgitter)

2 Einer Parameterdatei zur Steuerung der Loser, der Dimensionen, derFinitelementeraume, der Ergebnisausgabe,....

3 Das eigentliche (C++)-Programm, in dem Operatoren undRandbedingungen und die Ablaufsteuerung etc. definiert werden

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 25 / 35

Page 26: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (1)

AMDiS::init(argc, argv);

// ===== create and init the scalar problem =====

ProblemStat elasticity("elasticity");

elasticity.initialize(INIT_ALL);

// === create adapt and adapt info ===

AdaptInfo adaptInfo("elasticity->adapt",

elasticity.getNumComponents());

AdaptStationary adapt("elasticity->adapt",

elasticity, adaptInfo);

...

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 26 / 35

Page 27: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (2)

...

// ===== parameters =====

double F = 1.0, mu = 10.0, lambda = 10.0;

WorldMatrix<double> A;

A[0][0] = lambda + 2.0*mu; A[1][1] = mu;

// ===== create matrix operator =====

Operator matrixOperator(elasticity.getFeSpace());

matrixOperator.addTerm(new Matrix_SOT(A));

elasticity.addMatrixOperator(matrixOperator, 0, 0);

// ===== create rhs operator =====

Operator rhsOperator(elasticity.getFeSpace());

rhsOperator.addTerm(new Simple_ZOT(F));

elasticity.addVectorOperator(rhsOperator, 0);

...

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 27 / 35

Page 28: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (3)

...

// ===== add boundary conditions =====

elasticity.addDirichletBC(1, 0, 0,

new AMDiS::Const<double, WorldVector<double> >(0.0));

// ===== start adaption loop =====

adapt.adapt();

elasticity.writeFiles(adaptInfo, true);

AMDiS::finalize();

−→That’s it!

Etwa 19 Zeilen Quelltext fur dieses Beispiel notig.

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 28 / 35

Page 29: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Parameterdatei

dimension of world: 2

mesh->macro file name: macro/macro.elasticity.2d

mesh->global refinements: 0

elasticity->mesh: mesh

elasticity->dim: 2

elasticity->components: 1

elasticity->polynomial degree[0]: 2

elasticity->solver: cg

elasticity->solver->max iteration: 1000

elasticity->solver->tolerance: 1.e-8

elasticity->solver->info: 10

elasticity->solver->left precon: diag

elasticity->solver->right precon: no

elasticity->output->filename: output/elasticity.2d

elasticity->output->ParaView format:1

elasticity->adapt->max iteration: 0

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 29 / 35

Page 30: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Gallery

Figure: top-left: PFC equation on a moving surface to simulate virus growth.top-middle: Smectic Order on the Sphere, top-right and bottom: Sliding dropletson nano structures.

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 30 / 35

Page 31: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Eigene Implementierung

Mit Ausgabe der Programmieraufgabe habe auch ich einen FEM Codegeschrieben. Zum Teil werden Ideen verschiedener Toolboxen kombiniert.Im Moment aber noch sehr wenig Funktionalitat.

Details

ca. 4000 Zeilen Quelltext, Entwicklungszeit: 30 Tage

Generische C++ Implementierung

Regulare 1D (Intervall) und 2D (Rechtecks) Gitter

Lagrange-Elemente Q1 und Q2

...

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 31 / 35

Page 32: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (1)

static const int DOW = 2;

/// generate a mesh

typename FixedVector<DOW>::type p0(DOW), p1(DOW);

p0 = -5.0, -1.0;

p1 = 5.0, 4.0;

typedef RectangularMesh MeshType;

MeshType mesh(p0, p1, 10, 5);

/// definition of finite element spaces

typedef FeSpaces::Lagrange::Q2<MeshType> FeSpace;

FeSpace feSpace(mesh);

/// definition of the problem

Problem<FeSpace> prob(feSpace);

...

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 32 / 35

Page 33: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (2)

...

/// parameters

double F = 1.0, mu = 10.0, lambda = 10.0;

typename FixedMatrix<DOW, DOW>::type A(DOW, DOW);

A = lambda + 2*mu, 0.0, 0.0, mu;

// operators

Matrix_SOT<DOW, true> mat_SOT(A);

Constant_RHS<DOW> b_ZOT(F);

/// assemble matrix

MatrixType K;

VectorType f;

prob.assemble<0,0>(K, f, mat_SOT, b_ZOT);

...

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 33 / 35

Page 34: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Beispiel Programmieraufgabe (3)

...

/// assemble boundary conditions

std::set<size_t> dbc_indices;

prob.getDbcIndices<0>(0, p0[0], dbc_indices);

std::set<size_t>::iterator dbc_iter;

for (dbc_iter = dbc_indices.begin();

dbc_iter!= dbc_indices.end(); dbc_iter++)

prob.setDirichletBC(*dbc_iter, 0.0, K, f, true);

/// solve system

VectorType u(num_cols(K)); u = 0.0;

mtl::matrix::umfpack_solve(K, u, f);

/// output solution

Output<MeshType> out(mesh, "./output");

out.writeVtu(prob.getDofVector<0>(), "solution");

−→That’s it!

Etwa 28 Zeilen Quelltext fur dieses Beispiel notig.Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 34 / 35

Page 35: Finite Elemente Toolboxen - TU Dresdenspraetor/uebung_fem_ws12/... · adaptiver Finite Elemente Methode. Aktuellste Programmiertechniken Aktuellste Programmiertechniken werden genutzt,

Operator Matrix SOTAls Beispiel fur einen Operator, wird hier die Implementierung vonMatrix SOT gezeigt:

template<int dow, bool symmetric = false>

struct Matrix_SOT : Bilinearform<dow>

{

typedef parameters<1, (...) | Flag::constant,

Flag::provide_gradients> Parameters;

Matrix_SOT(typename FixedMatrix<dow,dow>::type& A) : A(A) { }

(...)

typedef typename FixedVector<dow>::type WorldVector;

double eval(const double& psi, const double& u,

const WorldVector& gradPsi, const WorldVector& gradU,

const size_t iq) const

{

WorldVector temp(dow);

temp = A*gradU;

return dot(gradPsi, temp);

}

private:

typename FixedMatrix<dow,dow>::type A;

};

Simon Praetorius (TU Dresden IWR) FEM-Toolboxen 24. Januar 2013 35 / 35