• Nie Znaleziono Wyników

Fast and smooth simulation of space-time problems

N/A
N/A
Protected

Academic year: 2021

Share "Fast and smooth simulation of space-time problems"

Copied!
43
0
0

Pełen tekst

(1)

Fast and smooth simulation of space-time problems

Day 1

Department of Computer Science

AGH University of Science and Technology, Kraków, Poland home.agh.edu.pl/paszynsk

1 / 43

(2)

Department of Computer Science AGH University, Kraków, Poland

2 / 43

(3)

Outline

Isogeometric finite element method

Alternating Directions Implicit (ADI) method Isogeometric L2 projections

Explicit dynamics

Example 1: Heat transfer Installation of IGA-ADS solver

Parallel distributed memory explicit dynamics Parallel shared memory explicit dynamics

Example 2: Non-linear flow in heterogenous media Implicit dynamics

Example 3: Implicit heat transfer Example 4: Linear elasticity Example 5: Pollution problem Labs with implict dynamics

3 / 43

(4)

Software

Program Title: IGA-ADS

Code: git clone https://github.com/marcinlos/iga-ads Licensing provisions: MIT license (MIT)

Programming language: C++

Nature of problem: Solving non-stationary problems in 1D, 2D and 3D

Solution method: Alternating direction solver with isogeometric finite element method

If you use this software in your work, please cite

Marcin Łoś, Maciej Woźniak, Maciej Paszyński, Andrew Lenharth, Keshav Pingali IGA-ADS : Isogeometric Analysis FEM using ADS solver, Computer & Physics Communications 217 (2017) 99-116 (available on researchgate.org)

4 / 43

(5)

Isogeometric finite element method

Isogeometric finite element method

J.A. Cottrel, T.J.R. Hughes, Y. Bazilevs, Isogeometric Analysis.

Toward Integration of CAD and FEA, Wiley, (2009).

5 / 43

(6)

Isogeometric finite element method

Original recursive definition of B-spline basis functions

Figure:Recursive formulae for B-spline basis functions

6 / 43

(7)

Isogeometric finite element method

How to remember this formulae graphically

Figure:Practical implementation of the recursive formulae for B-spline basis functions

7 / 43

(8)

Isogeometric finite element method

How these B-spline basis functions look like

Figure:Basis functions of order 0,1,2 for uniform knot vector {0,1,2,3,4,5}

8 / 43

(9)

Isogeometric finite element method

Representation of B-splines by knot vectors

Figure:B-spline basis functions represented by knot vector {0,0,0,1,2,3,4,4,5,5,5}

9 / 43

(10)

Isogeometric finite element method

Quadratic B-spline basis functions represented by knot vector {0,0,0,1,2,3,4,4,5,5,5}

B-spline curve:

N1,2*(0,1)+N2,2*(1,0)+N3,2*(2,0)+N4,2*(2,2)+N5,2*(4,3)+

N6,2*(4,4)+N7,2*(2,4)+N8,2*(1,2)

10 / 43

(11)

Alternating Direction Implicit (ADI) method

The Alternating Direction Implicit (ADI) method

G. Birkhoff, R.S. Varga, D. Young, Alternating direction implicit methods, Advanced Computing (1962)

du

dt − Lxu − Lyu = f du

dtui −1,j − 2ui ,j+ ui +1,j

h2ui ,j−1− 2ui ,j + ui ,j+1

h2 = f

ut+0.5i ,j − ui ,jt

dtut+0.5i −1,j − 2ui ,jt+0.5+ ut+0.5i +1,j

h2 = uti ,j−1− 2ui ,jt + ui ,j+1t h2 +fi ,jt ui ,jt+1− ut+0.5i ,j

dtut+1i ,j−1− 2ui ,jt+1+ ui ,j+1t+1

h2 =

ut+0.5i −1,j − 2ui ,jt+0.5+ ui +1,jt+0.5

h2 + fi ,jt+0.5

11 / 43

(12)

Alternating Direction Implicit (ADI) method

The Alternating Direction Implicit (ADI) method

G. Birkhoff, R.S. Varga, D. Young, Alternating direction implicit methods, Advanced Computing (1962)

ui −1,jt+0.5[−2dt

h2 ] + ui ,jt+0.5[1 + 2dt

h2 ] + ui +1,jt+0.5[−2dt h2 ] = dtuti ,j−1− 2ui ,jt + uti ,j+1

