
- •Contents
- •Series Preface
- •Introduction
- •Floating-Point Numbers
- •Computational Cost
- •Fidelity
- •Code Development
- •List of Open-Source Tools
- •Exercises
- •References
- •Derivation of the Wave Equation
- •Introduction
- •General Properties of Waves
- •One-Dimensional Waves on a String
- •Waves in Elastic Solids
- •Waves in Ideal Fluids
- •Thin Rods and Plates
- •Phonons
- •Tensors Lite
- •Exercises
- •References
- •Methods for solving the Wave Equation
- •Introduction
- •Method of Characteristics
- •Separation of Variables
- •Homogeneous Solution in Separable Coordinates
- •Boundary Conditions
- •Representing Functions with the Homogeneous Solutions
- •Green
- •Method of Images
- •Comparison of Modes to Images
- •Exercises
- •References
- •Wave Propagation
- •Introduction
- •Fourier Decomposition and Synthesis
- •Dispersion
- •Transmission and Reflection
- •Attenuation
- •Exercises
- •References
- •Normal Modes
- •Introduction
- •Mode Theory
- •Profile Models
- •Analytic Examples
- •Perturbation Theory
- •Multidimensional Problems and Degeneracy
- •Numerical Approach to Modes
- •Coupled Modes and the Pekeris Waveguide
- •Exercises
- •References
- •Ray Theory
- •Introduction
- •High Frequency Expansion of the Wave Equation
- •Amplitude
- •Ray Path Integrals
- •Building a Field from Rays
- •Numerical Approach to Ray Tracing
- •Complete Paraxial Ray Trace
- •Implementation Notes
- •Gaussian Beam Tracing
- •Exercises
- •References
- •Introduction
- •Finite Difference
- •Time Domain
- •FDTD Representation of the Linear Wave Equation
- •Exercises
- •References
- •Parabolic Equation
- •Introduction
- •The Paraxial Approximation
- •Operator Factoring
- •Pauli Spin Matrices
- •Reduction of Order
- •Numerical Approach
- •Exercises
- •References
- •Finite Element Method
- •Introduction
- •The Finite Element Technique
- •Discretization of the Domain
- •Defining Basis Elements
- •Expressing the Helmholtz Equation in the FEM Basis
- •Numerical Integration over Triangular and Tetrahedral Domains
- •Implementation Notes
- •Exercises
- •References
- •Boundary Element Method
- •Introduction
- •The Boundary Integral Equations
- •Discretization of the BIE
- •Basis Elements and Test Functions
- •Coupling Integrals
- •Scattering from Closed Surfaces
- •Implementation Notes
- •Comments on Additional Techniques
- •Exercises
- •References
- •Index

2.5 List of Open-Source Tools
This section offers a small collection of open-source tools that falls into one of three categories: libraries, compilers, and other tools for use with C/C++, open-source equivalents of MATLAB, Maple or Mathematica, and miscellaneous software that is relevant to the subject matter of this text (Tables 2.7, 2.8, and 2.9).
Disclaimer(s)
The author is not endorsing any one package over another or the use of open source as an alternative to professional software packages. These lists are provided as a courtesy for readers interested in using and contributing to open source.
It is the responsibility of the reader to read and understand the license agreement associated with these software libraries and alternatives to professional software. What you can or cannot do is expressed in the license. Read the license.
Table 2.7 Open-source alternatives to MATLAB, MAPLE, or Mathematica
List of software tools and libraries
Name |
Where to find |
Brief description |
|
|
|
SCILAB |
http://www.scilab.org/ |
Open-source version of MATLAB |
Octave |
https://www.gnu.org/software/octave/ |
Open-source version of MATLAB |
Maxima |
http://maxima.sourceforge.net/ |
Open-source symbolic math software, similar |
|
|
to Maple or Mathematica |
Euler Math |
http://euler.rene-grothmann.de/ |
Open-source version of MATLAB with |
Toolbox |
|
symbolic math |
FreeMat |
http://freemat.sourceforge.net/ |
Open-source version of MATLAB |
SageMath |
http://www.sagemath.org/ |
Open-source alternative to Maple, Mathema- |
|
|
tica, and MATLAB |
|
|
|
Table 2.8 List of C/C++ numeric libraries and other items
List of useful libraries for C/C++
GNU Science |
https://www.gnu.org/software/gsl/ |
Numerical library for C/C++ |
Library |
|
|
Boost |
http://www.boost.org/ |
Numerical library for C/C++ |
Eigen |
http://eigen.tuxfamily.org/ |
Linear algebra library for C/C++ |
Armadillo |
http://arma.sourceforge.net/ |
Open-source linear algebra library for C++ |
Visual Studio |
https://www.visualstudio.com/vs/ |
Free C/C++ compiler and IDE |
Express |
visual-studio-express/ |
|
GCC |
https://gcc.gnu.org/ |
GNU open-source C/C++ compiler |
FFTW |
http://www.fftw.org/ |
Free discrete FFT library for C |
Odeint |
http://headmyshoulder.github.io/ |
Free C++ library of numerical ordinary |
|
odeint-v2/ |
differential equation solvers |
|
|
|

