text:
# Sound pressure

Sound measurements
Characteristic
Symbols
Sound pressure p, SPL,LPA
Particle velocity v, SVL
Particle displacement δ
Sound intensity I, SIL
Sound power P, SWL, LWA
Sound energy W
Sound energy density w
Sound exposure E, SEL
Acoustic impedance Z
Audio frequency AF
Transmission loss TL

Sound pressure or acoustic pressure is the local pressure deviation from the ambient (average or equilibrium) atmospheric pressure, caused by a sound wave. In air, sound pressure can be measured using a microphone, and in water with a hydrophone. The SI unit of sound pressure is the pascal (Pa).[1]

## Mathematical definition

Sound pressure diagram:
1. silence;
2. audible sound;
3. atmospheric pressure;
4. sound pressure

A sound wave in a transmission medium causes a deviation (sound pressure, a dynamic pressure) in the local ambient pressure, a static pressure.

Sound pressure, denoted p, is defined by

${\displaystyle p_{\text{total}}=p_{\text{stat}}+p,}$
where

• ptotal is the total pressure,
• pstat is the static pressure.

## Sound measurements

### Sound intensity

In a sound wave, the complementary variable to sound pressure is the particle velocity. Together, they determine the sound intensity of the wave.

Sound intensity, denoted I and measured in W·m−2 in SI units, is defined by

${\displaystyle \mathbf {I} =p\mathbf {v} ,}$
where

• p is the sound pressure,
• v is the particle velocity.

### Acoustic impedance

Acoustic impedance, denoted Z and measured in Pa·m−3·s in SI units, is defined by[2]

${\displaystyle Z(s)={\frac {{\hat {p}}(s)}{{\hat {Q}}(s)}},}$
where

• ${\displaystyle {\hat {p}}(s)}$ is the Laplace transform of sound pressure[citation needed],
• ${\displaystyle {\hat {Q}}(s)}$ is the Laplace transform of sound volume flow rate.

Specific acoustic impedance, denoted z and measured in Pa·m−1·s in SI units, is defined by[2]

${\displaystyle z(s)={\frac {{\hat {p}}(s)}{{\hat {v}}(s)}},}$
where

• ${\displaystyle {\hat {p}}(s)}$ is the Laplace transform of sound pressure,
• ${\displaystyle {\hat {v}}(s)}$ is the Laplace transform of particle velocity.

### Particle displacement

The particle displacement of a progressive sine wave is given by

${\displaystyle \delta (\mathbf {r} ,t)=\delta _{\text{m}}\cos(\mathbf {k} \cdot \mathbf {r} -\omega t+\varphi _{\delta ,0}),}$
where

• ${\displaystyle \delta _{\text{m}}}$ is the amplitude of the particle displacement,
• ${\displaystyle \varphi _{\delta ,0}}$ is the phase shift of the particle displacement,
• k is the angular wavevector,
• ω is the angular frequency.

It follows that the particle velocity and the sound pressure along the direction of propagation of the sound wave x are given by

${\displaystyle v(\mathbf {r} ,t)={\frac {\partial \delta }{\partial t}}(\mathbf {r} ,t)=\omega \delta _{\text{m}}\cos \left(\mathbf {k} \cdot \mathbf {r} -\omega t+\varphi _{\delta ,0}+{\frac {\pi }{2}}\right)=v_{\text{m}}\cos(\mathbf {k} \cdot \mathbf {r} -\omega t+\varphi _{v,0}),}$
${\displaystyle p(\mathbf {r} ,t)=-\rho c^{2}{\frac {\partial \delta }{\partial x}}(\mathbf {r} ,t)=\rho c^{2}k_{x}\delta _{\text{m}}\cos \left(\mathbf {k} \cdot \mathbf {r} -\omega t+\varphi _{\delta ,0}+{\frac {\pi }{2}}\right)=p_{\text{m}}\cos(\mathbf {k} \cdot \mathbf {r} -\omega t+\varphi _{p,0}),}$
where

• vm is the amplitude of the particle velocity,
• ${\displaystyle \varphi _{v,0}}$ is the phase shift of the particle velocity,
• pm is the amplitude of the acoustic pressure,
• ${\displaystyle \varphi _{p,0}}$ is the phase shift of the acoustic pressure.

Taking the Laplace transforms of v and p with respect to time yields

${\displaystyle {\hat {v}}(\mathbf {r} ,s)=v_{\text{m}}{\frac {s\cos \varphi _{v,0}-\omega \sin \varphi _{v,0}}{s^{2}+\omega ^{2}}},}$
${\displaystyle {\hat {p}}(\mathbf {r} ,s)=p_{\text{m}}{\frac {s\cos \varphi _{p,0}-\omega \sin \varphi _{p,0}}{s^{2}+\omega ^{2}}}.}$

Since ${\displaystyle \varphi _{v,0}=\varphi _{p,0}}$, the amplitude of the specific acoustic impedance is given by

${\displaystyle z_{\text{m}}(\mathbf {r} ,s)=|z(\mathbf {r} ,s)|=\left|{\frac {{\hat {p}}(\mathbf {r} ,s)}{{\hat {v}}(\mathbf {r} ,s)}}\right|={\frac {p_{\text{m}}}{v_{\text{m}}}}={\frac {\rho c^{2}k_{x}}{\omega }}.}$

Consequently, the amplitude of the particle displacement is related to that of the acoustic velocity and the sound pressure by

${\displaystyle \delta _{\text{m}}={\frac {v_{\text{m}}}{\omega }},}$
${\displaystyle \delta _{\text{m}}={\frac {p_{\text{m}}}{\omega z_{\text{m}}(\mathbf {r} ,s)}}.}$

## Inverse-proportional law

When measuring the sound pressure created by a sound source, it is important to measure the distance from the object as well, since the sound pressure of a spherical sound wave decreases as 1/r from the centre of the sphere (and not as 1/r2, like the sound intensity):[3]

${\displaystyle p(r)\propto {\frac {1}{r}}.}$

This relationship is an inverse-proportional law.

If the sound pressure p1 is measured at a distance r1 from the centre of the sphere, the sound pressure p2 at another position r2 can be calculated:

${\displaystyle p_{2}={\frac {r_{1}}{r_{2}}}\,p_{1}.}$

The inverse-proportional law for sound pressure comes from the inverse-square law for sound intensity:

${\displaystyle I(r)\propto {\frac {1}{r^{2}}}.}$
Indeed,
${\displaystyle I(r)=p(r)v(r)=p(r)\left[p*z^{-1}\right](r)\propto p^{2}(r),}$
where

hence the inverse-proportional law:

${\displaystyle p(r)\propto {\frac {1}{r}}.}$

The sound pressure may vary in direction from the centre of the sphere as well, so measurements at different angles may be necessary, depending on the situation. An obvious example of a sound source whose spherical sound wave varies in level in different directions is a bullhorn.[citation needed]

## Sound pressure level

Sound pressure level (SPL) or acoustic pressure level is a logarithmic measure of the effective pressure of a sound relative to a reference value.

Sound pressure level, denoted Lp and measured in dB,[4] is defined by:[5]

${\displaystyle L_{p}=\ln \left({\frac {p}{p_{0}}}\right)~{\text{Np}}=2\log _{10}\left({\frac {p}{p_{0}}}\right)~{\text{B}}=20\log _{10}\left({\frac {p}{p_{0}}}\right)~{\text{dB}},}$
where

• p is the root mean square sound pressure,[6]
• p0 is a reference sound pressure,
• 1 Np is the neper,
• 1 B = (1/2 ln 10) Np is the bel,
• 1 dB = (1/20 ln 10) Np is the decibel.

The commonly used reference sound pressure in air is[7]

p0 = 20 μPa,

which is often considered as the threshold of human hearing (roughly the sound of a mosquito flying 3 m away). The proper notations for sound pressure level using this reference are Lp/(20 μPa) or Lp (re 20 μPa), but the suffix notations dB SPL, dB(SPL), dBSPL, or dBSPL are very common, even if they are not accepted by the SI.[8]

Most sound-level measurements will be made relative to this reference, meaning 1 Pa will equal an SPL of 94 dB. In other media, such as underwater, a reference level of 1 μPa is used.[9] These references are defined in ANSI S1.1-2013.[10]

The main instrument for measuring sound levels in the environment is the sound level meter. Most sound level meters provide readings in A, C, and Z-weighted decibels and must meet international standards such as IEC 61672-2013.

### Examples

The lower limit of audibility is defined as SPL of 0 dB, but the upper limit is not as clearly defined. While 1 atm (194 dB peak or 191 dB SPL)[11][12] is the largest pressure variation an undistorted sound wave can have in Earth's atmosphere (i.e. if the thermodynamic properties of the air are disregarded, in reality the sound waves become progressively non-linear starting over 150 dB), larger sound waves can be present in other atmospheres or other media, such as underwater or through the Earth.[13]

Equal-loudness contour, showing sound-pressure-vs-frequency at different perceived loudness levels

Ears detect changes in sound pressure. Human hearing does not have a flat spectral sensitivity (frequency response) relative to frequency versus amplitude. Humans do not perceive low- and high-frequency sounds as well as they perceive sounds between 3,000 and 4,000 Hz, as shown in the equal-loudness contour. Because the frequency response of human hearing changes with amplitude, three weightings have been established for measuring sound pressure: A, B and C.

In order to distinguish the different sound measures, a suffix is used: A-weighted sound pressure level is written either as dBA or LA. B-weighted sound pressure level is written either as dBB or LB, and C-weighted sound pressure level is written either as dBC or LC. Unweighted sound pressure level is called "linear sound pressure level" and is often written as dBL or just L. Some sound measuring instruments use the letter "Z" as an indication of linear SPL.[13]

### Distance

The distance of the measuring microphone from a sound source is often omitted when SPL measurements are quoted, making the data useless, due to the inherent effect of the inverse proportional law. In the case of ambient environmental measurements of "background" noise, distance need not be quoted, as no single source is present, but when measuring the noise level of a specific piece of equipment, the distance should always be stated. A distance of one metre (1 m) from the source is a frequently used standard distance. Because of the effects of reflected noise within a closed room, the use of an anechoic chamber allows sound to be comparable to measurements made in a free field environment.[13]

According to the inverse proportional law, when sound level Lp1 is measured at a distance r1, the sound level Lp2 at the distance r2 is

${\displaystyle L_{p_{2}}=L_{p_{1}}+20\log _{10}\left({\frac {r_{1}}{r_{2}}}\right)~{\text{dB}}.}$

### Multiple sources

The formula for the sum of the sound pressure levels of n incoherent radiating sources is

${\displaystyle L_{\Sigma }=10\log _{10}\left({\frac {p_{1}^{2}+p_{2}^{2}+\dots +p_{n}^{2}}{p_{0}^{2}}}\right)~{\text{dB}}=10\log _{10}\left[\left({\frac {p_{1}}{p_{0}}}\right)^{2}+\left({\frac {p_{2}}{p_{0}}}\right)^{2}+\dots +\left({\frac {p_{n}}{p_{0}}}\right)^{2}\right]~{\text{dB}}.}$

Inserting the formulas

${\displaystyle \left({\frac {p_{i}}{p_{0}}}\right)^{2}=10^{\frac {L_{i}}{10~{\text{dB}}}},\quad i=1,2,\ldots ,n}$
in the formula for the sum of the sound pressure levels yields
${\displaystyle L_{\Sigma }=10\log _{10}\left(10^{\frac {L_{1}}{10~{\text{dB}}}}+10^{\frac {L_{2}}{10~{\text{dB}}}}+\dots +10^{\frac {L_{n}}{10~{\text{dB}}}}\right)~{\text{dB}}.}$