h2 + dtfi ,jt for i = 1, ..., Nx, j = 1, ..., Ny.

ui ,j−1t [−2dt

h2 ] + uti ,j[1 + 2dt

h2 ] + ui ,j+1t [−2dt h2 ] = dtui −1,jt+0.5− 2ui ,jt+0.5+ ui −1,jt+0.5

h2 + dtfi ,jt+0.5 for j = 1, ..., Ny, i = 1, ..., Nx.

12 / 43

(13)

Alternating Direction Implicit (ADI) method

The Alternating Direction Implicit (ADI) method

G. Birkhoff, R.S. Varga, D. Young, Alternating direction implicit methods, Advanced Computing (1962)

ui −1,jt+0.5[−2dt] + ui ,jt+0.5[h2+ 2dt] + ui +1,jt+0.5[−2dt] = dtui ,j−1t − 2uti ,j+ ui ,j+1t + h2dtfi ,jt for i = 1, ..., Nx, j = 1, ..., Ny.

ui ,j−1t [−2dt] + uti ,j[h2+ 2dt] + ui ,j+1t [−2dt] = ut+0.5i −1,j − 2ui ,jt+0.5+ ut+0.5i −1,j + h2dtfi ,jt+0.5 for j = 1, ..., Ny, i = 1, ..., Nx.

13 / 43

(14)

Alternating Direction Implicit (ADI) method

The Alternating Direction Implicit (ADI) method

G. Birkhoff, R.S. Varga, D. Young, Alternating direction implicit methods, Advanced Computing (1962)

h2+ 2dt −2dt 0 · · · · · · · · · · · · 0

−2dt h2+ 2dt −2dt 0 · · · · · · · · · 0

0 −2dt h2+ 2dt −2dt 0 · · · · · · 0

.. .

.. .

.. .

.. .

.. .

.. .

.. .

0 · · · · · · 0 −2dt h2+ 2dt −2dt

0 · · · · · · · · · 0 −2dt h2+ 2dt

ut+0.51,1 ut+0.5 1,2 ut+0.51,3

.. . ut+0.5

Nx ,Ny −1 ut+0.5

Nx ,Ny

=

−2ut1,1+ u1,2t + h2dtf1,1t ut1,1− 2ut1,2+ ut1,3+ h2dtfi ,jt

.. . ut

Nx ,Ny −2− 2ut

Nx ,Ny −1+ ut

Nx ,Ny+ h2dtft Nx ,Ny −1 ut

Nx ,Ny −1− 2ut

Nx ,Ny+ h2dtft Nx ,Ny

14 / 43

(15)

Isogeometric L2 projections

Isogeometric L2 projections

Longfei Gao, Kronecker Products on Preconditioning, PhD. Thesis, KAUST (supervised by Victor Calo), 2013.

Isogeometric basis functions:

1D B-splines basis B1(x ), . . . , Bn(x ) higher dimensions: tensor product basis Bi1···id(x1, . . . , xd) ≡ Bix11(x1) · · · Bixd

d (xd)

15 / 43

(16)

Isogeometric L2 projections

Isogeometric L2 projections

Longfei Gao, Kronecker Products on Preconditioning, PhD. Thesis, KAUST (supervised by Victor Calo), 2013.

Gram matrix of B-spline basis on 2D domain Ω = Ωx× Ωy: Mijkl = (Bij, Bkl)L2 =

Z

BijBkldΩ

= Z

Bix(x )Bjy(y )Bkx(x )Bly(y ) dΩ

= Z

(BiBk)(x ) (BjBl)(y ) dΩ

=

Z

x

BiBkdx

 Z

y

BjBldy

!

= MxikMyjl M = Mx ⊗ My (Kronecker product)

16 / 43

(17)

Isogeometric L2 projections

Isogeometric L2 projections

Longfei Gao, Kronecker Products on Preconditioning, PhD. Thesis, KAUST (supervised by Victor Calo), 2013.

B-spline basis functions have local support (over p + 1 elements) Mx, My, . . . – banded structure

Mxij = 0 ⇐⇒ |i − j| > 2p + 1

Exemplary basis functions and matrix for cubics

