Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Progress in Mesh-Adaptive Discontinuous GalerkinMethods for CFD
German Aerospace Center Seminar
Krzysztof FidkowskiDepartment of Aerospace Engineering
The University of Michigan
May 4, 2009
K. Fidkowski (UM) DLR 2009 May 4, 2009 1 / 59
Outline
1 Introduction
2 Output Error EstimationDiscrete Adjoint SolutionsEntropy Adjoint Connection
3 Mesh Generation and AdaptationHanging Node RefinementSimplex Cut Cells
4 Results
K. Fidkowski (UM) DLR 2009 May 4, 2009 2 / 59
Outline
1 Introduction
2 Output Error EstimationDiscrete Adjoint SolutionsEntropy Adjoint Connection
3 Mesh Generation and AdaptationHanging Node RefinementSimplex Cut Cells
4 Results
K. Fidkowski (UM) DLR 2009 May 4, 2009 3 / 59
Introduction
Complex CFD simulations made possible byIncreasing computational power
Improvements in numerical algorithms
New liability: ensuring accuracy of computationsManagement by expert practitioners is not feasible forincreasingly-complex flowfields
Reliance on best-practice guidelines is an open-loop solution:numerical error unchecked for novel configurations
Output calculations are not yet sufficiently robust, even onrelatively standard simulations
K. Fidkowski (UM) DLR 2009 May 4, 2009 4 / 59
AIAA Drag Prediction Workshop III
0 2 4 6 8 10 12 14 16 18 20 220.024
0.026
0.028
0.03
0.032
0.034
Solution Index
CD
, TO
T
MultiblockOversetUnstructuredMedian1 Std Dev
Drag coefficient predictions for the DLR-F6 wing-body at M = 0.75, CL = 0.5, Re = 5 × 106.
Variation of 25 drag counts: 1 drag count ≈ 4 passengers for alarge transport aircraft (ADIGMA goal: 10 counts)Only slight improvement over results from previous two workshops
K. Fidkowski (UM) DLR 2009 May 4, 2009 5 / 59
Improving CFD Robustness
Error estimation“Error bars” on outputs of interest are necessary for confidence inCFD results
Mathematical theory exists for obtaining such error bars
Recent works demonstrate the success of this theory foraerospace applications
Mesh adaptationError estimation alone is not enough
Engineering accuracy for complex aerospace simulationsdemands mesh adaptation to control numerical error
Automated adaptation improves robustness by closing the loop inCFD analysis
K. Fidkowski (UM) DLR 2009 May 4, 2009 6 / 59
Outline
1 Introduction
2 Output Error EstimationDiscrete Adjoint SolutionsEntropy Adjoint Connection
3 Mesh Generation and AdaptationHanging Node RefinementSimplex Cut Cells
4 Results
K. Fidkowski (UM) DLR 2009 May 4, 2009 7 / 59
Outline
1 Introduction
2 Output Error EstimationDiscrete Adjoint SolutionsEntropy Adjoint Connection
3 Mesh Generation and AdaptationHanging Node RefinementSimplex Cut Cells
4 Results
K. Fidkowski (UM) DLR 2009 May 4, 2009 8 / 59
Discrete Adjoint Definition
Consider Nh algebraic equations and an output,
Rh(uh) = 0, Jh = Jh(uh)
uh ∈ RNh is the vector of unknowns
Rh ∈ RNh is the vector of residuals
Jh(uh) is a scalar output of interest
The discrete output adjoint vector, ψh ∈ RNh , is the sensitivity of Jh to
an infinitesimal residual perturbation, δRh ∈ RNh ,
δJh ≡ ψTh δRh
K. Fidkowski (UM) DLR 2009 May 4, 2009 9 / 59
Discrete Adjoint Equation
The linearized perturbed equations are:
∂Rh
∂uhδuh + δRh = 0,
Also linearizing the output we have,
δJh =∂Jh
∂uhδuh =
linearized equations︷ ︸︸ ︷
ψTh δRh
︸ ︷︷ ︸
adjoint definition
= −ψTh
∂Rh
∂uhδuh
Requiring the above to hold for arbitrary perturbations yields the lineardiscrete adjoint equation
(∂Rh
∂uh
)T
ψh +
(∂Jh
∂uh
)T
= 0
K. Fidkowski (UM) DLR 2009 May 4, 2009 10 / 59
Variational Adjoint Definition
Galerkin weighted residual statement: determine uh ∈ Vh such that
Rh(uh, vh) = 0, ∀vh ∈ Vh
Vh is a finite-dimensional space of functions
Rh(·, ·) : Vh × Vh → R is a semilinear form
Jh(uh) : Vh → R is a scalar output
The output adjoint is a function, ψh ∈ Vh, that is the sensitivity of Jh toa residual perturbation, δr:
δJh ≡ (δrh,ψh)
where (·, ·) : Vh × Vh → R is a suitable inner product
K. Fidkowski (UM) DLR 2009 May 4, 2009 11 / 59
Variational Adjoint Statement
The Fréchét-linearized equations are:
R′
h[uh](δuh, vh) + (δrh, vh) = 0, ∀vh ∈ Vh,
Also linearizing the output we have,
δJh = J ′
h[uh](δuh) =
linearized equations︷ ︸︸ ︷
(δrh,ψh)︸ ︷︷ ︸
adjoint definition
= −R′
h[uh](δuh,ψh)
Requiring the above to hold for arbitrary perturbations yields the linearvariational adjoint statement: find ψh ∈ Vh such that
R′
h[uh](vh,ψh) + J ′
h[uh](vh) = 0, ∀vh ∈ Vh
K. Fidkowski (UM) DLR 2009 May 4, 2009 12 / 59
Continuous Adjoint
The continuous primal solution, u ∈ V, satisfies
R(u, v) = 0, ∀v ∈ V,
The continuous adjoint solution, ψ ∈ V, satisfies
R′[u](v,ψ) + J ′[u](v) = 0, ∀v ∈ V
V is an infinite-dimensionalspace
ψ is a Green’s functionrelating source residuals tooutput perturbations[Giles and Pierce, 1997]
x-momentum lift adjoint, M∞ = 0.4, α = 5o
K. Fidkowski (UM) DLR 2009 May 4, 2009 13 / 59
Output Error Estimation
Output error: difference between an output computed with thediscrete system solution and that computed with the exact solution
Output error estimation techniques
Identify all areas of the domain that are important for the accurateprediction of an output
Account for propagation effects inherent to hyperbolic problems
Require solution of an adjoint equation
Output error estimates can be used to:
Ascribe confidence levels to engineering outputs in the presenceof numerical errors
Drive an adaptive method to reduce the output error below auser-specified tolerance
K. Fidkowski (UM) DLR 2009 May 4, 2009 14 / 59
Adjoint-Weighted Residual Method
Goal: Calculate JH(uH) − Jh(uh) = output error estimate
uH ∈ VH = coarse solution
uh ∈ Vh = fine solution
x
u
hu
δuhuH
Could solve for uh and recompute the output – expensive and notdirectly useful for adaptation
Idea: uH generally does not satisfy the fine-level equations. Thatis, Rh(uH , vh) 6= 0. Instead, uH solves: find u′
h ∈ Vh such that
Rh(u′
h, vh) −Rh(uH , vh) = 0 ∀vh ∈ Vh
K. Fidkowski (UM) DLR 2009 May 4, 2009 15 / 59
Adjoint-Weighted Residual Method (ctd.)
x
u
hu
δuhuH
−Rh(uH , vh) is a residual perturbation on the fine discretization
Suppose we have an adjoint solution on the fine mesh: ψh ∈ Vh
The adjoint lets us calculate the output perturbation from the pointof view of the fine discretization:
δJh = Jh(uH) − Jh(uh) ≈ −Rh(uH ,ψh)
[Becker and Rannacher, 1996; Giles et al , 1997]
K. Fidkowski (UM) DLR 2009 May 4, 2009 16 / 59
Approximating ψh
How do we calculate ψh = the adjoint on the fine discretization?
Options:1 Solve for uh and then ψh – expensive! Potentially still useful to
drive adaptation. [Solín and Demkowicz, 2004; Hartmann et al ]
2 Solve for ψH ∈ VH = the adjoint on the coarse discretization:
R′
H [uH ](vH ,ψH) + J ′
H [uH ](vH) = 0, ∀vH ∈ VH ,
1 Reconstruct ψH on the fine discretization using a higher-accuracystencil. Smoothness assumption on adjoint.[Rannacher, 2001; Barth and Larson, 2002; Venditti and Darmofal2002; Lu, 2005; Fidkowski and Darmofal, 2007]
2 Initialize ψh with ψH and take a few iterative solution steps on thefine discretization.[Barter and Darmofal, 2008; Oliver and Darmofal, 2008]
K. Fidkowski (UM) DLR 2009 May 4, 2009 17 / 59
Outline
1 Introduction
2 Output Error EstimationDiscrete Adjoint SolutionsEntropy Adjoint Connection
3 Mesh Generation and AdaptationHanging Node RefinementSimplex Cut Cells
4 Results
K. Fidkowski (UM) DLR 2009 May 4, 2009 18 / 59
Entropy Adjoint Connection
Collaborative work with P. L. Roe
Adjoint-based output error estimation is “state of the art” but itrequires solution of an adjoint problem for each outputtargets only requested outputs
Currently investigating connection between entropy variablesand adjoint solutions in order to derive an adaptive indicator that
does not require solution of an adjoint problemproduces an “overall good” solution
For a conservation law of the form
Ai∂iu = 0
the entropy variables, v, satisfy an adjoint equation:
ATi ∂iv = 0
K. Fidkowski (UM) DLR 2009 May 4, 2009 19 / 59
Entropy Adjoint Connection
The entropy variables are readily computable from the state u:
v = UTu =
[γ − Sγ − 1
−12
ρV 2
p,
ρui
p, −
ρ
p
]T
,
The output associated with the entropy variable adjoint is
J =
∫
Ω
Finids
where Fi(U) is the entropy flux, and U is the entropy function:
U = −ρS/(γ − 1), S = ln p − γ ln ρ,
J measures the net entropy generation in the domain
The analysis extends to Navier-Stokes
Idea: use v as an adjoint solution in output error estimation
Targets areas where entropy generation is not predicted wellDoes not require solution of an adjoint problem
K. Fidkowski (UM) DLR 2009 May 4, 2009 20 / 59
Outline
1 Introduction
2 Output Error EstimationDiscrete Adjoint SolutionsEntropy Adjoint Connection
3 Mesh Generation and AdaptationHanging Node RefinementSimplex Cut Cells
4 Results
K. Fidkowski (UM) DLR 2009 May 4, 2009 21 / 59
Mesh Generation and Adaptation
Mesh generation is often the most challenging andtime-consuming aspect of CFD
Curved boundary representation required by discontinuousGalerkin (DG) makes mesh generation even more difficult
Adaptation generally requires robust mesh generation
Pursuing two approaches:
1 Hanging node adaptation of quadrilateral and hexahedral meshes– primarily for error indicator testing purposes
2 Cut-cell mesh generation – as a long term solution
K. Fidkowski (UM) DLR 2009 May 4, 2009 22 / 59
Outline
1 Introduction
2 Output Error EstimationDiscrete Adjoint SolutionsEntropy Adjoint Connection
3 Mesh Generation and AdaptationHanging Node RefinementSimplex Cut Cells
4 Results
K. Fidkowski (UM) DLR 2009 May 4, 2009 23 / 59
Hanging Node Refinement
Straightforward implementation
No change to DG solution space
No re-meshing or geometry callback isnecessary with suitable initial curvedmesh
Available in 2D and 3D
K. Fidkowski (UM) DLR 2009 May 4, 2009 24 / 59
Quad/Hex Mesh Generation
An initial quad or hex mesh is required for hanging-node adaptation
For accurate high-order computation, need a curved boundaryrepresentation
ApproachLeverage existing structured multiblock capability to generate high-ordergeometry meshesGoal: Provide initial meshes for testing adaptive indicatorsNot a long-term solution: ultimately complement with cut-cell capability
K. Fidkowski (UM) DLR 2009 May 4, 2009 25 / 59
Linear Multiblock to Curved Meshes
Idea: generate a finer mesh than required and agglomerate elements
Fineness of linear mesh depends on the desired order, q
Non-corner linear nodes provide high-order geometry information
Implemented a conversion utility with automated agglomeration
K. Fidkowski (UM) DLR 2009 May 4, 2009 26 / 59
Linear Multiblock to Curved Meshes (ctd.)
Have hook into ANSYS ICEM CFD
Top: DPW-W1 mediumq = 1 and q = 3 meshes
Right: DLR-F6 with fairing,coarse mesh, q = 3 mesh
K. Fidkowski (UM) DLR 2009 May 4, 2009 27 / 59
Outline
1 Introduction
2 Output Error EstimationDiscrete Adjoint SolutionsEntropy Adjoint Connection
3 Mesh Generation and AdaptationHanging Node RefinementSimplex Cut Cells
4 Results
K. Fidkowski (UM) DLR 2009 May 4, 2009 28 / 59
What Are Cut Cells?
Boundary-conforming mesh Simplex cut-cell mesh
FeaturesCut-cell meshes do not conform to geometry boundary
Solution only exists inside the computational domain
Premise: metric-driven meshing of a simple convex volume (e.g.box) is straightforward
Simplex cut cell meshes can be adapted anisotropically in anydirection
K. Fidkowski (UM) DLR 2009 May 4, 2009 29 / 59
Geometry Representation
2D: Cubic splines
Efficient treatment of curved boundaries; slope & curvature continuity
3D: Quadratic patches
Patch surface (x) given analytically: x =∑
j φ(X)jxj , where X = [X , Y ]are patch ref space coords, and x = [x , y , z] are global coords
Water-tight representation (no holes)
1
1
Y
X
xy
z
patch reference space
global space
K. Fidkowski (UM) DLR 2009 May 4, 2009 30 / 59
Intersection Problem
2D: cubic-equation for spline/edge intersection
3D: conic-section algorithm for patch/plane intersection
Multiply-cut elements treated as separate cut cells
Elements completely inside geometry removed from mesh structure
Spline−edgeintersection
Splinegeometry
Cut edgeEmbedded edge
Quadratic-patch surface
Tetrahedron
K. Fidkowski (UM) DLR 2009 May 4, 2009 31 / 59
Integration
High-order finite element method requires integration over:Element boundaries (edges in 2D, faces in 3D)Element interiors (areas in 2D, volumes in 3D)
Regular triangles and tetrahedra can be mapped to referenceelements, where optimal integration rules exist
These rules do not (in general) apply to cut cells, where areas andvolumes are of irregular shape
K. Fidkowski (UM) DLR 2009 May 4, 2009 32 / 59
Area Integration
GoalSampling points, xq, and weights, wq forintegrating arbitrary f (x) to a desired order:
∫
κ
f (x)dx ≈∑
q
wqf (xq)
SamplingPoints qx
Key IdeaProject f (x) onto space of high-order basis functions, ζi(x):
f (x) ≈∑
i
Fiζi(x)
Choose ζi(x) to allow for simple computation of∫
κζi(x)dx.
K. Fidkowski (UM) DLR 2009 May 4, 2009 33 / 59
Area Integration (ctd.)
Set ζi ≡ ∇ · Gi and use the divergence theorem:∫
κ
ζidx =
∫
κ
∇ · Gidx =
∫
∂κ
Gi · nds
Gi = a standard high-order basis (e.g. tensor product)
Line integrals over ∂κ using 1D edge formulas
Projection f (x) ≈∑
i Fiζi(x) minimizes the least-squares error atrandomly-chosen sampling points, xq, inside the cut cell
QR factorization, ζi(xq) = QqjRji, and integration over κ leads toan expression for the quadrature weights:∫
κ
f (x)dx ≈∑
i
Fi
∫
κ
ζi(x)dx =∑
q
f (xq) Qqj(R−T )ji
∫
κ
ζi(x)dx︸ ︷︷ ︸
wq
K. Fidkowski (UM) DLR 2009 May 4, 2009 34 / 59
Example: 2D Flow Solution
Cut-cell mesh
Boundary-conforming mesh
M = 0.5, α = 3o
p = 2 interpolation
Cp comparison
0 0.2 0.4 0.6 0.8 1−1.5
−1
−0.5
0
0.5
1
x/c
−C
p
Cut CellBoundary Conforming
K. Fidkowski (UM) DLR 2009 May 4, 2009 35 / 59
Example: 3D Flow Solution
Cut-cell mesh:
Boundary-
conforming
mesh:
p = 1
p = 2
K. Fidkowski (UM) DLR 2009 May 4, 2009 36 / 59
Metric-Driven Adaptation
Idea: refine elements with high error; coarsen elements with low error
Iteration 0
Iteration 2
Iteration 4
Use a priori output error estimate torelate element error to size request:ǫκ ∼ hr
κ
Detect anisotropy by measuringp + 1st order derivatives of a scalarquantity (Mach number)
Optimize mesh size to meetrequested tolerance and to satisfyerror equidistribution
Meshing: BAMG in 2D, TetGen in 3D
Left: NACA 0012, M = 0.5,Re = 5000, p = 2 adapted on drag
K. Fidkowski (UM) DLR 2009 May 4, 2009 37 / 59
Example: Adaptation + Cut Cells
User
− M∞ = 0.5, Re = 5000
− CD
to within 1 count
NACA 0012 geometry
AutomatedC
D error = 201 counts C
D error = 102 counts C
D error = 17 counts
CD
error = 0.3 counts CD
error = 3 counts CD
error= 6 counts
K. Fidkowski (UM) DLR 2009 May 4, 2009 38 / 59
Outline
1 Introduction
2 Output Error EstimationDiscrete Adjoint SolutionsEntropy Adjoint Connection
3 Mesh Generation and AdaptationHanging Node RefinementSimplex Cut Cells
4 Results
K. Fidkowski (UM) DLR 2009 May 4, 2009 39 / 59
Cut-Cell Drag Adaptation in a Viscous Case
NACA 0012, M = 0.5, Re = 5000, α = 2o: drag adjoint adaptation(Discontinuous Galerkin FEM discretization for all results)
Initial boundary-conforming mesh Initial cut-cell mesh
K. Fidkowski (UM) DLR 2009 May 4, 2009 40 / 59
Viscous Case: Error Convergence
Degree of freedom (DOF) vs. drag output error for p = 1, 2, 3
Requested tolerance is 0.1 drag counts (horizontal line)
Cut-cell and boundary-conforming results are similar
103
104
105
10−2
10−1
100
101
102
103
DOF
CD
err
or (
coun
ts)
p = 1p = 2p = 3
Boundary-conforming
103
104
105
10−2
10−1
100
101
102
103
DOF
CD
err
or (
coun
ts)
p = 1p = 2p = 3
Cut-cell
K. Fidkowski (UM) DLR 2009 May 4, 2009 41 / 59
Viscous Case: Final Meshes
p = 3 adapted boundary-conforming mesh p = 3 adapted cut-cell mesh
Meshes generated with BAMG (INRIA)
p = 1 meshes have approximately 50 times more elements
K. Fidkowski (UM) DLR 2009 May 4, 2009 42 / 59
Viscous Case: Indicator Comparison
Hanging-node adaptation
fixed fraction: 10%
q = 3 geometry representation
Quad boundary conforming meshes
p = 2 solution interpolation
Measured lift and drag
Initial mesh
Indicators
1 Drag adjoint
2 Lift adjoint
3 Entropy adjoint
4 Residual
5 Entropy
K. Fidkowski (UM) DLR 2009 May 4, 2009 43 / 59
Viscous Case: Indicator Comparison (ctd.)
Degree of freedom (DOF) versus output error for p = 2
Entropy adjoint performance is comparable to output adjoints
104
105
106
10−7
10−6
10−5
10−4
10−3
10−2
10−1
Degrees of freedom
|Dra
g co
effic
ient
err
or|
Drag adjointLift adjointEntropyEntropy adjointResidualUniform refinement
Drag Error
104
105
10
10−6
10−5
10−4
10−3
10−2
10−1
100
Degrees of freedom
|Lift
coe
ffici
ent e
rror
|
Drag adjointLift adjointEntropyEntropy adjointResidualUniform refinement
Lift Error
K. Fidkowski (UM) DLR 2009 May 4, 2009 44 / 59
Viscous Case: Indicator Comparison, Final Meshes
Entropy adjoint refinement similar to output adjoints
Leading edge, boundary layer, and initial wake targeted
Drag Adjoint
Lift Adjoint
Entropy Adjoint
Residual
K. Fidkowski (UM) DLR 2009 May 4, 2009 45 / 59
NACA Wing: Indicator Comparison
Hanging-node adaptation
fixed fraction: 10%
q = 3 geometry representation
Hex boundary conforming meshes
p = 2 solution interpolation
Measured lift and drag
Initial mesh
Indicators
1 Drag adjoint
2 Lift adjoint
3 Entropy adjoint
4 Residual
5 Entropy
Wing:
Unswept, untapered
Rounded wingtip
Aspect ratio = 10
K. Fidkowski (UM) DLR 2009 May 4, 2009 46 / 59
NACA Wing: Indicator Comparison (ctd.)
Degree of freedom (DOF) versus output error for p = 2
Entropy adjoint performance again comparable to output adjoints
105
106
107
2.85
2.9
2.95
3
3.05
x 10−3
Degrees of freedom
Dra
g co
effic
ient
Drag adjointLift adjointEntropyEntropy adjointResidualUniform refinement
Drag
105
106
107
0.295
0.2952
0.2954
0.2956
0.2958
0.296
0.2962
Degrees of freedom
Lift
coef
ficie
nt
Drag adjointLift adjointEntropyEntropy adjointResidualUniform refinement
Lift
K. Fidkowski (UM) DLR 2009 May 4, 2009 47 / 59
NACA Wing: Indicator Comparison, Final Meshes
Drag Adjoint
Lift Adjoint
Entropy Adjoint
Residual
K. Fidkowski (UM) DLR 2009 May 4, 2009 48 / 59
NACA Wing: Indicator Comparison, Tip Vortex
Visualization of entropy isosurface and transverse cut contours
Drag Adjoint
Lift Adjoint
Entropy Adjoint
Residual
K. Fidkowski (UM) DLR 2009 May 4, 2009 49 / 59
NACA Wing: Indicator Comparison, Tip Vortex
Entropy adjoint indicator targets tip vortex due to nonzero entropy residual
K. Fidkowski (UM) DLR 2009 May 4, 2009 50 / 59
Wing-Body: 3D Cut Cell Example, Geometry
Geometry from Drag Prediction Workshop
10,000 quadratic surface patches
K. Fidkowski (UM) DLR 2009 May 4, 2009 51 / 59
Wing-Body: Adapted Meshes
p = 1: 300,000 elements p = 2: 85,000 elements
K. Fidkowski (UM) DLR 2009 May 4, 2009 52 / 59
Wing-Body: Solution
Inviscid M∞ = 0.1 flow
Surface Mach number contours shown for a p = 2 solution
K. Fidkowski (UM) DLR 2009 May 4, 2009 53 / 59
Wing-Body Drag Comparison
Adaptation using drag adjoint with p = 0, 1, 2
104
105
106
107
0
0.02
0.04
0.06
0.08
0.1
0.12
0.14
0.16
DOF
CD
p = 0p = 1p = 2
K. Fidkowski (UM) DLR 2009 May 4, 2009 54 / 59
Ongoing Work
RANS turbulence modeling
Spalart-Allmaras (SA) model
Consistent discretization
Scalable solvers
Shock stabilization
Required to eliminate high-orderoscillations at discontinuities
Pursuing resolution-basedartificial viscosity [Persson &Peraire, 2006]
Right: NACA 0012, M=0.5, α = 1.25o,Re = 100k , p = 3. SA model
K. Fidkowski (UM) DLR 2009 May 4, 2009 55 / 59
Drag Prediction Workshop
DPW II wing-alone test case
M = 0.76
Re = 106
α = 0.5o
p = 2
40,000 elements
hexahedral curved meshfrom available multiblocklinear mesh
Next StepSolution-based adaptation
Pressure
x-momentum
SA working variable
K. Fidkowski (UM) DLR 2009 May 4, 2009 56 / 59
Concluding Remarks
Robust CFD analysis of complex configurations requires errorestimation and mesh adaptation
Output error estimation based on adjoint solutions is a practicaltechnique for accurately solving the hyperbolic problems commonin aerospace applications
The connection between entropy variables and adjoint solutionsleads to a novel indicator – the potential and limitations of whichare currently being investigated
Robust mesh adaptation is one of the largest barriers for theeffective implementation of these methods
Investigating high-order cut-cells as a long-term research area formesh generation
K. Fidkowski (UM) DLR 2009 May 4, 2009 57 / 59
Acknowledgments
CollaboratorsDavid Darmofal
Philip Roe
Karen Willcox
K. Fidkowski (UM) DLR 2009 May 4, 2009 58 / 59
Questions?
K. Fidkowski (UM) DLR 2009 May 4, 2009 59 / 59