/[escript]/trunk/doc/cookbook/example07.tex
ViewVC logotype

Contents of /trunk/doc/cookbook/example07.tex

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3004 - (show annotations)
Wed Apr 14 05:27:30 2010 UTC (10 years, 2 months ago) by ahallam
File MIME type: application/x-tex
File size: 10052 byte(s)
Sampling theorem, stability requirements, Laplacian discussion, Pressure wave PDE
1
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 %
4 % Copyright (c) 2003-2010 by University of Queensland
5 % Earth Systems Science Computational Center (ESSCC)
6 % http://www.uq.edu.au/esscc
7 %
8 % Primary Business: Queensland, Australia
9 % Licensed under the Open Software License version 3.0
10 % http://www.opensource.org/licenses/osl-3.0.php
11 %
12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
13
14
15
16 The acoustic wave equation governs the propagation of pressure waves. Wave
17 types that obey this law tend to travel in liquids or gases where shear waves
18 or longitudinal style wave motion is not possible. An obvious example is sound
19 waves.
20
21 The acoustic wave equation is defined as;
22 \begin{equation}
23 \nabla ^2 p - \frac{1}{c^2} \frac{\partial ^2 p}{\partial t^2} = 0
24 \label{eqn:acswave}
25 \end{equation}
26 where $p$ is the pressure, $t$ is the time and $c$ is the wave velocity.
27
28 \section{The Laplacian in \esc}
29 The Laplacian opperator which can be written as $\Delta$ or $\nabla^2$ is
30 calculated via the divergence of the gradient of the object, which is in this
31 example $p$. Thus we can write;
32 \begin{equation}
33 \nabla^2 p = \nabla \cdot \nabla p = \frac{\partial^2 p}{\partial
34 x^2\hackscore{i}}
35 \label{eqn:laplacian}
36 \end{equation}
37 For the two dimensional case in Cartesian coordinates \refEq{eqn:laplacian}
38 becomes;
39 \begin{equation}
40 \nabla^2 p = \frac{\partial^2 p}{\partial x^2}
41 + \frac{\partial^2 p}{\partial y^2}
42 \end{equation}
43
44 In \esc the Laplacian is calculated using the divergence representation and the
45 intrinsic functions \textit{grad()} and \textit{trace()}. The fucntion
46 \textit{grad{}} will return the spatial gradients of an object.
47 For a rank 0 solution, this is of the form;
48 \begin{equation}
49 \nabla p = \left[
50 \frac{\partial p}{\partial x \hackscore{0}},
51 \frac{\partial p}{\partial x \hackscore{1}}
52 \right]
53 \label{eqn:grad}
54 \end{equation}
55 Larger ranked solution objects will return gradient tensors. For example, a
56 pressure field which acts in the directions $p \hackscore{0}$ and $p
57 \hackscore{1}$ would return;
58 \begin{equation}
59 \nabla p = \begin{bmatrix}
60 \frac{\partial p \hackscore{0}}{\partial x \hackscore{0}} &
61 \frac{\partial p \hackscore{1}}{\partial x \hackscore{0}} \\
62 \frac{\partial p \hackscore{0}}{\partial x \hackscore{1}} &
63 \frac{\partial p \hackscore{1}}{\partial x \hackscore{1}}
64 \end{bmatrix}
65 \label{eqn:gradrank1}
66 \end{equation}
67
68 \refEq{eqn:grad} corresponds to the Linear PDE general form value
69 $X$. Notice however that the gernal form contains the term $X \hackscore{i,j}$,
70 hence for a rank 0 object there is no need to do more than calculate the
71 gradient and submit it to the solver. In the case of the rank 1 or greater
72 object, it is nesscary to calculate the trace also. This is the sum of the
73 diagonal in \refeq{eqn:gradrank1}.
74
75 Thus when solving for equations containing the Laplacian one of two things must
76 be completed. If the object \verb p is less than rank 1 the gradient is
77 calculated via;
78 \begin{verbatim}
79 gradient=grad(p)
80 \end{verbatim}
81 and if the object is greater thank or equal to a rank 1 tensor, the trace of
82 the gradient is calculated.
83 \begin{verbatim}
84 gradient=trace(grad(p))
85 \end{verbatim}
86
87 These valuse can then be submitted to the PDE solver via the general form term
88 $X$. The Laplacian is then computed in the solution process by taking the
89 divergence of $X$.
90
91 \section{Numerical Solution Stability}
92 Unfortunately, the wave equation belongs to a class of equations called
93 \textbf{stiff} PDEs. These types of equations can be difficult to solve
94 numerically as they tend to oscilate about the exact solution and can
95 eventually fail. To counter this problem, explicitly stable schemes like
96 the backwards Euler method are required. There are two variables which must be
97 considered for stability when numerically trying to solve the wave equation.
98
99 \begin{equation} \label{eqn:freqvel}
100 f=\frac{v}{\lambda}
101 \end{equation}
102
103
104 Velocity is one of these variables. For stability the
105 analytical wave must not propagate faster than the numerical wave is able to,
106 and in general, needs to be much slower than the numerical wave.
107 For example, a line 100m long is discretised into 1m intervals or 101 nodes. If
108 a wave enters with a propagation velocity of 100m/s then the travel time for
109 the wave between each node will be 0.01 seconds. The time step, must therefore
110 be significantly less than this. Of the order $10E-4$ would be appropriate.
111
112 The wave frequency content also plays a part in numerical stability. The
113 nyquist-sampling theorem states that a signals bandwidth content will be
114 accurately represented when an equispaced sampling rate $f \hackscore{n}$ is
115 equal to or greater than twice the maximum frequency of the signal
116 $f\hackscore{s}$, or;
117 \begin{equation} \label{eqn:samptheorem}
118 f\hackscore{n} \geqslant f\hackscore{s}
119 \end{equation}
120 For example a 50Hz signal will require a sampling rate greater than 100Hz or
121 one sample every 0.01 seconds. The wave equation relies on a spatial frequency,
122 thus the sampling theorem in this case applies to the solution mesh spacing. In
123 this way, the frequency content of the input signal directly affects the time
124 discretisation of the problem.
125
126 To accurately model the wave equation with high resolutions and velocities
127 means that very fine spatial and time discretisation is necessary for most
128 problems.
129 This requirement makes the wave equation arduous to
130 solve numerically due to the large number of time iterations required in each
131 solution. Models with very high velocities and frequencies will be the worst
132 effected by this problem.
133
134 \section{Displacement Solution}
135 \sslist{example07a.py}
136
137 We begin the solution to this PDE with the centred difference formula for the
138 second derivative;
139 \begin{equation}
140 f''(x) \approx \frac{f(x+h - 2f(x) + f(x-h)}{h^2}
141 \label{eqn:centdiff}
142 \end{equation}
143 substituting \refEq{eqn:centdiff} for $\frac{\partial ^2 p }{\partial t ^2}$
144 in \refEq{eqn:acswave};
145 \begin{equation}
146 \nabla ^2 p - \frac{1}{c^2h^2} \left[p\hackscore{(t+1)} - 2p\hackscore{(t)} +
147 p\hackscore{(t-1)} \right]
148 = 0
149 \label{eqn:waveu}
150 \end{equation}
151 Rearranging for $p_{(t+1)}$;
152 \begin{equation}
153 p\hackscore{(t+1)} = c^2 h^2 \nabla ^2 p\hackscore{(t)} +2p\hackscore{(t)} -
154 p\hackscore{(t-1)}
155 \end{equation}
156 this can be compared with the general form of the \modLPDE module and it
157 becomes clear that $D=1$, $X\hackscore{i,j}=-c^2 h^2 \nabla ^2 p_{(t)}$ and
158 $Y=2p_{(t)} - p_{(t-1)}$.
159
160 The solution script is similar to other that we have created in previous
161 chapters. The general steps are;
162 \begin{enumerate}
163 \item The necessary libraries must be imported.
164 \item The domain needs to be defined.
165 \item The time iteration and control parameters need to be defined.
166 \item The PDE is initialised with source and boundary conditions.
167 \item The time loop is started and the PDE is solved at consecutive time steps.
168 \item All or select solutions are saved to file for visualisation lated on.
169 \end{enumerate}
170
171 Parts of the script which warrant more attention are the definition of the
172 source, visualising the source, the solution time loop and the VTK data export.
173
174 \subsection{Pressure Sources}
175 As the pressure is a scalar, one need only define the pressure for two
176 time steps prior to the start of the solution loop. Two known solutions are
177 required because the wave equation contains a double partial derivative with
178 respect to time. This is often a good opportunity to introduce a source to the
179 solution. This model has the source located at it's centre. The source should
180 be smooth and cover a number of samples to satisfy the frequency stability
181 criterion. Small sources will generate high frequency signals. Here, the source
182 is defined by a cosine function.
183 \begin{verbatim}
184 U0=0.01 # amplitude of point source
185 xc=[500,500] #location of point source
186 # define small radius around point xc
187 src_radius = 30
188 # for first two time steps
189 u=U0*(cos(length(x-xc)*3.1415/src_radius)+1)*whereNegative(length(x-xc)-src_radi
190 us)
191 u_m1=u
192 \end{verbatim}
193 When using a rectangular domain
194
195 \section{Acceleration Solution}
196 \sslist{example07b.py}
197
198 An alternative method is to solve for the acceleration $\frac{\partial ^2
199 p}{\partial t^2}$ directly, and derive the the displacement solution from the
200 PDE solution. \refEq{eqn:waveu} is thus modified;
201 \begin{equation}
202 \nabla ^2 p - \frac{1}{c^2} a = 0
203 \label{eqn:wavea}
204 \end{equation}
205 and can be solved directly with $Y=0$ and $X=-c^2 \nabla ^2 p\hackscore{(t)}$.
206 After each iteration the displacement is re-evaluated via;
207 \begin{equation}
208 p\hackscore{(t+1)}=2p\hackscore{(t)} - p\hackscore{(t-1)} + h^2a
209 \end{equation}
210
211 For \esc, the acceleration solution is prefered as it allows the use of matrix
212 lumping. Lumping or mass lumping as it is sometimes known, is the process of
213 aggressively approximating the density elements of a mass matrix into the main
214 diagonal. The use of Lumping is motivaed by the simplicity of diagonal matrix
215 inversion. As a result, Lumping can significantly reduce the computational
216 requirements of a problem.
217
218 To turn lumping on in \esc one can use the command;
219 \begin{verbatim}
220 mypde.getSolverOptions().setSolverMethod(mypde.getSolverOptions().LUMPING)
221 \end{verbatim}
222 It is also possible to check if lumping is set using;
223 \begin{verbatim}
224 print mypde.isUsingLumping()
225 \end{verbatim}
226
227 \section{Stability Investigation}
228 It is now prudent to investigate the stability limitations of this problem.
229 First, we let the frequency content of the source be very small. If the radius
230 of the source which equals the wavelength is 5 meters, than the frequency is
231 the inverse of the wavelength The velocity is $c=380.0ms^{-1}$ thus the source
232 frequency is $f\hackscore{r} = \frac{380.0}{5} = 76.0 Hz$. The sampling
233 frequency must be at least twice this. Assuming a rectangular equispaced grid,
234 the sampling interval is $\Delta x = \frac{1000.0}{400} = 2.5$ and the sampling
235 frequency $f\hackscore{s}=\frac{380.0}{2.5}=152$ this is just equal to the
236 required rate satisfying \refeq{eqn:samptheorem}.
237
238
239
240

  ViewVC Help
Powered by ViewVC 1.1.26