(B1, B1)L2 (B1, B2)L2 (B1, B3)L2 (B1, B4)L2 0 0 · · · 0

(B2, B1)L2 (B2, B2)L2 (B2, B3)L2 (B2, B4)L2 (B2, B5)L2 0 · · · 0 (B3, B1)L2 (B3, B2)L2 (B3, B3)L2 (B3, B4)L2 (B3, B5)L2 (B3, B6)L2 · · · 0

.. .

.. .

.. .

.. .

.. .

.. .

.. . 0 0 . . . (Bn, Bn−3)L2 (Bn, Bn−2)L2 (Bn, Bn−1)L2 (Bn, Bn)L2

17 / 43

(18)

Isogeometric L2 projections

Isogeometric L2 projections

Two steps – solving systems with A and B in different directions

A11 A12 · · · 0 A21 A22 · · · 0 ... ... . .. ... 0 0 · · · Ann

y11 y21 · · · ym1 y12 y22 · · · ym1 ... ... . .. ... y1n y2n · · · ymn

=

b11 b21 · · · bm1 b12 b22 · · · bm2 ... ... . .. ... b1n b2n · · · bmn

B11 B12 · · · 0 B21 B22 · · · 0 ... ... . .. ... 0 0 · · · Bmm

x11 · · · x1n

x21 · · · x2n

... . .. ... xm1 · · · xmn

=

y11 y12 · · · y1n

y21 y22 · · · y2n

... ... . .. ... ym1 ym2 · · · ymn

Two 1D problems with multiple RHS, linear cost O(N) n × n with m right hand sides → O(n ∗ m) = O(N) m × m with n right hand sides → O(m ∗ n) = O(N)

18 / 43

(19)

Derivation of Spatial Direction Splitting

Idea exploit Kronecker product structure of M = Mx⊗ My Generally, consider

Mx = b

with M = A ⊗ B, where A is n × n, B is m × m Definition of Kronecker (tensor) product:

M = A ⊗ B =

A B11 A B12 · · · A B1m

A B21 A B22 · · · A B2m ... ... . .. ... A Bm1 A Bm2 · · · A Bmm

19 / 43

(20)

Derivation of Spatial Direction Splitting

RHS and solution are partitioned into m blocks of size n each xi = (xi 1, . . . , xin)T

bi = (bi 1, . . . , bin)T

We can rewrite the system as a block matrix equation:

AB11x1+ AB12x2 + · · · + AB1mxm = b1 AB21x1+ AB22x2 + · · · + AB2mxm = b2

... ... ... ... ABm1x1+ ABm2x2+ · · · + ABmmxm= bm

20 / 43

(21)

Derivation of Spatial Direction Splitting

Factor out A:

A B11x1+ B12x2 + · · · + B1mxm

= b1

A B21x1+ B22x2 + · · · + B2mxm = b2 ... ... ... ... A Bm1x1+ Bm2x2+ · · · + Bmmxm

= bm

Wy multiply by A−1 and define yi = A−1bi

(we have one 1D problem here A yi = bi with multiple RHS)

B11x1+ B12x2 + · · · + B1mxm = y1 B21x1+ B22x2 + · · · + B2mxm = y2

... ... ... ... Bm1x1+ Bm2x2+ · · · + Bmmxm = ym

21 / 43

(22)

Derivation of Spatial Direction Splitting

Consider each component of xi and yi ⇒ family of linear systems

B11x1i + B12x2i + · · · + B1mxmi = y1i B21x1i + B22x2i + · · · + B2mxmi = y2i

... ... ... ... Bm1x1i + Bm2x2i + · · · + Bmmxmi = ymi for each i = 1, . . . , n

⇒ linear systems with matrix B (We have another 1D problem here with multiple RHS B xi = yi )

22 / 43

(23)

Explicit dynamics

Applications to time-dependent problems (Fortran sequential) M. Łoś, M. Woźniak, M. Paszyński, L. Dalcin, V.M. Calo, Dynamics with Matrices Possessing Kronecker Product Structure, Procedia Computer Science 51 (2015) 286-295

In general: non-stationary problem of the form

tu − L(u) = f (x , t) with some initial state u0 and boundary conditions L – well-posed linear spatial partial differential operator Discretization:

spatial discretization: isogeometric FEM Basis functions: tensor product B-splines u(x , y ) ≈Pi ,jui ,jBi ,px (x )Byj,p(y )