## Examples of sound pressure

Examples of sound pressure in air at standard atmospheric pressure
Source of sound Distance Sound pressure level[a]
(Pa) (dBSPL)
Shock wave (distorted sound waves > 1 atm; waveform valleys are clipped at zero pressure)[11][12] >1.01×105 >191
Simple open-ended thermoacoustic device[14] [clarification needed] 1.26×104 176
1883 eruption of Krakatoa[15][16] 165 km 172
.30-06 rifle being fired m to
shooter's side
7.09×103 171
Firecracker[17] 0.5 m 7.09×103 171
...8.00×103
158–172
9-inch (23 cm) party balloon inflated to rupture[19] At ear 4.92×103 168
9-inch (23 cm) diameter balloon crushed to rupture[19] At ear 1.79×103 159
9-inch (23 cm) party balloon inflated to rupture[19] 0.5 m 1.42×103 157
9-inch (23 cm) diameter balloon popped with a pin[19] At ear 1.13×103 155
LRAD 1000Xi Long Range Acoustic Device[20] 1 m 8.93×102 153
9-inch (23 cm) party balloon inflated to rupture[19] 1 m 731 151
Jet engine[13] 1 m 632 150
9-inch (23 cm) diameter balloon crushed to rupture[19] 0.95 m 448 147
9-inch (23 cm) diameter balloon popped with a pin[19] 1 m 282.5 143
Loudest human voice[21] 1 inch 110 135
Trumpet[22] 0.5 m 63.2 130
Vuvuzela horn[23] 1 m 20.0 120
Threshold of pain[24][25][21] At ear 20–200 120–140
Risk of instantaneous noise-induced hearing loss At ear 20.0 120
Jet engine 100–30 m 6.32–200 110–140
Two-stroke chainsaw[26] 1 m 6.32 110
Jackhammer 1 m 2.00 100
Traffic on a busy roadway 10 m 0.20–0.63 80–90
Hearing damage (over long-term exposure, need not be continuous)[27] At ear 0.36 85
Passenger car 10 m 0.02–0.20 60–80
EPA-identified maximum to protect against hearing loss and other disruptive effects from noise, such as sleep disturbance, stress, learning detriment, etc.[28] Ambient 0.06 70
TV (set at home level) 1 m 0.02 60
Normal conversation 1 m 2×10−3–0.02 40–60
Very calm room Ambient 2.00×10−4
...6.32×10−4
20–30
Light leaf rustling, calm breathing[13] Ambient 6.32×10−5 10
Auditory threshold at 1 kHz[27] At ear 2.00×10−5 0
Anechoic chamber, Orfield Labs, A-weighted[29][30] Ambient 6.80×10−6 −9.4
Anechoic chamber, University of Salford, A-weighted[31] Ambient 4.80×10−6 −12.4
Anechoic chamber, Microsoft, A-weighted[32][33] Ambient 1.90×10−6 −20.35
1. ^ All values listed are the effective sound pressure unless otherwise stated.

## References