Table 2.9 List of tools related to finite and boundary element analysis
Additional software for scientific computing
Python |
https://www.python.org/ |
Interpreted high-level programming |
|
|
language |
Advanced Simula- |
http://asl.org.il/ |
Open-source tool for solving partial |
tion Library |
|
differential equation |
BEM++ |
http://www.bempp.org/ |
Open-source boundary element method |
|
|
library for Python |
GetFEM++ |
http://download.gna.org/getfem/ |
Open-source FEM library for Python, |
|
html/homepage/ |
MATLAB, and SCILAB |
Gmsh |
http://gmsh.info/ |
Open-source 3D finite element mesh |
|
|
generator |
enGrid |
http://www.engits.com/engrid--- |
Open-source mesh generation |
|
mesher.html?lang=en |
|
|
|
|
2.6 Exercises
1.For the cos(a − b) evaluation, find the value of N when the two approaches are equal as a function of r = cTca.
2.Write the binary representation of 123.45.
3.For the result of Exercise 2, write the single-precision floating-point representation of this number.
4.Write pseudo code for evaluating Green’s function:
expikx
x
where, x, k are real number and x ≥ 0, k can be either sign. Assume that only real number is possible in the evaluation of the function. You will need to decide what the behavior should be if x = 0 is an input.
5.The function in Exercise 4 is used to estimate the interaction among N point line objects.
(a)How many times will the equation need to be used to calculate all interactions?
(b)Estimate the computational cost of this calculation including the unit cost of the operations expressed in the equation.
(c)Estimate the memory required to store all results
(d)What is the memory requirement for 100,000 objects assuming double precision?
References
[1] Rump, S. M., Ogita, T., and Oishi, S., Accurate floating-point summation, part I: Faithful rounding, SIAM J. Sci. Comput., Vol. 31, No. 1, pp. 189–224, 2008.
[2] IEEE, ANSI/IEEE Std 754-1985: IEEE Standard for Binary Floating-Point Arithmetic, IEEE, New York, 1985.
[3]Pancratov, C., Kurzer, J. M., Shaw, K. A., and Trawick, M. L., Why computer architecture matters, Comput. Sci. Eng., Vol. 10, No. 3, pp. 59–63, 2008.
[4]Gross, D. C., Report from the Fidelity Implementation Study Group, paper no. 99S-SIW-167, Proceedings of 1999 Spring Simulation Interoperability Workshop, Simulation Interoperability Standards Organization, Orlando, FL, 1999.
[5]Press, W. H., Teukolsky, S. A., Vetterling, W. T., and Flannery, B. P., Numerical Recipes in C, The Art of Scientific Computing, Second Edition, Cambridge University Press, Cambridge, 1999.
[6]Deitel, H. M. and Deitel, P. J., C++ How to Program, Fifth Edition, Pearson, Prentice Hall, Upper Saddle River, NJ, 2005.