23 / 43

(24)

Explicit dynamics

Applications to time-dependent problems (Fortran sequential) M. Łoś, M. Woźniak, M. Paszyński, L. Dalcin, V.M. Calo, Dynamics with Matrices Possessing Kronecker Product Structure, Procedia Computer Science 51 (2015) 286-295

spatial discretization: isogeometric FEM Basis functions: tensor product B-splines u(x , y ) ≈Pi ,juk,lBi ,px (x )Bj,py (y )

time discretization with explicit method

ut+1−ut

dt = Lut+ ft → ut+1= ut+ dtLut

implies isogeometric L2 projections in every time step (ut+1, v )L2= (ut+ dtLut, v )L2

24 / 43

(25)

Explicit dynamics

Applications to time-dependent problems (Fortran sequential) M. Łoś, M. Woźniak, M. Paszyński, L. Dalcin, V.M. Calo, Dynamics with Matrices Possessing Kronecker Product Structure, Procedia Computer Science 51 (2015) 286-295

implies isogeometric L2 projections in every time step (ut+1, v )L2= (ut+ dtLut, v )L2

ut+1Pi ,jui ,jt+1Bi ,px (x )Bj,py (y ), v ← Bk,px (x )Bl ,py (y ) utPi ,juti ,jBi ,px (x )Bj,py (y ))

so the system looks like P

i ,jut+1i ,j (Bi ,px (x )Bj,py (y ), Bk,px (x )Bl ,py (y ))L2 = P

i ,juti ,j(Bi ,px (x )Bj,py (y )) +

dtPi ,juti ,jL(Bi ,px (x )Bj,py (y )), v )L2 ∀k, l

25 / 43

(26)

Explicit dynamics

Applications to time-dependent problems (Fortran sequential) M. Łoś, M. Woźniak, M. Paszyński, L. Dalcin, V.M. Calo, Dynamics with Matrices Possessing Kronecker Product Structure, Procedia Computer Science 51 (2015) 286-295

sequence of isogeometric L2 projections P

i ,jui ,jt+1(Bxi ,p(x )Bj,py (y ), Bxk,p(x )Bl ,py (y ))L2=

P

i ,jui ,jt (Bi ,px (x )Byj,p(y )) + dtP

i ,jui ,jt L(Bi ,px (x )Bj,py (y )), Bxk,pBy l ,p)L2 ∀k, l

(B1,px By 1,p, Bx1,pBy

1,p)L2 (B1,px By 1,p, B2,px By

1,p)L2 · · · (Bx1,pBy 1,p, Bx

Nx ,pBy Ny ,p)L2 (B2,px B1,py , Bx1,pB1,py )L2 (B2,px B1,py , B2,px B1,py )L2 · · · (Bx2,pBy1,p, Bx

Nx ,pBy Ny ,p)L2 ..

.

.. .

.. .

.. . (Bx

Nx ,pBy

Ny ,p, B1,px B1,py )L2 (Bx Nx ,pBy

Ny ,p, B2,px B1,py )L2 · · · (Bx Nx ,pBy

Ny ,p, Bx Nx ,pBy

Ny ,p)L2

u1,1 t+1 ut+12,1 .. . ut+1Nx ,Ny

=

P

i ,juti ,j(Bi ,px (x )By

j,p(y )) + dtP

i ,jui ,jt L(Bxi ,p(x )By

j,p(y )), B1,px By 1,p)L2

P

i ,juti ,j(Bi ,px (x )Bj,py (y )) + dtP

i ,jui ,jt L(Bxi ,p(x )Bj,py (y )), B2,px B1,py )L2 ..

.

P

i ,juti ,j(Bi ,px (x )Byj,p(y )) + dtP

i ,jui ,jt L(Bxi ,p(x )Bj,py (y )), BxNx ,pBy Ny ,p)L2

26 / 43

(27)

Example 1: Heat transfer equation

We seek the temperature scalar field u : Ω → R such as:

∂u

∂t = ∆u + f (x) on Ω × [0, T ]

∇u · ˆn = 0 on ∂ Ω × [0, T ] u(x, 0) = u0(x) on Ω

(1)

where Ω = [0, 1]2, ˆ