1. ^ "Sound Pressure is the force of sound on a surface area perpendicular to the direction of the sound". Retrieved 22 April 2015.
2. ^ a b Wolfe, J. "What is acoustic impedance and why is it important?". University of New South Wales, Dept. of Physics, Music Acoustics. Retrieved 1 January 2014.
3. ^ Longhurst, R. S. (1967). Geometrical and Physical Optics. Norwich: Longmans.
4. ^ "Letter symbols to be used in electrical technology – Part 3: Logarithmic and related quantities, and their units", IEC 60027-3 Ed. 3.0, International Electrotechnical Commission, 19 July 2002.
5. ^ Attenborough K, Postema M (2008). A pocket-sized introduction to acoustics. Kingston upon Hull: The University of Hull. doi:10.5281/zenodo.7504060. ISBN 978-90-812588-2-1.
6. ^ Bies, David A., and Hansen, Colin. (2003). Engineering Noise Control.
7. ^ Ross Roeser, Michael Valente, Audiology: Diagnosis (Thieme 2007), p. 240.
8. ^ Thompson, A. and Taylor, B. N. Sec. 8.7: "Logarithmic quantities and units: level, neper, bel", Guide for the Use of the International System of Units (SI) 2008 Edition, NIST Special Publication 811, 2nd printing (November 2008), SP811 PDF.
9. ^ Morfey, Christopher L. (2001). Dictionary of Acoustics. San Diego: Academic Press. ISBN 978-0125069403.
10. ^ "Noise Terms Glossary". Retrieved 2012-10-14.
11. ^ a b Self, Douglas (2020-04-17). Small Signal Audio Design. CRC Press. ISBN 978-1-000-05044-8. this limit is reached when the rarefaction creates a vacuum, because you can't have a lower pressure than that. This corresponds to about +194 dB SPL.
12. ^ a b Guignard, J. C.; King, P. F.; North Atlantic Treaty Organization Advisory Group for Aerospace Research and Development Aerospace Medical Panel (1972). Aeromedical Aspects of Vibration and Noise. North Atlantic Treaty Organization, Advisory Group for Aerospace Research and Development. In air at an assumed atmospheric pressure of 1 bar (100,000 N/m2) this occurs theoretically at approximately 191 dB SPL (working with rms values
13. Winer, Ethan (2013). "1". The Audio Expert. New York and London: Focal Press. ISBN 978-0-240-82100-9.
14. ^ HATAZAWA, Masayasu; SUGITA, Hiroshi; OGAWA, Takahiro; SEO, Yoshitoki (2004-01-01). "Performance of a Thermoacoustic Sound Wave Generator driven with Waste Heat of Automobile Gasoline Engine". Transactions of the Japan Society of Mechanical Engineers Series B. 70 (689): 292–299. doi:10.1299/kikaib.70.292. ISSN 0387-5016.
15. ^ "Krakatoa Eruption - The Loudest Sound". Brüel & Kjær. Retrieved 2021-03-24. 160 km (99 miles) away from the source, registered a sound pressure level spike of more than 2½ inches of mercury (8.5 kPa), equivalent to 172 decibels.{{cite web}}: CS1 maint: url-status (link)
16. ^ Winchester, Simon (2003). Krakatoa: The Day the World Exploded, August 27, 1883. Penguin/Viking. p. 218. ISBN 978-0-670-91430-2.
17. ^ Flamme, GregoryA; Liebe, Kevin; Wong, Adam (2009). "Estimates of the auditory risk from outdoor impulse noise I: Firecrackers". Noise and Health. 11 (45): 223–230. doi:10.4103/1463-1741.56216. ISSN 1463-1741. PMID 19805932.
18. ^ Brueck S. E., Kardous C. A., Oza A., Murphy W. J (2014). "NIOSH HHE Report No. 2013-0124-3208. Health hazard evaluation report: measurement of exposure to impulsive noise at indoor and outdoor firing ranges during tactical training exercises" (PDF). Cincinnati, OH: U.S. Department of Health and Human Services, Centers for Disease Control and Prevention, National Institute for Occupational Safety and Health.{{cite web}}: CS1 maint: multiple names: authors list (link)
19. "Did You Know How Loud Balloons Can Be?". Retrieved 8 June 2018.
20. ^ "LRAD Corporation Product Overview for LRAD 1000Xi". Retrieved 29 May 2014.
21. ^ a b
22. ^
23. ^ Swanepoel, De Wet; Hall III, James W.; Koekemoer, Dirk (February 2010). "Vuvuzela – good for your team, bad for your ears" (PDF). South African Medical Journal. 100 (4): 99–100. doi:10.7196/samj.3697. PMID 20459912.
24. ^ Nave, Carl R. (2006). "Threshold of Pain". HyperPhysics. SciLinks. Retrieved 2009-06-16.
25. ^ Franks, John R.; Stephenson, Mark R.; Merry, Carol J., eds. (June 1996). Preventing Occupational Hearing Loss – A Practical Guide (PDF). National Institute for Occupational Safety and Health. p. 88. Retrieved 2009-07-15.
26. ^ "Decibel Table – SPL – Loudness Comparison Chart". sengpielaudio. Retrieved 5 Mar 2012.
27. ^ a b William Hamby. "Ultimate Sound Pressure Level Decibel Table". Archived from the original on 2005-10-19.
28. ^ "EPA Identifies Noise Levels Affecting Health and Welfare" (Press release). Environmental Protection Agency. April 2, 1974. Retrieved March 27, 2017.
29. ^ ""THE QUIETEST PLACE ON EARTH" – GUINNESS WORLD RECORDS CERTIFICATE, 2005" (PDF). Orfield Labs.
30. ^ Middlemiss, Neil (December 18, 2007). "The Quietest Place on Earth – Orfield Labs". Audio Junkies, Inc. Archived from the original on 2010-11-21.
31. ^ Eustace, Dave. "Anechoic Chamber". University of Salford.
32. ^ "Microsoft lab sets new record for the world's quietest place". 2015-10-02. Retrieved 2016-09-20. The computer company has built an anechoic chamber in which highly sensitive tests reported an average background noise reading of an unimaginably quiet −20.35 dBA (decibels A-weighted).
33. ^ "Check out the world's quietest room". Microsoft: Inside B87. Retrieved 2016-09-20.
General
• Beranek, Leo L., Acoustics (1993), Acoustical Society of America, ISBN 0-88318-494-X.
• Daniel R. Raichel, The Science and Applications of Acoustics (2006), Springer New York, ISBN 1441920803.


text:
# [NTG-context] oldstyle figures

Eckhart Guthöhrlein eckhart.guthoehrlein at uni-bielefeld.de
Tue Apr 19 09:56:57 CEST 2005

On Mon, 18 Apr 2005 at 16:30:04-0600, Idris Samawi Hamid wrote:
> >So, how to tell \digits to use oldstyle
> >figures, and/or how to make them the math mode default?
>
> Since it switches to math mode, one has to reencode the math fonts, i guess.
> In the meantime:
>
>  \def\OSdigits#1{\digits{\os#1}}
>
>  \OSdigits{1234}

Unfortunately not. It works in text mode, but produces a bunch of errors
in math mode. \digits doesn't seem to like \os in its argument. This
definition works here for now:

\def\OSdigits#1{\ifmmode{\os\digits{#1}}\else\digits{\os#1}\fi}

> should do everything you need: since u're not mixing text in \digits do you
> really need a global math font reencoding?

In principle yes. For example, $f(x)=3x+7$ should come out with oldstyle
figures, if these are used by default, shouldn't it?
Btw, striving for good typography, in which cases should oldstyle
figures *not* be used?

Best regards,
--
Eckhart

format: plain


text:
Reference documentation for deal.II version Git 20e5cff 2017-01-17 12:52:29 -0500
Changes between Version 7.0 and 7.1

This is the list of changes made between the deal.II releases listed above. All entries are signed with the names of the author.

### Incompatibilities

Following are a few modifications to the library that unfortunately are incompatible with previous versions of the library, but which we deem necessary for the future maintainability of the library. Unfortunately, some of these changes will require modifications to application programs. We apologize for the inconvenience this causes.

1. Changed: GridTools, DoFTools, MGTools, VectorTools, MatrixCreator and MatrixTools are now namespaces. They have long been classes that had only public, static member functions, making the end result semantically exactly equivalent to a namespace, which is also how it was used. This is now also reflected in the actual code.
(Wolfgang Bangerth, 2011/04/27, 2011/09/14)

2. Changed: The PETScWrappers::VectorBase and PETScWrappers::MatrixBase classes tried to keep track of whether the last operation done on a vector was to add to an element or to write into one. If the previous such operation was of a different kind than the current one, we would flush buffers (see the description in GlossCompress). However, trying to do this automatically turned out to be an endless source of hard-to-find bugs in parallel programs. The scheme has therefore now been changed to the following: the classes keep track of the previous operation and if it differs from the current one, reports an error stating that the user needs to call PETScWrapper::VectorBase::compress() or PETScWrapper::MatrixBase::compress() instead.
(Wolfgang Bangerth, 2011/08/03, 2011/08/30)

3. Changed: The classes Tensor, SymmetricTensor and Point now have an additional template argument for the number type. While a default template value of double ensures that all old code is still valid, this change invalidates forward declarations of the form template <int dim> class Point that might be present in user-defined header files. Now forward declarations need to specify the type as well, i.e., template <int dim, typename Number> class Point. However, nothing changes if the full declarations in deal.II/base/tensor.h, deal.II/base/symmetric_tensor.h and deal.II/base/point.h are included.
(Martin Kronbichler, 2011/08/02)

4. Removed: deal.II no longer supports Trilinos versions prior to 10.0.
(Wolfgang Bangerth, 2011/06/29)

5. Changed: deal.II has a namespace std_cxx1x that was used to import classes from BOOST that are part of the upcoming C++ 1x standard. On the other hand, if your compiler supported a sufficiently large subset of C++ 1x, we had code that simply did

namespace std_cxx1x = std;

allowing you to refer to everything that was part of the compiler's namespace std under the alternative name. This turned out to be untenable in connection to the changed outlined below for _1, _2, etc. Consequently, if the compiler used supports C++ 1x, we now selectively import elements of the compiler's namespace std into namespace std_cxx1x as well. This may lead to incompatibilities if you are already using elements of the C++ 1x standard by referring to them through the std_cxx1x namespace and these elements are not on the list of selectively imported ones.
(Wolfgang Bangerth, 2011/05/29)

6. Changed: Previously, placeholder arguments like _1, _2, etc that are used in conjunction with the std_cxx1x::bind function could be referenced as if they are part of the global namespace. This was achieved by importing the corresponding elements of namespace std::placeholders into the global namespace if your compiler supported this part of the C++ 1x standard, or otherwise using the BOOST counterparts which are already in the global namespace. However, this leads to a conflict if one has a C++ 1x enabled compiler (e.g. GCC 4.6) and includes certain BOOST headers, since the importation of symbols into the global namespace now leads to ambiguous names. The only solution to the problem is to not import names into the global namespace, but rather import the names from either BOOST or namespace std into the deal.II namespace std_cxx1x. The downside is that all code that uses _1, _2, etc needs to be changed to use std_cxx1x::_1, std_cxx1x::_2, etc from now on.
(Wolfgang Bangerth, 2011/05/29)

### General

1. New: Long in the making, the new tutorial program step-32 is a massively parallel simulator for the Boussinesq equations that describe thermal convection.
(Martin Kronbichler, Timo Heister, Wolfgang Bangerth, 2011/10/06)

2. New: There is now a namespace Utilities::MPI that holds some of the MPI-related functions that were previously part of Utilities::System. Specifically, the following functions were moved and in part renamed: Utilities::System::get_n_mpi_processes is now Utilities::MPI::n_mpi_processes; Utilities::System::get_this_mpi_process is now Utilities::MPI::this_mpi_process; Utilities::System::compute_point_to_point_communication_pattern is now Utilities::MPI::compute_point_to_point_communication_pattern; Utilities::System::duplicate_communicator is now Utilities::MPI::duplicate_communicator; Utilities::System::calculate_collective_mpi_min_max_avg is now Utilities::MPI::min_max_avg; Utilities::System::MPI_InitFinalize is now Utilities::MPI::MPI_InitFinalize. In addition, some of the arguments of these functions or classes have changed.
The previous functions should still be available, though their use is now deprecated.
(Wolfgang Bangerth, 2011/09/26)

3. Removed: Utilities::System::program_uses_mpi does exactly the same thing as Utilities::System::job_supports_mpi. The former has therefore been deprecated.
(Wolfgang Bangerth, 2011/09/26)

4. New: When using a new enough version of GCC, debug sections in object files are now compressed using the -Wa,–compress-debug-sections flag, resulting in savings in disk space on the order of 230 MB.
(Wolfgang Bangerth, 2011/09/22)

5. New: deal.II can now be configured and built with the Clang C++ frontend of the LLVM compiler.
(Timo Heister, Wolfgang Bangerth, 2011/08/20)

6. Changed: Several of the tutorial programs used the same class names, often LaplaceProblem in the earlier programs. There is nothing inherently wrong with this, since these are entirely separate programs, but this sometimes confused integrated development environments because searching for individual symbols would turn up several occurrences in different files. To make this a bit simpler, the main classes for step-3 through step-6 were renamed to StepX (steps 1 and 2 do not have a main class). Starting with step-7, everything specific to a tutorial program has been moved into a namespace called StepX to make the fully qualified names unique across different tutorial programs.
(Wolfgang Bangerth, Guido Kanschat 2011/08/16)

7. Extended: Many operations on objects of type Point<0>, Quadrature<0>, etc (including creation) were previously forbidden since such objects do not make much sense. However, this prevented a lot of code that could otherwise work in a dimension independent way, from working in 1d, e.g. integration on faces. Many of these places have now been cleaned up and work.
(Wolfgang Bangerth, 2011/08/12)

8. Extended: The classes Tensor, SymmetricTensor and Point now have an additional template argument for the number type. It is now possible to base these classes on any abstract data type that implements basic arithmetic operations, like Tensor<1,dim,std::complex<double> >. deal.II uses a default template argument double that ensures that all code using e.g. Tensor<1,dim> remains valid.
(Martin Kronbichler, 2011/08/02)

9. Fixed: deal.II can link with Trilinos but previously it required a very specific set of Trilinos sub-libraries; if Trilinos had been compiled with a larger set of sub-libraries, linking would sometimes fail. This has now been made more generic and deal.II obtains the proper set of libraries from Trilinos.
(Wolfgang Bangerth, 2011/06/29)

10. Fixed: On Mac OS X, linking with some external libraries such as Trilinos sometimes failed due to a misconfiguration of linker flags. This should now be fixed.
(Praveen C, Martin Kronbichler, Wolfgang Bangerth, 2011/06/23)

11. Changed: Doing make clean was supposed to only remove object files but not libraries; however, it also removed the TBB libraries and a few executables. This has now been changed: make clean now only removes stuff that isn't needed to run executables, i.e. it leaves the TBB and other libraries alone. As before, the target make distclean is responsible for removing everything.
(Max Jensen, Wolfgang Bangerth, 2011/06/14)

12. New: The Triangulation and DoFHandler classes, together with many smaller classes can now be serialized, i.e. their data can be written to an output stream and later retrieved to restore the state of the program.
(Wolfgang Bangerth, 2011/06/13)

13. New/deprecated: The Triangulation class offers ways to get informed whenever the triangulation changes. Previously, the mechanism doing this was through the Triangulation::RefinementListener class. This has been deprecated and has been superceded by a BOOST signals based mechanism that is generally more powerful and does not rely on overloading particular virtual functions inherited from a base class.

While the old mechanism should continue to work, you should consider upgrading. For more information on the signals mechanism, see the documentation of the Triangulation class.

In addition to the change above, the new implementation now offers two more signals one can subscribe to: Triangulation::Signals::clead for when the triangulation is cleared, and Triangulation::Signals::any_change that can be used for any operation that changes the mesh. Furthermore, in a change from previous behavior, the Triangulations::Signal::create signal is now also triggered when another triangulation is copied to the one that owns the signal.
(Wolfgang Bangerth, 2011/06/01)

14. Removed: The ./configure script allowed configuring for the GNU Scientific Library (GSL) in version 7.0 but didn't actually use any of the GSL functions. The corresponding code has therefore been removed again.
(Wolfgang Bangerth, 2011/05/22)

15. Changed: Traditionally, include directories were set through the -I flag in make files in such a way that one would do

In preparation for future changes that will make possible installing header files in a directory under /usr/include it seemed useful to install everything under /usr/include/deal.II and include them as

This change has been made throughout the library and tutorial programs. However, the old way of using include directories will continue to work for at least one release for backward compatibility.
(Wolfgang Bangerth, 2011/05/16)

16. Changed: The version of BOOST we ship with deal.II has been upgraded to 1.46.1. BOOST now also resides in the directory contrib/boost-1.46.1 instead of an unversioned directory.
(Wolfgang Bangerth, 2011/05/16)

17. New: The SparseDirectUMFPACK class can now also deal with matrices provided in SparseMatrixEZ format.
(Martin Genet, 2011/05/04)

18. New: The new tutorial program step-46 shows how to couple different models defined on subsets of the domain, in this case Stokes flow around an elastic solid. The trick here is that variables (here the flow velocity and pressure, and the solid displacement) do not live on the entire domain, but only on a part. The point of the program is how to represent this in source code.
(Wolfgang Bangerth, 2011/04/30)

19. Fixed: On Debian, the Trilinos packages use a different layout of include files and library names. The ./configure script can now deal with this.
(Walter Landry, 2011/02/22)

20. Improved: Linking the deal.II libraries on file systems that are mounted remotely from a file server took painfully long. This is now fixed by linking everything on the local file system and only subsequently moving the file into its final location.
(Wolfgang Bangerth, 2011/01/28)

21. Changed: Most classes in deal.II have a member function memory_consumption that used to return an unsigned int. However, on most 64-bit systems, unsigned int is still only 32-bit wide, and consequently the return type does not provide enough precision to return the size of very large objects. The return types of all of these functions has been changed to std::size_t, which is defined to be a type that can hold the sizes of all objects possible on any system.
(Wolfgang Bangerth, 2011/01/22)

22. Fixed: When using the –enable-mpi to ./configure, the script only tried mpiCC as the MPI C++ compiler. However, on some systems, it is called mpicxx. The script now tries that as well.
(Wolfgang Bangerth, 2011/01/22)

23. Fixed: When using Trilinos and using the Intel C++ compiler, we accidentally used invalid compiler flags that led to a warning every time we compiled a file.
(Wolfgang Bangerth, 2011/01/22)

24. Fixed: At the bottom of the page of tutorial programs we show a "plain" version of the tutorial program. However, the script that generates this plain version was broken and sometimes truncated the file. This should be fixed now.
(Wolfgang Bangerth, 2011/01/18)

25. Extended: Several missing instantiations of functions for triangulations and DoF handlers embedded in higher dimensional space have been added.
(Wolfgang Bangerth, 2011/01/15)

### Specific improvements

1. New: There is a new predicate IteratorFilters::LocallyOwnedCell for filtered iterators.
(Wolfgang Bangerth, 2011/10/03)

2. Improved: The class BlockList used in RelaxationBlock has been replaced by SparsityPattern, since it only reproduced its functionality.
(Guido Kanschat, 2011/09/26)

3. New: SparsityPattern::row_position() finds a column index in a row and returns its "local" index or numbers::invalid_unsigned_int.
(Guido Kanschat, 2011/09/26)

4. New: The functions Utilities::MPI::sum and Utilities::MPI::max function can be used to compute the sum or maximum of values over a number of MPI processes without having to deal with the underlying MPI functions.
(Wolfgang Bangerth, 2011/09/25)

5. New: The CellAccessor::is_locally_owned function is a shortcut for the !cell->is_ghost() && !cell->is_artificial() pattern found in many places when dealing with distributed meshes.
(Wolfgang Bangerth, 2011/09/10)

6. New: The GridGenerator::torus function and TorusBoundary class can create and describe the surface of a torus.
(Daniel Castanon Quiroz, 2011/09/08)

7. Fixed: FEFieldFunction class was not thread-safe because it keeps a cache on the side that was invalidated when different threads kept pouncing on it. This is now fixed.
(Patrick Sodré, 2011/09/07)

8. New: There is now a function GridTools::volume() computing the volume of a triangulation.
(Wolfgang Bangerth, 2011/09/02)

9. New: Code like cell->face(1)->set_boundary_indicator(42); now also works in 1d.
(Wolfgang Bangerth, 2011/08/30)

10. Fixed: The TimerOutput::print_summary() function changed the precision of output on the stream it prints to, but didn't restore the previous value. This is now fixed.
(Wolfgang Bangerth, 2011/08/30)

11. New: There are now two new functions Utilities::string_to_double.
(Wolfgang Bangerth, 2011/08/25)

12. Changed: The function VectorTools::compute_no_normal_flux_constraints used to compute its constraints by evaluating the normal vector to the surface as described by the mapping, rather than using the normal to the surface described by the Boundary object associated with this face. (Note that the Mapping computes its approximation by polynomial interpolation of the surface described by the Boundary object.) This has now been changed: the normal vector is now obtained from the Boundary object directly, at points computed by the Mapping.
(Wolfgang Bangerth, 2011/08/25)

13. New: The Boundary base class now has a function Boundary::normal_vector that returns the normal vector to the surface at a given location. Derived classes need to implement it, of course, if they want it to be used.
(Wolfgang Bangerth, 2011/08/25)

14. Fixed: The function VectorTools::compute_no_normal_flux_constraints had a problem that led to extremely difficult to pin down bugs when running with sufficiently many processors. Basically, the constraints computed by different processors did not agree which should be the independent degrees of freedom and which should be the constrained ones. The result were constraints that did not lead to a consistent linear system.
(Martin Kronbichler, 2011/08/24)

15. New: Added GridRefinement::hierarchical() to reorder the degrees of freedom by going through the cells in hierarchical order. This ensures consistent DoF numbering in parallel computations.
(Timo Heister, 2011/08/24)

16. Changed: Triangulation<dim>::get_boundary_indicators() returned wrong data for dim=1.
(Sebastian Pauletti 2011/08/17)

17. Improved: The function LogStream::timestamp() outputs all results of the Posix function times, namely wall time, user time and system time.
(Guido Kanschat, 2011/08/18)

18. Extended: GridGenerator::half_hyper_shell() got the option colorize, which assigns different boundary indicators to the different parts of the boundary. Added GridGenerator::quarter_hyper_shell() with the same options.
(Timo Heister, 2011/08/15)

19. Fixed: The functions VectorTools::create_boundary_right_hand_side() called with an empty set of boundary_indicators (the default), did not apply any boundary conditions. The empty set now applies it to all boundaries.
(Timo Heister, Sebastian Pauletti, 2011/08/15)

20. Fixed: The function VectorTools::compute_no_normal_flux_constraints had a bug that led to an exception whenever we were computing constraints for vector fields located on edges shared between two faces of a 3d cell if those faces were not perpendicular. This is now fixed.
(Wolfgang Bangerth, Thomas Geenen, Timo Heister, 2011/08/10)

21. New: The function FullMatrix::triple_product() adds triple products like Schur complements to existing matrices.
(Guido Kanschat, 2011/08/05)

22. Improved: The PETScWrapper::VectorBase class was rather generous in calling the PETSc VecAssembleBegin/End functions that incur communication in the parallel case and are therefore causes of potential slowdowns. This has been improved.
(Wolfgang Bangerth, 2011/08/03)

23. Fixed: The function VectorTools::create_right_hand_side now also works for objects of type hp::DoFHandler with different finite elements.
(Daniel Gerecht, 2011/07/20)

24. Improved: Evaluation of Lagrangian basis functions has been made stable by exchanging polynomial evaluation from the standard form $$a_n x^n+\ldots+a_1 x + a_0$$ to a product of linear factors, $$c (x - x_0) (x-x_1)\ldots (x-x_n)$$. This ensures accurate evaluation up to very high order and avoids inaccuracies when using high order finite elements.
(Martin Kronbichler 2011/07/26)

25. Improved: The internal functions in the constructor of the FE_Q element have been improved for high order elements. Especially when the element is constructed for a 1D quadrature formula, the initialization is now much faster. E.g. the initialization up to order 12 in three dimension completes in less than a second, whereas it took hundreds of seconds before.
(Martin Kronbichler 2011/07/26)

26. New: There is now a class Threads::ThreadLocalStorage that allows threads to have their own copy of an object without having to fear interference from other threads in accessing this object.
(Wolfgang Bangerth 2011/07/07)

27. Fixed: The 2d grid reordering algorithm that is used by all grid readers had a component that was quadratic in its complexity, sometimes leading to cases where reading in a mesh in debug mode could take minutes for just a few tens of thousands of cells. This has now been fixed.
(Wolfgang Bangerth 2011/07/07)

28. New: The function DoFTools::count_dofs_per_component now also works for objects of type hp::DoFHandler.
(Christian Goll, Wolfgang Bangerth 2011/07/06)

29. Fixed: Under some circumstances, Threads::Thread::join() could only be called once and would generate a system exception when called a second time. Since it is often useful to not track whether this function had already been called, this is now worked around in such a way that one can always call the function multiple times.
(Wolfgang Bangerth 2011/07/03)

30. New: The Threads::Thread::join() function can now also be called even if no thread has been assigned to this thread object. The function then simply does nothing.
(Wolfgang Bangerth 2011/07/03)

31. New: There is now a new function Threads::Thread::valid that can be used to query whether the thread object has been assigned a thread.
(Wolfgang Bangerth 2011/07/01)

32. New: The new function GridGenerator::merge_triangulations can be used to compose coarse meshes from simpler ones by merging their cells into a single triangulation object.
(Wolfgang Bangerth 2011/06/17)

33. Fixed: If an FEValues object was kept around until after the triangulation on which it works has been refined or coarsened, and is then reinitialized with a cell from the refined triangulation, it could compute wrong results or crash outright. This has now been fixed.
(Wolfgang Bangerth 2011/06/02)

34. Changed: The TrilinosWrappers::SparsityPattern::trilinos_sparsity_pattern() function returned a reference to an object of kind Epetra_CrsMatrix. However, the actual object pointed to is of derived class Epetra_FECrsMatrix. The function has now been changed to return a reference to the latter type. Since derived references can be assigned to references to base, this change should not result in any incompatibilities.
(Wolfgang Bangerth 2011/05/27)

35. New: The class RelaxationBlockJacobi has been added to the relaxation classes.
(Guido Kanschat, 2011/05/19)

36. New: discontinuous Galerkin versions of vector-valued elements have been implemented: FE_DGBDM, FE_DGNedelec, and FE_DGRaviartThomas.
(Guido Kanschat, 2011/05/19)

37. New: Mapping<dim,spacedim>::transform_real_to_unit_cell now works also in the codimension one case, where it performs the normal projection of the point on the codimension one surface.
(Luca Heltai, 2011/05/17)

38. New: The PersistentTriangulation class now works also in the codimension one case.
(Luca Heltai, 2011/05/16)

39. Fixed: The TrilinosWrappers::SparseMatrix::print() function didn't get column indices right. This is now fixed.
(Habib Talavatifard, Wolfgang Bangerth 2011/05/10)

40. Fixed: The TrilinosWrappers::SparseMatrix::operator() and TrilinosWrappers::SparseMatrix::el() functions sometimes produced wrong results for rectangular matrices. The same is true for TrilinosWrappers::SparsityPattern::exists(). This is now fixed.
(Habib Talavatifard, Wolfgang Bangerth 2011/05/09, 2011/05/27)

41. New: The version of DoFTools::make_flux_sparsity_pattern that takes the coupling masks is now also available for hp::DoFHandler objects.
(Wolfgang Bangerth, 2011/04/27)

42. Fixed: If Triangulation::create_triangulation is called after an hp::DoFHandler object is attached to the triangulation object, setting active FE indices leads to a crash. The problem did not happen if the mesh was refined before setting the FE indices. This is now fixed. In the process, the Triangulation::RefinementListener::create_notification function was introduced.
(Wolfgang Bangerth, 2011/04/22)

43. Fixed: The function FEValuesViews::SymmetricTensor::divergence had a bug. This is now fixed.
(Wolfgang Bangerth, Feifei Cheng, Venkat Vallala 2011/04/21)

44. Fixed: Under some conditions, FEFaceValues applied to an FESystem element that contained elements of type FE_Nothing would receive an erroneous exception. This is now fixed.
(Wolfgang Bangerth, 2011/04/17)

45. New: There is now an operator* for the multiplication of a SymmetricTensor<2,dim> and a Tensor<1,dim>.
(Wolfgang Bangerth, 2011/04/12)

46. Fixed: Added some instantiations to make KellyErrorEstimator and SolutionTransfer work in codimension one. Fixed some dim in spacedim.
(Luca Heltai, 2011/04/11)

47. Fixed: Added some instantiations to make anisotropic refinement work in codimension one.
(Luca Heltai, 2011/03/31)

48. Fixed: Corrections in the creation of the face and subface interpolation matrices in the class FE_Nedelec.
(Markus Bürg, 2011/03/17)

49. Fixed: In step-21, the inner iteration would sometimes not converge for very coarse meshes because of numerical roundoff. This is now fixed by allowing more than rhs.size() CG iterations if the number of degrees of freedom is very small.
(Jichao Yin, Wolfgang Bangerth, 2011/04/06)

50. New: There is now a new function ConditionalOStream::get_stream().
(Wolfgang Bangerth, 2011/03/09)

51. Fixed: FESystem::get_unit_face_support_points would refuse to return anything if one of the base elements did not have support points. This condition has been relaxed: it now only doesn't return anything if this base element has no support points and also has degrees of freedom on the face.
(Wolfgang Bangerth, 2011/03/07)

52. Fixed: Objects of type FE_Nothing could be generated with multiple vector components by passing an argument to the constructor. Yet, the FE_Nothing::get_name() function always just returned the string FE_Nothing<dim>() independently of the number of components. This is now fixed.
(Wolfgang Bangerth, 2011/03/07)

53. Fixed: PETScWrappers:MPI:SparseMatrix and apply_boundary_values() produced an error in debug mode about non-existant SparsityPattern entries. Reason: clear_rows() also eliminated the whole row in the PETSc-internal SparsityPattern, which resulted in an error in the next assembly process.
(Timo Heister, 2011/02/23)

54. Fixed: It wasn't possible to use the FE_Nothing element inside an FESystem object and hand the result over to an FEValues object. This is now fixed.
(Wolfgang Bangerth, 2011/02/18)

55. New: There is now a function DataOutBase::write_visit_record that does the equivalent for VisIt that DataOutBase::write_pvtu_record does for ParaView: generate a file that contains a list of all other VTK or VTU files of which the current parallel simulation consists.
(Wolfgang Bangerth, 2011/02/16)

56. New: There is now a function TrilinosWrappers::VectorBase::minimal_value.
(Wolfgang Bangerth, 2011/02/16)

57. Fixed: TableBase::operator= could not be compiled if the type of the elements of the table was bool. This is now fixed.
(Wolfgang Bangerth, 2011/02/16)

58. Improved: The GridGenerator::hyper_shell function generated meshes in 3d that are valid but of poor quality upon refinement. There is now an additional option to generate a coarse mesh of 96 cells that has a much better quality.
(Wolfgang Bangerth, 2011/02/12)

59. Fixed: There are systems where the libz library is installed but the zlib.h header file is not available. Since the latter condition was not tested, this would result in compiler errors. This is now fixed.
(Wolfgang Bangerth, 2011/02/09)

60. Fixed: Prolongation and restriction matrices were not computed at all for elements of type FE_DGQ if dim<spacedim. Consequently, consumers of this information, such as the SolutionTransfer class or the DoFCellAccess::set_dof_values_by_interpolation function did not work either and simply returned zero results. This is now fixed.
(M. Sebastian Pauletti, Wolfgang Bangerth, 2011/02/09)

61. Fixed: When refining a mesh with codimension one, edges were refined using the same manifold description as adjacent cells, but this ignored that a boundary indicator might have been purposefully set for edges that are truly at the boundary of the mesh. For such edges, the boundary indicator is now honored.
(M. Sebastian Pauletti, Wolfgang Bangerth, 2011/02/09)

62. Fixed: The functions VectorTools::compute_mean_value and VectorTools::integrate_difference now also work for distributed triangulations of type parallel::distributed::Triangulation.
(Wolfgang Bangerth, 2011/02/07)

63. Changed: If the libz library was detected during library configuration, the function DataOutBase::write_vtu now writes data in compressed format, saving a good fraction of disk space (80-90% for big output files).
(Wolfgang Bangerth, 2011/01/28)

64. New: Trilinos and PETSc vectors now have a function has_ghost_elements().
(Timo Heister, 2011/01/26)

65. Changed: The TrilinosWrappers::MPI::BlockVector::compress function now takes an argument (with a default value) in exactly the same way as the TrilinosWrappers::MPI::Vector::compress function already did.
(Wolfgang Bangerth, 2011/01/21)

66. Fixed: When calling DataOut::build_patches with a mapping, requesting more than one subdivision, and when dim<spacedim, then some cells were not properly mapped. This is now fixed.
(Wolfgang Bangerth, 2011/01/18)

67. New: Restructured the internals of PETScWrappers::Precondition* to allow a PETSc PC object to exist without a solver. New: Use Precondition*::vmult() to apply the preconditioner once. Preconditioners now have a default constructor and an initialize() function and are no longer initialized in the solver call, but in the constructor or initialize().
(Timo Heister, 2011/01/17)

68. Fixed: Boundary conditions in the step-23 tutorial program are now applied correctly. Matrix columns get eliminated with the used method and introduce some contribution to the right hand side coming from inhomogeneous boundary values. The old implementation did not reset the matrix columns before applying new boundary values.
(Martin Stoll, Martin Kronbichler, 2011/01/14)

69. Extended: base/tensor.h has an additional collection of contractions between three tensors (ie. contract3). This can be useful for writing matrix/vector assembly in a more compact form than before.
(Toby D. Young, 2011/01/12)


text:
# estes saturn 1b

### Help Support The Rocketry Forum:

#### lw_hughes

##### Active Member
I see one of these on Ebay, seems these have been pretty sought after for years. Im puzzled why estes doesnt reproduce some kits for which there is obviously high demand. This and the shuttle?

#### sodmeister

##### Well-Known Member
Hmmmmm.....yah ,you tell me.There are a wack of cool scale kits that many would give a left onion for !

Wish I had a time machine ,Id buy multiple kits of the ones I want (and there would be many)

Paul

#### GlennW

##### Well-Known Member
Fellas, the problem is this: There would be plenty of demand from guys like us, the thing is, there are not enough guys like us out there, i.e. people who would go for a true "builder's kit." The easy to build and ready to fly stuff is what the masses will buy. For Estes to justify the costs of tooling, molds etc, they would have to sell a lot more than they're going to sell, or price it way too high. Just not feasible I'm afraid, but I'm with you on the sentiment, as I sit here casting an admiring glance at my Estes Space shuttle, Mercury Atlas, and LTV Scout....

Glenn

#### stantonjtroy

##### Well-Known Member
Sad but true. Fortunately we have companys like Semroc and Appogee.

Fellas, the problem is this: There would be plenty of demand from guys like us, the thing is, there are not enough guys like us out there, i.e. people who would go for a true "builder's kit." The easy to build and ready to fly stuff is what the masses will buy. For Estes to justify the costs of tooling, molds etc, they would have to sell a lot more than they're going to sell, or price it way too high. Just not feasible I'm afraid, but I'm with you on the sentiment, as I sit here casting an admiring glance at my Estes Space shuttle, Mercury Atlas, and LTV Scout....

Glenn

#### NAR29996

##### Well-Known Member
Still waiting impatiently for a 1:100 Saturn 1B.

#### sodmeister

##### Well-Known Member
Market demands ,why make it if it does not sell...too bad ,but very true.

Thats why i`m getting into cloning

BB

#### Zack Lau

##### Well-Known Member
If I recall correctly they lost a lot of molds in a fire. Molds for injection molded plastic is still quite expensive to make.

While injection molded parts are cheap to manufacture once you have the molds--it is rarely practical to store a large inventory of parts. You have a similar situation with books--many titles are closed out at discount to avoid having to pay inventory taxes.

#### dlazarus6660

##### Well-Known Member
Cloning is the way to go like sodmeister said. I have a Saturn 1B kit by Kosroc from Damon Kostron. I got one of the last ones he produced.
Kosroc has been out of rocketry for almost ten years now.
So now I clone most of my rockets and get most of my supplies from a local rocketry dealer and all my info from JimZ's and YORF plans.

#### DeWain

##### Well-Known Member
TRF Supporter
Still waiting impatiently for a 1:100 Saturn 1B.
Both Semroc and Estes *may* introduce a 1/100 scale Saturn 1B this year. Estes did have one in the works, but it is not clear if they will commercialize it (there was a rumor of a 1/70th scale kit that never did see the light of day). Estes was recently sold to Hobbico, which may or may not result in more "builders" kits. The sale may (or may not) delay planned new releases.

Semroc does have serious plans for a 1/100 scale Saturn 1B, but it is not definite. If Estes come out with one, Semroc may not want to. I am very glad that Semroc produces builders kits and classic clones for people like us, no matter how few we may be.

I am definitely planning on buying a 1/100 Saturn IB. I was going to clone one, but now I will wait to see if a kit becomes available.


text:
Write a config.yml, write a CalculiX case input file, and run an adapted CalculiX executable.

## Layout of the YAML configuration file

The layout of the YAML configuration file, which should be named config.yml (default name), is explained by means of an example for an FSI simulation:

participants:

Calculix:
interfaces:
- nodes-mesh: Calculix_Mesh
patch: interface
write-data: [DisplacementDeltas]

precice-config-file: ../precice-config.xml

The adapter allows to use several participants in one simulation (e.g. several instances of Calculix if several solid objects are taken into account). The name of the participant “Calculix” must match the specification of the participant on the command line when running the executable of “CCX” with the adapter being used (this is described later). Also, the name must be the same as the one used in the preCICE configuration file precice-config.xml.
One participant may have several FSI interfaces. Note that each interface specification starts with a dash.
For FSI simulations the mesh type of an interface is always “nodes-mesh”, i.e. the mesh is defined node-wise, not element-wise. The name of this mesh, “Calculix_Mesh”, must match the mesh name given in the preCICE configuration file.
For defining which nodes of the CalculiX domain belong to the FSI interface, a node set needs to be defined in the CalculiX input files. The name of this node set must match the name of the patch (here: “interface”).
In the current FSI example, the adapter reads forces from preCICE and feeds displacement deltas (not absolute displacements, but the change of the displacements relative to the last time step) to preCICE. This is defined with the keywords “read-data” and “write-data”, respectively. The names (here: “Forces” and “DisplacementDeltas”) again need to match the specifications in the preCICE configuration file. In the current example, the coupled fluid solver expects displacement deltas instead of displacements. However, the adapter is capable of writing either type. Just use “write-data: [Displacements]” for absolute displacements rather than relative changes being transferred in each time step. Valid readData keywords in CalculiX are:

* Forces
* Displacements
* Temperature
* Heat-Flux
* Sink-Temperature
* Heat-Transfer-Coefficient

Valid writeData keywords are:

* Forces
* Displacements
* DisplacementDeltas
* Temperature
* Heat-Flux
* Sink-Temperature
* Heat-Transfer-Coefficient

From CalculiX version 2.15, additional writeData keywords are available:

* Positions
* Velocities

Note that the square brackets imply that several read- and write-data types can be used on a single interface. This is not needed for FSI simulations (but for CHT simulations). Lastly, the “precice-config-file” needs to be identified including its location. In this example, the file is called precice-config.xml and is located one directory above the folder, in which the YAML configuration file lies.

## CalculiX case input file

CalculiX is designed to be compatible with the Abaqus file format. Here is an example of a CalculiX input file:

*INCLUDE, INPUT=all.msh
*INCLUDE, INPUT=fix1.nam
*INCLUDE, INPUT=fix2.nam
*INCLUDE, INPUT=fix3.nam
*INCLUDE, INPUT=interface.nam
*MATERIAL, Name=EL
*ELASTIC
100000000, 0.3
*DENSITY
10000.0
*SOLID SECTION, Elset=Eall, Material=EL
*STEP, NLGEOM, INC=1000000
*DYNAMIC
0.01, 5.0
*BOUNDARY
Nfix1, 3, 3, 0
Nfix2, 1, 1, 0
Nfix2, 3, 3, 0
Nfix3, 1, 3, 0
Ninterface, 1, 0.0
Ninterface, 2, 0.0
Ninterface, 3, 0.0
*NODE FILE
U
*EL FILE
S, E
*END STEP

The adapter internally uses the CalculiX data format for point forces to apply the FSI forces at the coupling interface. This data structure is only initialized for those nodes, which are loaded at the beginning of a CalculiX analysis step via the input file. Thus, it is necessary to load all nodes of the node set, which defines the FSI interface in CalculiX (referring to the above example, the nodes of set “interface” (Note that in CalculiX a node set always begins with an “N” followed by the actual name of the set, which is here “interface”.) are loaded via the “CLOAD” keyword.), in each spatial direction. However, the values of these initial forces can (and should) be chosen to zero, such that the simulation result is not affected.

CalculiX CCX offers both a geometrically linear as well as a geometrically non-linear solver. Both are coupled via the adapter. The keyword “NLGEOM” (as shown in the example) needs to be included in the CalculiX case input file in order to select the geometrically non-linear solver. It is also automatically triggered if material non-linearities are included in the analysis. In case the keyword “NLGEOM” does not appear in the CalculiX case input file and the chosen materials are linear, the geometrically linear CalculiX solver is used. In any case, for FSI simulations via preCICE the keyword “DYNAMIC” (enabling a dynamic computation) must appear in the CalculiX input file.

More input files that you may find in the CalculiX tutorial cases:

• <name>.inp: The main case configuration file. Through this, several other files are included.
• <name>.msh: The mesh file.
• <name>.flm: Films
• <name>.nam: Names, e.g. indices of boundary nodes
• <name>.sur: Surfaces
• <name>.dfl: DFlux

## Running the adapted calculiX executable

Running the adapted executable is pretty similar to running the original CalculiX CCX solver. The syntax is as follows:

ccx_preCICE -i [CalculiX input file] -precice-participant [participant name]

For example:

ccx_preCICE -i flap -precice-participant Calculix

The input file for this example would be flap.inp. Note that the suffix “.inp” needs to be omitted on the command line. The flag “-precice-participant” triggers the usage of the preCICE adapter. If the flag is not used, the original unmodified solver of CCX is executed. Therefore, the new executable “ccx_preCICE” can be used both for coupled preCICE simulations and CalculiX-only runs. Note that as mentioned above, the participant name used on the command line must match the name given in the YAML configuration file and the preCICE configuration file.

### Supported elements

The preCICE CalculiX adapter supports solid and shell elements. It can been used with both linear and quadratic tetrahedral (C3D4 and C3D10) and hexahedral (C3D8 and C3D20) elements. For shell elements, currently S3 and S6 tetrahedral elements are supported. There is a restriction when using nearest-projection mapping that you have to use tetrahedral elements. If a quasi 2D-3D case is set up (single element in out-of-place direction) then only linear elements are supported.

### Nearest-projection mapping

In order to use nearest-projection mapping, a few additional changes are required. The first is that the interface surface file (.sur) must be added to the Calculix input file. An example of the addition to the input file is given below

*INCLUDE, INPUT=all.msh
*INCLUDE, INPUT=fix1.nam
*INCLUDE, INPUT=fix2.nam
*INCLUDE, INPUT=fix3.nam
*INCLUDE, INPUT=interface.nam
*INCLUDE, INPUT=interface.sur
*MATERIAL, Name=EL

This surface file is generated during the mesh generation process. The second addition is to the config.yml. In order for the adapter to know that the surface mesh must be read, the line

- nodes-mesh

must be changed to

- nodes-mesh-with-connectivity

Note that an error will only occur if nodes-mesh-with-connectivity is specified without a .sur file. The calculix-adapter with nearest-projection mapping only supports tetrahedral elements (C3D4 and C3D10) as preCICE only works with surface triangles for nearest-projection mapping.


text:
# How do you find the slope and y-intercept for the line y = (1/2)x + 3?

May 7, 2018

Slope $= \frac{1}{2}$ and $y -$intercept $= 3$

#### Explanation:

The equation of a straight line in slope and y-intercept form is:
$y = m x + c$ where $m$ is the slope of the line and $c$ is the y-intercept.

In this example we have $y = \left(\frac{1}{2}\right) x + 3$

Note that this equation is already in slope and y-intercept form with $m = \frac{1}{2} \mathmr{and} c = 3$

Hence, Slope $= \frac{1}{2}$ and $y -$intercept $= 3$

We can observe this result by looking at the graph of $y$ below.

graph{(1/2)x + 3 [-6.7, 3.164, -0.65, 4.282]}


text:
# 12 + 32 + 52 + ... + (2n − 1)2 = 1 3 N ( 4 N 2 − 1 ) - Mathematics

12 + 32 + 52 + ... + (2n − 1)2 = $\frac{1}{3}n(4 n^2 - 1)$

#### Solution

Let P(n) be the given statement.
Now,

$P(n) = 1^2 + 3^2 + 5^2 + . . . + (2n - 1 )^2 = \frac{1}{3}n(4 n^2 - 1)$

$\text{ Step 1:}$

$P(1) = 1^2 = 1 = \frac{1}{3} \times 1 \times (4 - 1)$

$\text{ Hence, P(1) is true } .$

$\text{ Step 2: }$

$\text{ Let P(m) be true } .$

$\text{ Then, }$

$1^2 + 3^2 + . . . + (2m - 1 )^2 = \frac{1}{3}m(4 m^2 - 1)$

$\text{ To prove: P(m + 1) is true whenever P(m) is true } .$

$\text{ That is, }$

$1^2 + 3^2 = . . . + (2m + 1 )^2 = \frac{1}{3}(m + 1)\left\{ 4(m + 1 )^2 - 1 \right\}$

$\text{ We know that P(m) is true } .$

$\text{ Thus, we have: }$

$1^2 + 3^2 + . . . + (2m - 1 )^2 = \frac{1}{3}m(4 m^2 - 1)$

$\Rightarrow 1^2 + 3^2 + . . . + (2m - 1 )^2 + (2m + 1 )^2 = \frac{1}{3}m(4 m^2 - 1) + (2m + 1 )^2 \left[ \text{ Adding } (2m + 1 )^2 \text{ to both sides } \right]$

$\Rightarrow P(m + 1) = \frac{1}{3}\left( 4 m^3 - m + 12 m^2 + 12m + 3 \right)$

$\Rightarrow P(m + 1) = \frac{1}{3}(4 m^3 - m + 8 m^2 + 4m + 4 m^2 + 8m + 3)$

$= \frac{1}{3}(m + 1)(4 m^2 + 8m + 3)$

$= \frac{1}{3}(m + 1)(4(m + 1 )^2 - 1)$

$\text{ Thus, P(m + 1) is true } .$

$\text{ By the principle of mathematical induction, P(n) is true for all n } \in N .$

Is there an error in this question or solution?

#### APPEARS IN

RD Sharma Class 11 Mathematics Textbook
Chapter 12 Mathematical Induction
Exercise 12.2 | Q 16 | Page 27


text:
# Question cec43

Oct 24, 2017

$= 27.98 g F e$

#### Explanation:

Rewrite your compound so you can visually see how many moles you have of each element.

Iron (III) Oxide $\to F {e}_{2} {O}_{3}$

Then use basic conversion factors:

Iron has 55.845 g/(mol.
Oxygen has 15.99 g/(mol#.

There are 2 moles of Iron and 3 moles of Oxygen in Iron (III) Oxide.

We want to end up with grams of iron.

$2 \left(55.845\right) + 3 \left(15.99\right) = 159.66$

$159.66 g$ $F {e}_{2} {O}_{3}$ per mole.

$40.0 g$ $F {e}_{2} {O}_{3} \cdot \frac{1 m o l F {e}_{2} {O}_{3}}{159.66 g F {e}_{2} {O}_{3}} \cdot \frac{2 m o l F e}{1 m o l F {e}_{2} {O}_{3}} \cdot \frac{55.845 g F e}{1 m o l F e}$

$= 27.98 g F e$


text:
# Boundary value problems for heat equation with certain potentials in Lipschitz cylinders

Authors
Type
Published Article
Journal
Forum Mathematicum
Publisher
De Gruyter
Publication Date
Nov 19, 2011
Volume
26
Issue
2
Pages
377–412
Identifiers
DOI: 10.1515/form.2011.164
Source
De Gruyter
Keywords
The Dirichlet and Neumann problems of heat equation with certain potentials of the form ∂ t -Δ+V=0$\partial _t-\Delta +V=0$ in Lipschitz cylinders are studied, where V is a nonnegative potential satisfying certain conditions.


text:
# Configuration files¶

Chemfiles can be configured using TOML configuration files. By default, chemfiles will read configuration from any file named .chemfiles.toml or chemfiles.toml in the current directory or any parent directory. Data from directories higher in the filesystem will be used instead of the one lower in the filesystem. For example, with the following filesystem:

$HOME ├── .chemfiles.toml (1) └── work ├── chemfiles.toml (2) ├── test-1 │ ├── trajectory.xyz │ └── ... └── test-2 ├── .chemfiles.toml (3) ├── trajectory.nc └── ...  Running chemfiles from $HOME/ will only use the configuration file (1), running it from $HOME/work/test-1 will use the configuration file (2) first and then from (1), and running it from $HOME/work/test-2 will use configuration data from (3), then (2) and then (1).

Configuration files should be valid TOML files, and can contain various sections.

## [types]: atomic type renaming¶

The [types] section of the configuration file allow to change atomic types to make sure they match element name. For example, in a simulatiion where water molecules are named Hw-Ow-Hw, one may use this section of the input file like this:

[types]
Ow = "O"
Hw = "H"

Renaming atomic type allow to ensure that bonds will be guessed right, and that the right atomic data can be accessed.

The [types] section contains multiple key wich are the old atom type, associated with string values wich are the new atom type.

## [atoms]: Defining new atom types¶

When working with particles outside of the periodic table (for example coarse grained particles), it can be usefull to define new atom types. This can be done in the [atom] section.

[atoms.CH3]
full_name = "methyl"
mass = 15.035
charge = 0

# One can also override element data
[atoms.Zn]
charge = 1.8

# TOML also supports inline tables
[atoms]
CH4 = {mass = 16.043, charge = 0, full_name = "methane"}
Ph = {mass = 77.106, full_name = "phenyl"}

The [atoms] section contains multiple tables, one for each new atom type. These tables can contains the following key/values (all keys are optional):

• full_name (string) : the full name of the atomic type;
• mass (number) : the mass of the atomic type in atomic units;
• charge (number) : the charge of the atomic type in multiples of e;
• vdw_radius (number) : the Van der Waals radius of the atomic type in Angstrom;
• covalent_radius (number) : the covalent radius of the atomic type in Angstrom;


text:
Math Help - Help with proving properties of Tails of Series

1. Help with proving properties of Tails of Series

Hi, I have an issues with solving this problem.

Let the summation of an from n=1 to infinity be a series and let m be in the natural numbers. Show that the summation of an from n=1 to infinity converges IFF the summation of am+n from n=1 to infinity converges, and that (the summation of an from n=1 to infinity) = Sm + (the summation of am+n from n=1 to infinity converges).

I understand that this problem is basically telling you to prove the properties of the Tails of series, but I'm not sure how I would go about proving it. And sorry for all the long typing for all the summation things, I don't know how to type it out the proper way.

2. Re: Help with proving properties of Tails of Series

Well, $\displaystyle\sum_{n=1}^{\infty} a_n = \displaystyle\sum_{n=1}^{m} a_n +\displaystyle\sum_{n=1}^{\infty} a_{n+m}$

Now if $\displaystyle\sum_{n=1}^{\infty} a_n = L$ , Then $\displaystyle\sum_{n=1}^{m} a_n +\displaystyle\sum_{n=1}^{\infty} a_{n+m} = L$.
Since $\displaystyle\sum_{n=1}^{\m} a_n = k$ where k is a finite number(you are just adding up a finite number of terms so you get a finite number).
$\displaystyle\sum_{n=1}^{\infty} a_{n+m} = L - K (a finite term)$. So $\displaystyle\sum_{n=1}^{\infty} a_{n+m}$ converges.

It should be pretty straightforward.

3. Re: Help with proving properties of Tails of Series

Hi thanks for responding. However, it says also to prove (the summation of an from n=1 to infinity) = Sm + (the summation of am+n from n=1 to infinity converges), which is basically what you wrote for the first line, so I feel like the answer you provided is incomplete. And sorry if this is a misguided response, but I'm still very lost in the whole field of real analysis still. so sorry and thank you.

4. Re: Help with proving properties of Tails of Series

$\displaystyle\sum_{n=1}^{m} a_n = a_1 + a_2 + ... + a_m$
$\displaystyle\sum_{n=1}^{\infty} a_{n+m} = a_{m+1} + a_{m+2} + ...$

Now i don't know how to be more clear than that, surely adding those two u get $a_1 + a_2 + .... + a_m + a_{m+1} + .... . = \displaystyle\sum_{n=1}^{\infty} a_n$

5. Re: Help with proving properties of Tails of Series

Okay, Thank you. I get it now .


text:
# Difference between revisions of "Topology of uniform convergence"

The topology on the space ${\mathcal F} ( X, Y)$ of mappings from a set $X$ into a uniform space $Y$ generated by the uniform structure on ${\mathcal F} ( X, Y)$, the base for the entourages of which are the collections of all pairs $( f, g) \in {\mathcal F} ( X, Y) \times {\mathcal F} ( X, Y)$ such that $( f ( x), g ( x)) \in v$ for all $x \in X$ and where $v$ runs through a base of entourages for $Y$. The convergence of a directed set $\{ f _ \alpha \} _ {\alpha \in A } \subset {\mathcal F} ( X, Y)$ to $f _ {0} \in {\mathcal F} ( X, Y)$ in this topology is called uniform convergence of $f _ \alpha$ to $f _ {0}$ on $X$. If $Y$ is complete, then ${\mathcal F} ( X, Y)$ is complete in the topology of uniform convergence. If $X$ is a topological space and ${\mathcal C} ( X, Y)$ is the set of all mappings from $X$ into $Y$ that are continuous, then ${\mathcal C} ( X, Y)$ is closed in ${\mathcal F} ( X, Y)$ in the topology of uniform convergence; in particular, the limit $f _ {0}$ of a uniformly-convergent sequence $f _ {n}$ of continuous mappings on $X$ is a continuous mapping on $X$.

#### References

 [1] N. Bourbaki, "General topology" , Elements of mathematics , Springer (1988) (Translated from French) [2] J.L. Kelley, "General topology" , Springer (1975)

If $Y$ is a metric space with the uniform structure defined by the metric, then a basis for the open sets in ${\mathcal F} ( X, Y)$ is formed by the sets $U ( f, \epsilon ) = \{ {g } : {\rho ( f( x), g( x) ) < \epsilon \textrm{ for all } x \in X } \}$, and one finds the notion of uniform convergence in the form it is often encountered in e.g. analysis.


text:
Question

# Find the side of a cube whose volume is $$\dfrac{24389}{216}m^{3}$$.

Solution

## Given, volume of a cuboidal box $$V=\dfrac{24389}{216}m^3$$.We know, volume of a cube $$V=a^3$$.Then, $$a^3=\dfrac{24389}{216}$$$$\implies$$ $$a^3=(\dfrac{29}{6})^3$$$$\implies$$ $$a=\dfrac{29}{6}m$$.Therefore, side of the cube $$a=\dfrac{29}{6}m$$.Mathematics

Suggest Corrections

0

Similar questions
View More

People also searched for
View More


text:
Blog

Top NeurIPS 2020 picks by GoodAI team

December 16, 2020

The thirty-fourth conference on Neural Information Processing Systems took place last week. Unlike last year where many of us traveled to Vancouver in person, this year GoodAI, just like everyone else could only attend virtually. With nearly 2000 research articles and countless workshops and tutorials there was an overwhelming amount of exciting new ideas, fascinating research, deep discussions and virtual socializing done in the seven days over which the conference spanned.

In this post we outline some of the highlights of the conference, in particular from the point of view of research that in one form or another either relates to research on our Badger architecture or is relevant to our present endeavours. This is only a snippet of some of the relevant work that was presented at NeurIPS, and by no means is exhaustive. If you are also excited about any of the topics mentioned below, have experience in the related field or you believe you could contribute to it and would like to discuss with any of our team members, please contact us at info@goodai.com.

• Continual learning
• Meta-learning
• Open-endedness
• Modular (meta-)learning
• Optimization in modular systems
• Meta-learning of lifelong learning
• Self-referential learning
• Learned optimizers
• Multi-agent reinforcement learning
• Graph neural networks
• Learned communications

Most related methods

The following list of methods are very closely related to our Badger architecture. It is exciting to see other research groups attempting to pave way for and approaching the building of more general decision making system that are based on modularity, meta-learning and learned learning algorithms. Method [1] is described in more detail below.

1. Meta-Learning Backpropagation And Improving It. Louis Kirsch, Jürgen Schmidhuber. [paper] [supplementary] [poster]
2. MPLP: Learning a Message Passing Learning Protocol. Ettore Randazzo, Eyvind Niklasson, Alexander Mordvintsev. [paper] [supplementary] [poster]
3. Learning not to learn: Nature versus nurture in silico. Robert T Lange, Henning Sprekeler. [paper] [poster]
4. Training more effective learned optimizers. Luke Metz, Niru Maheswaranathan, Ruoxi Sun, Daniel Freeman, Ben Poole, Jascha Sohl-Dickstein. [paper] [poster]
5. Related workshops
6. Related tutorials

1. Meta-learning backpropagation and improving it: General Meta Learning and Variable Sharing

The 2020 workshop on meta-learning hosted a talk on General Meta Learning. The work, described also in a paper accepted by the workshop by Kirsch and Schmidhuber, tackles meta-learning learned learning rules that generalize. There are several similarities with the Badger architecture.

Motivation and context

There are two main approaches to meta-learning. The first one is based on changing (fast) weights in the inner loop, which itself is evolved over extended periods of time in an outer loop (fast and slow weights). The other approach is based on changing RNN activations.

The first approach usually introduces new mechanisms and complexity into the architecture. The second approach, on the other hand, has limited generalization capability with respect to the total parameter count, since the number of inner-loop parameters (RNN activations) is much smaller than number of outer-loop parameters (weights).

The presented work addresses the two issues by implementing general activation-based meta-learning (thus avoiding new complexity), and introducing shared parameters to improve the generalization capability of the learned algorithm.

Model description

The Variable Shared Meta RNN, a.k.a. VS-Meta RNN, is composed of multiple small RNNs (LSTMs in fact) that are placed in a 2D grid of size $A \times B$. RNNs in this grid can communicate over connections of a fixed sparse topology. Communication is facilitated by the interaction matrix $C$ with learned shared parameters.

The model has the ability to implement meta-learning in activations. Since the parameters of VS-Meta RNNs (as well as the interaction matrix) are shared, it avoids the main problem of this type of meta-learning architectures (where the number of inner-loop parameters is smaller than the outer-loop parameters, which causes lack of generalization abilities).

The model is very flexible, since part of the RNN state can be interpreted (used) as a “neuron activation” and another part as a “weight”. The ability to implement multiplicative interactions (between states and weights) are included in the LSTM gating mechanism.

Model interpretation

There are multiple interpretations of the VS-Meta RNN. The first sub-image (a) in the figure above (from Kirsch & Schmidhuber) shows the basic structure of the method. The model can be viewed as a single Meta-RNN where some entries are shared or zero (b). Lastly (c), the VS-Meta RNN can be seen as implementing a neural network where outer-loop learned parameters determine the nature of weights and biases: how these are used in the forward computation and the learning algorithm by which those are updated. Here, neurons correspond to intermediate computation results of the interaction term which are fed back into the RNNs.

Experiments

The algorithm learned via the VS-Meta RNN approach should have the ability to implement backpropagation. There were two types of training setups that test this.

• In the “backprop-cloning” setting, the VS-Meta RNN is explicitly trained to store the $w$ and $b$ in the RNN activations, to compute the forward pass of the neural network $y = tanh(x)w + b$ and then to update the $w$ and $b$ according to the backpropagation algorithm.
• In the harder-to-train “meta-learning from scratch” setting, supervised signal to the inner parts of the network is not provided anymore. Rather, meta-learning is done from the input data and the error signal only. The CMA-ES is used for optimizing the weights in this case.

Meta-training is done either on random data or on the MNIST dataset. Generalization of the learned algorithm is then evaluated on MNIST or Fashion MNIST.

The above plots (from Kirsch & Schmidhuber) show the meta-testing loss of VS-Meta RNN that was optimized to implement backpropagation in its recurrent dynamics on random data (blue) or on MNIST (orange). Here, the learning is done purely by unrolling the LSTM. The left plot shows meta-testing on MNIST, while the plot on the right shows meta-testing on Fashion MNIST.

The second experiment (plot from Kirsch & Schmidhuber) tests the ability to learn a supervised online learning algorithm from scratch. Here, the VS-Meta RNN is meta-trained on MNIST to minimize the sum of cross-entropies over 200 data points starting from random initializations of hidden states. During meta-testing on MNIST/Fashion MNIST (the figure above) the authors plot the total accuracy computed on all previous inputs on the y axis. We can see that the VS-Meta RNN learns faster than online Backprop+Adam baseline and generalizes to out-of-distribution data (Fashion MNIST) well, while a standard Meta-RNN overfits to the in-distribution data (MNIST).

It has been shown that the VS-Meta RNN is able to learn a learning algorithm in the activations from scratch. Compared to a standard Meta-RNN, simply by incorporating the shared parameters and sparse connectivity, the VS-Meta RNN is able to learn quickly and the learned learning algorithms generalize to out-of-distribution data.

We see tight connections to the Badger architecture.

1. The reuse of RNN modules, which can be seen as corresponding to Badger experts.
2. The training by backpropagating through unrolled RNN progress.
3. The sharing of parameters to allow scaling and generalization. We are excited to see research so close and relevant to our own efforts!

2. Backpropagation-free learning: CLAPP

There has been recent interest in exploring methods that no longer rely on backpropagation. This has been reflected in this year’s conference with the beyond backpropagation workshop and papers such as GAIT-Prop, CLAPP, ZORB and Brain-prop. Works such as CLAPP and Brain-prop have commonalities in their decisions to account for the plasticity of neurons while training.

The CLAPP paper is an unsupervised learning rule that takes inspiration from Greedy Infomax from Putting an End to End to End, and Contrastive Predictive Coding methods. The result is the Contrastive Local And Predictive Plasticity approach, which is a loss method that uses positive and negative samples in a hinge-like additive loss.

The learning rule using this loss is gradient free, and makes use of recurrent predictive connections $W^{\text{pred}}$, the pre- and post-synaptic values $i, j$, and a global plasticity value $\gamma^{\tau}$ to compute updates to $W$.

The authors have found that the CLAPP method is performant on the STL-10 and LibriSpeech datasets, outperforming supervised SGD on STL-10:

All above figures are from (Grill et al. 2020).

CLAPP is just one exciting paper that deals with local learning rules at this year’s NeurIPS. We are interested in these biologically plausible methods, not because biological plausibility is a requirement for Badger, but because the mechanisms that they require lead to useful attributes. Local updates enable more parallel training, and the plasticity of neurons can alleviate forgetting in continual learning settings. We are excited to follow this thread of research and its implications for the future of the Badger architecture.

3. Learned update rules: paper highlights

NeurIPS 2020 featured several exciting examples of recent work in the area of learned update rules. Here, we will first highlight Meta-learning through Hebbian plasticity in random networks (Najarro and Risi 2020), then briefly discuss a few other very interesting works that also address the learning of Hebbian update rules.

Meta-learning Hebbian plasticity

In Meta-learning through Hebbian plasticity in random networks (Najarro and Risi 2020) the authors train agents by optimizing Hebbian plasticity parameters instead of fixed weights. Agents are randomly initialized and must adapt their weights during their lifetimes using a Hebbian ABCD rule:

$$\Delta w_{ij} = \eta_w(A_w o_i o_j + B_w o_i + C_w o_j + D_w)$$

The architecture, trained using evolution strategies, was tested in a car racing 2D environment and on a MuJoCo-like 3D locomotion task. The results were encouraging. In the locomotion task, the Hebbian agent had some success in adapting to a new morphology not seen during training. A baseline agent with fixed weights failed at this. In addition, the Hebbian agent proved resilient to weight perturbations, recovering quickly after a large part of the weights had been zeroed out.

The model presented in the paper learns different parameters and learning rate $(A,B,C,D,\eta)_w$ for each synapse. What happens if you reduce the number of parameters, sharing them between synapses? The authors told us that they have found that extensive parameter sharing is possible while maintaining good results on the tasks. More systematic investigation is needed to understand the effects of parameter sharing in this setting. We are looking forward to learning more about this.

The authors have made their code available at https://github.com/enajx/HebbianMetaLearning.

Discovering synaptic rules from observational data

A meta-learning approach to (re)discover plasticity rules that carve a desired function into a neural network (Confavreux et al. 2020) explores the possibility of discovering synaptic update rules from data describing neural and synaptic behavior. In proof-of-principle experiments, the authors succeeded in recovering Oja’s rule and a related Hebbian rule as well as a known update rule for spiking neurons. Next, they plan to apply their method to data from biological neurons.

Hebbian memory

In H-Mem: Harnessing synaptic plasticity with Hebbian Memory Networks (Limbacher and Legenstein 2020) the authors use Hebbian learning to implement associative memory. This is an interesting approach to adding medium- and long-term memory to an agent. The model is capable of one-shot memorization of associations between stimulus pairs and also performs well on the bAbI question answering data set.

Improved Hebbian learning

Finally, HebbNet: A Simplified Hebbian Learning Framework to do Biologically Plausible Learning (poster at the Beyond Backpropagation workshop) proposes simple modifications to Hebbian learning that produce dramatically improved results. An important trick is sparse updates in the outer loop: instead of adjusting the plasticity everywhere, update only the one percent of the parameters for which the magnitude of the gradient is the largest.

There are numerous potential advantages to replacing end-to-end backpropagation with local learning rules. Among them are the ability to learn without a gradient, easy parallelization, and the possibility of scaling up a system with little or no retraining, all properties we aim for in Badger. In the real world, one often has to learn from a few examples only and sometimes even, a mistake is not an option. In such cases, one needs to rely on more efficient (and more prior-laden) learning rules than the very broad and general backpropagation update rule.

4. Representation learning: BYOL and SurVAE Flows

Two new techniques for learning latent representations were presented at the conference, which may see a wide adoption in the coming years and change the way we do ML. Those two techniques are BYOL, or Bootstrap your Own Latent (Grill et al. 2020) , and SurVAE Flows (Nielsen et al. 2020). Below is an explanation for why those two techniques overcome existing limitations and thus why they may gain widespread adoption and are relevant for our research.

BYOL

Problem setting

BYOL may be the next step for contrastive learning. Since it regained interest in 2018, contrastive learning has taken over as the unsupervised learning method of choice, especially in the form of SimCLR (Chen et al. 2020), which was the baseline that everyone was trying to beat at NeurIPS 2020. The problem with contrastive learning is that you need negative examples. E.g. for each image (let’s say we have an image dataset), you need examples of images which are not in the same category. Needing negative samples is in fact three problems. From simplest to most complicated, those are:

1. It’s another annoying technical complication.
2. The training works better if the negative examples are difficult negative examples, that is, negative examples which look like the positive example but are not (the bird which has the same background as the airplane but is not a plane, the truck as a negative example to a car, etc.), but that is not an easy thing to do in practice, and what is an easy or hard negative example changes as the training progresses.
3. It can be shown (Song and Ermon 2020) that contrastive predictive coding is a lower bound on the mutual information between the latent representation of the image and the image itself. But the problem is that it is upper-bounded by $\log(m)$ where $m$ is the number of negative examples (and so ideally one would need an infinite amount of negative examples). That means that if you want to have a lot of information in the latent representation, one needs a lot of negative examples for each positive example. For example, in ImageNet, where there are thousands of possible categories, one needs thousands of negative examples for each positive example. This is not feasible in practice. So the theory tells us that with a finite number of negative examples, the quality of the representation obtained with contrastive learning will always be limited.
Method

Basically, BYOL is the Mean Teacher (Tarvainen and Valpola 2017), a semi-supervised technique, without the supervised learning signal. It proceeds as follows:

1. Take the input image and apply two different “noises” to it that shouldn’t change the label (different crops, rotations, change of colours, etc.).
2. Pass one of the images to the teacher network which will provide the target (and not have its weights modified through backpropagation) and the other to the student network (which has the same architecture as the teacher network).
3. The student network is learning through backpropagation to achieve the target latent vector given by the teacher network. This encourages latent representations which are invariant to the different noise sources applied to the input.

The question of “how are teacher network weights set” is yet to be answered. Like in Mean Teacher, the network is randomly initialized and the teacher is simply an exponential moving average of the student network.

An overview of the approach can be seen in the figure above (from the conference presentation)

Results

BYOL (red line) is almost reaching the accuracy of supervised learning (blue line) on ImageNet. This is very impressive. (Figure from the presentation).

SurVAE Flows

The goal of SurVAE Flows (Nielsen et al. 2020) is to one-up all of GANs, Variational Autoencoders (VAEs), and Normalizing Flows and be your one-pit stop solution replacing the three different solutions you needed before.

Problem setting

Each of GANs, VAEs, and Normalizing Flows have their pros and cons. Here is a little summary table of them:

Can sample data Can encode data to latent Provides high quality samples/reconstructions Latent and data sample can have different dimensions Easy to train
GANs ✔ ✔ ✔
VAEs ✔ ✔ ✔ ✔
Flows ✔ ✔ ✔ ✔

The problem with GANs is that if one starts from a sample image, there is no way to obtain its latent code $z$ because there is no encoder. GANs are also harder to train, though this problem is getting gradually less severe. On the flip side, GANs provide the best quality samples subjectively, for instance generated human faces can already look photo-realistic. The problem with VAEs is that they provide comparatively low quality (“blurry”) samples. The major problem with Normalizing Flows, which have exploded in popularity in the last two years or so, is that the dimensionality of the input has to be the same as the dimensionality of the output, so if one has a high resolution image, one has to encode it in a latent code of the same dimensionality.

Method

Every layer in a Normalizing Flow is a bijection. SurVAEs generalize flow to allow for surjections either in the encoder (which is the scenario which makes sense if you want your latent code to be a compression of your data) or the decoder but still otherwise preserves the structure of the Normalizing Flow. Furthermore, the authors put SurVAE Flows inside a theoretical framework which includes both VAEs and Normalizing Flows.

Results

The results listed above (from Nielsen et al. 2020) should be interpreted as proof-of-concept experiments showing the capabilities of the SurVAE Flows. At the moment, they don’t reach the power of GANs or WaveNet-style networks, although they can get close in some benchmarks. Note that the bolding in the results above is used to show the better of the authors’ methods, not the best of all methods.

Ideally we would want a Badger agent to be able to deal with environments which don’t necessarily provide an explicit reward function, or which doesn’t come with labeled data. How to properly do unsupervised learning is a question of importance for Badger. Both BYOL and SurVAE Flows are promising new directions in unsupervised learning.

5. Deep implicit layers

Implicit layers offer an interesting way how to formulate the learning process of
a neural network. Instead of common explicit layers in the form $y = f(x)$
an implicit form $g(x,y) = 0$ is used. There was a tutorial on this exciting topic at the conference.

• Powerful representations: compactly represent complex operations such as
solving optimization problems, integrating ODEs, etc
• Memory efficiency: no need to backpropagate through intermediate components,
via implicit function theorem

Deep Equilibrium Models

Deep Equilibrium Models (DEQ) (Bai, Kolter and Koltun 2019) represent modern deep networks using a single implicit layer while having near SOTA performance in large scale NLP and vision tasks.

Traditional deep networks applied to an input $x$ can be described as $z_{i+1} = \sigma(W_iz_i + b_i)$.

With the introduction of two constraints:

1. fixed input – input is constant during computation of NN result
2. shared weights – weights of all layers are the same

we can simplify to $z_{i+1} = \sigma(Wz_i + x)$ and apply the same function repeatedly to the hidden units. In many situations the network can be designed in such a way that it will converge to some fixed point or equilibrium point: $z^* = \sigma(Wz^* + x)$. Such model is a minimal DEQ.

This procedure can be seen in the above figure (from a tutorial on this topic).

Training of DEQs

Forward pass:

• Given $(x,y)$, compute equilibrium point $z^* = f(z^*, x, \theta)$
• Compute loss $L(z^*, y)$

Backward pass:

• Compute gradients using implicit function theorem: $\partial L(\theta) = \partial_{z^*}L(z^*, y) * T$ where $T$ is a term that can be computed directly from an automatic differentiation system and $z^*$ (detailed description) without the need of backpropagating through optimization in the forward pass.

Benefits

• Computational graph for backpropagation is reduced significantly. Instead of backpropagating through all layers or iterations of the inner-loop, using a mathematical trick we can compute the gradient just from an equilibrium point and the VJP (vector Jacobian product) computed by an automatic differentiation system.
• Workload is transfered from inner-loop inference to computation of the equilibrium point where a sophisticated optimizer can be used, e.g. Anderson Acceleration.
• Expressing a whole NN as an implicit layer brings interesting capabilities as presented in Multiscale Deep Equilibrium Models (Bai et al. 2020) – Effective simultaneous learning of image classification and semantic segmentation. CNNs for different scales coexist side by side and are driven to equilibrium simultaneously.

The above figure is from (Bai et al. 2020).

One of the key focal points of Badger architecture is finding an expert policy that can sustain learning over long horizons. In the traditional viewpoint, this requires backpropagating through very long inner loop rollouts. The work on DEQ is intriguing through its potential for significantly reducing lengths of inner loop rollouts and thus speeding up learning, or in some cases even enabling it.

6. Designing Learning Dynamics (Tutorial)

Marta Garnelo, David Balduzzi and Wojciech Czarnecki presented an overview of different principles and methods that can be used to design learning dynamics that take into account how populations of agents interact. The tutorial is divided in three different sections that explain how to design interactions between agents that produce different learning dynamics. Although the tutorial does not dive deep into technical details, it introduces the core principles and methodologies needed to understand learning from an evolutionary game theory perspective.

The dynamics of learning objectives

The first part of the tutorial focuses on showing the difference between optimization and evolution. It explains the differences between how optimization or learning algorithms behave in isolation vs how they behave when they interact with a population of agents and their environment. After a gentle introduction to game theory, it explains the main building block used to design learning dynamics for populations of agents: Pairwise interactions in zero-sum games.

The above figure is from the tutorial presentation.

A single zero-sum interaction between two players implicitly encodes a function space of objectives that allow to evaluate players in a game relative to each other instead of relying on a global fitness function. By defining a player as a basic unit of abstraction and optimizing populations instead of individuals, the objectives become population-dependent.

The dynamics of artificial evolution

This part of the tutorial is about how to design learning dynamics in evolutionary algorithms, and how these can be used to optimize populations. It explains how to use zero-sum interactions can be used to evolve a population in a multi-task setting using partial ordering and MAP-Elite, and how different dynamics can produce different agent behaviors depending on the structure of the game that is being learned. Those principles do not only allow for a lot of flexibility and scale naturally to n-agents, but they also apply when the underlying function to be optimized is unknown.

Then, the tutorial goes one step further and explains how it is possible to measure the performance of an agent with respect to the entire population in the context of ensemble models. This approach allows to easily express diversity preservation methods, and training entire populations can lead to more open ended learning regimes. Finally, this part presents an example of multi-level evolution with two phases: an outer loop that defines rewards for a given agent, so it performs well in the population, and an inner loop that optimized the reward defined by the outer loop.

The above figure is from the tutorial presentation.

The dynamics of training populations

The last part of the tutorial is focused on how to rate agents when there is no absolute measure of performance. It first explains different techniques for rating agents such as ELO rating and its extensions, and how their principles can be applied to rating populations of agents by measuring relative population performance and effective diversity.

Finally, the tutorial covers different methods for choosing opponents in a population-based training setting like Policy Space Response Oracles (PSRO) and some other variants. The basic design principles for population-based training are shown, and the effect that the different interaction dynamics have on the performance and diversity of a trained population of agents is demonstrated.

The above figure is from the tutorial presentation.