n is a normal vector of the domain boundary, T is a length of the time interval for the simulation, and u0 is an initial state.

f = 0 (no heat source)

27 / 43

(28)

Example 1: Heat transfer equation

The corresponding weak formulation is obtained by multiplying (1) by test function w ∈ H1(Ω), integrating by parts over Ω, and imposing the boundary conditions.

Find u ∈ C1 [0, T ] , H1(Ω)such that for each t ∈ [0, T ] (∂u

∂t, w )L2 = −(∇u, ∇w )L2+ (f , w )L2 ∀w ∈ H1(Ω) (2) where (·, ·)L2 stands for the L2(Ω) scalar product

We utilize Euler time integration scheme

(ut+1, w )L2 = (ut, w )L2− dt ∗ ∇ut, ∇w )L2 ∀w ∈ H1(Ω) (3)

28 / 43

(29)

Example 1: Heat transfer equation

Click in the middle

29 / 43

(30)

Code for Example 1 (Heat transfer equation)

"problems/heat/heat_3d.cpp"

#include "problems/heat/heat_3d.hpp"

using namespace ads;

using namespace ads::problems;

pilot for the simulation int main() {

quadratic B-splnes, 12 elements along axis dim_config dim{ 2, 12 };

5000 time steps, time step size 10−7

timesteps_config steps{ 5000, 1e-7 };

we will need to compute first derivatives during the computations int ders = 1;

some auxiliary objects for configuration and simulation config_3d c{dim, dim, dim, steps, ders};

heat_3d sim{c};

run the simulation sim.run();

}

30 / 43

(31)

Code for Example 1 (Heat transfer equation)

"problems/heat/heat_3d.hpp"

#include "ads/simulation.hpp"

using namespace ads;

using namespace problems;

class heat_3d : public simulation_3d { ...

implementation of the initial state

double init_state(double x, double y, double z) executed once before the simulation starts

void before() override

executed before every simulation step void before_step() override implementation of the simulation step void step() override

executed after every simulation step void after_step() override implementation of generation of RHS void compute_rhs() override executed once after the simulation ends

void after() override 31 / 43

(32)

Code for Example 1 (Heat transfer equation)

"problems/heat/heat_3d.hpp"

this functions is called from before at the beginning of the simulation

the function returns the value of u0 = u(x , y , z)|t=0) computed at point (x , y , z)

double init_state(double x, double y, double z) { double dx = x - 0.5;

double dy = y - 0.5;

double dz = z - 0.5;

double r2 = std::min(8*(dx*dx+dy*dy+dz*dz),1.0);

return (r2 - 1) * (r2 - 1) * (r2 + 1) * (r2 + 1);

};

32 / 43

(33)

Code for Example 1 (Heat transfer equation)

"problems/heat/heat_3d.hpp"

this function is called once before the simulation starts void before() override {

performs LU factorization of three 1D systems, representing B-splines along x , y and z axes

prepare_matrices();

pointer to init_state function

auto init = [this](double x, double y, double z) { return init_state(x, y, z); };

preparation of the initial state projection(u, init);

forward and backward substitutions with multiple RHS solve(u);

}

33 / 43

(34)

Code for Example 1 (Heat transfer equation)

"problems/heat/heat_3d.hpp"

this function is called before every time step

void before_step(int /*iter*/, double /*t*/) override {

using std::swap;

swap ut and ut−1 swap(u, u_prev);

}

this function implements every time step

void step(int /*iter*/, double /*t*/) override { generate new RHS using u_prev

compute_rhs();

forward and backward substitutions with multiple RHS solve(u);

}

34 / 43

(35)

Example 1: Heat transfer equation

(ut+1, w )L2 = (ut, w )L2− dt ∗ (∇ut, ∇w )L2 ∀w ∈ H1(Ω) (4)

value of test function a over element e at Gauss point q value_type v = eval_basis(e, q, a);

value of ut at Gauss point

value_type u = eval_fun(u_prev, e, q);

computations of double gradient

double gradient = u.dx*v.dx+u.dy*v.dy+u.dz*v.dz;

RHS = ut− dt∇ut· ∇v

double val = u.val*v.val - steps.dt * gradient;

scale by Jacobian and weight

rhs(a[0],a[1],a[2])+=val*w*J;

35 / 43

(36)

Code for Example 1 (Heat transfer equation)

void compute_rhs() { auto& rhs = u; zero(rhs);

for (auto e : elements()) { loop through elements double J = jacobian(e);compute Jacobian

for (auto q:quad_points()){ loop through Gauss points double w = weigth(q); Gauss weight

for (auto a : dofs_on_element(e)){loop through dofs value of basis function q over element e at Gauss point q

value_type v = eval_basis(e, q, a);

value of ut at Gauss point

this also computes derivatives and stored at *.dx value_type u = eval_fun(u_prev, e, q);

computations of double gradient

double gradient = u.dx*v.dx+u.dy*v.dy+u.dz*v.dz;

RHS = ut− dt∇u · ∇v

double val = u.val*v.val - steps.dt * gradient;

scale by Jacobian and weight

rhs(a[0],a[1],a[2])+=val*w*J;

} } } }

36 / 43

(37)

Example 2: Non-linear flow in heterogenous media

Hydraulic fracturing - oil/gas extraction technique consisting in high-pressure fluid injection into the deposit

37 / 43

(38)

Example 2: Non-linear flow in heterogenous media

Hydraulic fracturing - oil/gas extraction technique consisting in high-pressure fluid injection into the deposit

Spatial domain = Ω = [0, 1]3

∂u

∂t − ∇ · (κ(x, u) ∇u) = h(x, t) in Ω × [0, T ]

∇u · ˆn = 0 on ∂ Ω × [0, T ] u(x , 0) = u0 in Ω

u – pressure

zero Neumann boundary conditions initial state u0

κ – permeability

h – forcing (induced by extraction method)

M. Alotaibi, V.M. Calo, Y. Efendiev, J. Galvis, M. Ghommem, Global-Local Nonlinear Model Reduction for Flows in Heterogeneous Porous Media arXiv:1407.0782 [math.NA]

38 / 43

(39)

Example 2: Non-linear flow in heterogenous media

κ(x, u) = Kq(x ) b(u) b(u) = eµu

µ = 10

Kq(x) – property of the terrain (example below)

39 / 43

(40)

Example 2: Non-linear flow in heterogenous media

Extraction process modeled by pumps and sinks pump/sink has a location x ∈ Ω

pumps locally increase the pressure u

sinks locally decrease u (the higher, the faster) h(x , t) = X

p∈P

φ (kxp− x k)X

s∈S

u(x , t)φ (kxs− x k)

P, S – sets of pump and sinks xp, xs – location of pump p/sink s φ – cut-off function (r = 0.15)

φ(t) = ( t

r − 12 tr + 12 for t ≤ r

0 for t > r

0 r = 0.15 0.4

0 1

40 / 43

(41)

Example 2: Non-linear flow in heterogenous media

Initial state is derived from the permeability of the material Kq K˜q(x) = (Kq(x) − 1)/(1000 − 1)

u0(x) = 0.1 ˜Kq(x) θ0.2,0.3(kx − ck) c = (0.5, 0.5, 0.5)

0 r = 0.2 R = 0.3 0.4

0 1

Figure:θr ,R

41 / 43

(42)

Example 2: Non-linear flow in heterogenous media

We utilize Euler time integration scheme

(ut+1, w )L2 = (ut−dt∗Kq(x ) e10∗ut, ut)+(∇ut+h(ut), ∇w )L2 ∀w ∈ H1(Ω) where Kq(x , t) does not change with time, and it is given by the

permeability map,

h(x , t) are pumps and sinks h(x , t) = X

p∈P

φ (kxp− x k) −X

s∈S

u(x , t)φ (kxs− x k)

42 / 43

(43)

Example 2: Non-linear flow in heterogenous media

Click in the middle

43 / 43

Cytaty

Powiązane dokumenty

Uruchom aplikację (Kliknij prawym klawiszem myszy w oknie Project na nazwę projektu, w ukazanym oknie uruchom kolejno Build Project, Deploy Project,

Uruchom aplikację (Kliknij prawym klawiszem myszy w oknie Project na nazwę projektu, w ukazanym oknie uruchom kolejno Build Project, Deploy Project, Run Project lub tylko Run

executed after every simulation step void after_step() override implementation of generation of RHS void compute_rhs() override.. These cases are marked in equations (28) and (29)

[r]

[r]

[r]

[r]

[r]