22.106 Neutron Interactions and Applications (Spring 2005) Lecture 12 (3/31/05)

advertisement
22.106 Neutron Interactions and Applications (Spring 2005)
Lecture 12 (3/31/05)
Particle Simulation Methods II: Basic Elements of Molecular Dynamics (MD)
_______________________________________________________________________
References -S. Yip, "Atomistic Modeling of Liquids", in Encyclopedia of Advanced Materials, D.
Bloor et al., eds. (Pergamon, 1994) and references therein. Reprint of this is available in
the Lecture Notes section as HO.ency.pdf.
M. P. Allen and D. J. Tildesley, Computer Simulation of Liquids (Clarendon, Oxford,
________________________________________________________________________
1987).
In this lecture we continue the discussion of the development of discrete particle
simulation methods as a tool for the investigation of dynamical distributions in manyparticle systems. We have seen in the first lecture on particle simulation (Lecture 5) that
Monte Carlo is a statistical method for particle tracking. Using the Metropolis procedure
one is able to sample a canonical distribution by moving a particle in a random direction
and using the potential energy before and after the move as a measure of acceptance. We
now discuss another method, a deterministic one, for particle tracking.
Another way of discussing particle tracking is to think of transport phenomena in a
system of particles. This is the point of view adopted in 22.103 (Microscopic Theory of
Transport) that was offered in Fall 2003. Transport processes are described in various
ways, through transport coefficients, such as the diffusion, viscosity, and thermal
conductivity, time correlation functions and phase-space distribution functions. For
theoretical studies one can start with the Boltzmann transport equation for dilute gases, or
the neutron transport equation as we have done in 22.106. If one is interested in transport
in condensed matter, such as liquids and solids, the problem becomes much more
difficult. Trying to extend the Boltzmann equation to liquids leads to very complicated
analysis involving correlated binary collisions and triple collisions. The mathematics
become so heavy that physical insights become obscure. Alternatively, one can turn to
particle simulation methods of Monte Carlo (MC) and Molecular Dynamics (MD) and
follow particle trajectories. MD is very suited to the study of transport or dynamical
processes, whereas MC also can be used, although not in as natural a manner as MD. For
a comparison of these two methods, see the reference given above.
The point to emphasize before getting into the details is that the basic information we
seek to obtain and use to build up our physical understanding lies in the particle
trajectories {R(t )} . Simulation provides the means to directly generate this data, using
only the interatomic potential as the input. Simulation can be used for practically any
system, whether it is a gas, liquid or solid. There are other significant features of
simulation which are discussed below. We leave it to the individual student to decide
how much details he wants to learn about simulation. We expect that some will want to
know more than others. What every student should take away is the appreciation of what
1
simulation can do, and some examples of what it has done already. We think it is safe to
predict that the role of simulation in understanding particle distributions will only become
more and more important.
Basic Molecular Dynamics (MD)
This is intended to be a concise, self-contained discussion of the basic elements of
molecular dynamics (MD) simulation. It can be treated as a read-me primer for the
newcomer as well as a summary of essentials for the initiated student who is not yet an
expert. We will develop the subject according to the following list of topics.
1.
2.
3.
4.
5.
6.
Defining the MD Method
The Pair Potential
Bookkeeping Matters
Properties Which Make MD Unique
Hands-On MD
Understanding Crystals and Liquids - An Example of an Application
1. Defining the MD Method
A working defintion of MD is: The process by which one generates the atomic
trajectories of a system of N particles by direct numerical integration of Newton's
equations of motion (with appropriate specification of an interatomic potential and
suitable initial and boundary conditions).
For an even shorter definition, one can leave out the words in the parenthesis and
consider them as detailed qualifications. What is meant by the few words in this
statement? Consider a simulation model (system) to be N particles contained in a region
of volume V at temperature T, shown schematically in Fig. 1.
Fig.1. A model for molecular dynamics simulation, a system of N particles, each having
an instantaneous position r j (t ) and velocity v j (t ) , with all the particles interact with each
other through a potential energy U. Simulation means letting the system evolve in time
and recording the particle positions and velocities at small incremental time steps. How
this is done is explained in this lecture.
The positions of the N particles are specified by a set of N vectors,
{r (t)} = (r 1 (t ), r 2 (t ),..., r N (t)) , with r j (t ) being the position of particle j at time t.
Knowledge of {r (t)} at various time instants allows us to follow the particle trajectories
2
as they move around. Our model system of particles has a certain energy E which is the
sum of kinetic and potential energies of the particles, E = K + U, where K is the sum of
individual kinetic energies
K=
1 N 2
m∑ v j
2 j=1
(12-1)
and U is a prescribed interatomic potential mentioned above, U ( r 1 , r 2 ,..., r N ) . In general U
depends on the positions of all the particles in a complicated fashion. We will soon
introduce a simplifying approximation, the assumption of two-body or pairwise
interaction, which makes this most important quantity much easier to handle.
To find the atomic trajectories in our model we need to solve the equations that specify
the particle positions; this is just what the Newton's equations of motion do, as everyone
knows F = ma from simple mechanics. While we are all familiar with the equations of
motion of a pendulum or a rolling body, the equations of motion for our N-particle model
is more complicated because the equations for different particles are all coupled to each
other through the potential energy U. We can see this readily when we write out the
equations explicitly,
m
d2r j
dt 2
= −∇ r j U ({r}) ,
j = 1, ..., N
(12-2)
That the motion of one particle depends on the positions of the other particles is not
surprising, since the force acting on one particle changes whenever one of its neighbors
moves. Eq.(12-2) looks deceptively simple, but it is as complicated as the famous Nbody problem which we cannot solve exactly when N is greater than 2. It is a system of
coupled second-order, non-linear ordinary differential equations. On the other hand, (122) can be solved numerically, which is what one does in molecular dynamics simulation.
When we say integrate (12-2) to obtain the atomic trajectories, we have in mind dividing
a time interval of interest into many small segments, each being a time step of size ∆t .
Given the system conditions at some initial time to, {r (to )} , integration means we advance
the system successively by increments of ∆t ,
{r (to )} → {r (to + ∆t)} → {r(to + 2∆t)} → ...{r (to + N t ∆t )}
(12-3)
where Nt is the number of time steps making up the interval of integration.
How do we numerically integrate (12-2) for a given U? A simple way is to write a
Taylor series expansion,
1
r j (to + ∆t) = r j (to ) + v j (t )∆t + a j (t )(∆t ) 2 + ...
2
(12-4)
and a similar expansion for r j (to − ∆t) . Adding the two expansions gives
3
r j (to + ∆t) = − r j (to − ∆t) + 2r j (to ) + a j (to )(∆t) 2 + ...
(12-5)
Notice that the left-hand side is what we want, namely, the position of particle j at the
next time step ∆t , whereas all the terms on the right-hand side are quantities evaluated at
time to . We already know the positions at to and the time step before, so to use (12-5)
we need the acceleration of particle j at time to. For this we can make use of (12-2) and
substitute F ({r (t )}) / m in place of the acceleration, where F is just the right-hand side of
(12-2). Thus through Eq.(12-5) one performs the integration of (12-2) in successive time
increments, following the system evolution in discrete time steps. Although there are
more elaborate ways of doing the integration, this is basic idea of generating the atomic
trajectories, the essence of MD. The particular procedure we have described is the Verlet
central difference method. In the MD code given to the class, a more accurate method
called the Gear Predictor-Corrector is used. Higher accuracy of integration allows one to
take a larger value of ∆t , desirable because one can cover a longer time interval. On the
other hand, the tradeoff is that one needs more memory relative to the simpler method.
j
o
The time integrator is at the heart of MD simulation, with the sequence of positions and
velocities (trajectories) being the raw output. A typical flow-chart for an MD code would
look something like the following.
(a) → (b) → (c) → (d) → (e) → (f) → (g)
a = set particle positions
b = assign particle velocities
c = calculate force on each particle
d = move particles by timestep ∆ t
e = save current positions and velocities
f = if reach preset no. of timesteps, stop, otherwise go back to (c)
g = analyze data and print results
2. The Pair Potential
To make the simulation tractable, it is common to assume the interatomic potential U can
be represented as the sum of two-body interactions,
U ( r 1 ,..., r N ) ≅
1
2
∑ V (r )
ij
(12-6)
i≠ j
where rij is the separation distance between particles i and j. V is the pairwise interaction;
it is a central force potential, being a function only of the separation distance between the
two particles, rij = r i − r j . A very common two-body interaction energy used in
atomistic simulations, known as the Lennard-Jones potential, is
V (r ) = 4ε ⎡⎣(σ / r)12 − (σ / r) 6 ⎦⎤
(12-7)
4
where ε and σ are parameters of the potential. Like all pair potentials, this interaction
energy rises sharply (with inverse power of 12) at close interatomic separations, has a
minimum, and decays to zero at large separations. See Fig. 2 which also shows the
behavior of the interatomic force,
F (r ) = −
dV ( r )
dr
(12-8)
which is repulsive at short separations and attractive at large separations. We can
understand the repulsion as arising from the overlap of the electron clouds, while the
attraction is due to the interaction between the induced dipole in each atom. The value of
12 for the first exponent in V(r) has no special significance, as the repulsive term could
just as well be replaced by an exponential. The second exponent results from quantum
mechanical calculations (the so-called London dispersion force) and therefore is not
arbitrary. Regardless of whether one uses (12-7) or some other interaction potentials, a
short-range repulsion is necessary to give the system a certain size or volume (density),
without which the particles will collapse onto each other. A longer range attraction is
also necessary for the cohesion of the system, without which the particles will not stay
together as they must in all condensed states of matter. Both are necessary for modeling
the physical properties of solids and liquids which we know from everyday experience.
Fig. 2. The Lennard-Jones interatomic potential V(r). The potential vanishes at r = σ
and has a depth equal to ε . Also shown is the corresponding force F(r) between the two
particles (dashed curve) which vanishes at ro. At separations less or greater than ro the
force is repulsive or attractive respectively. Arrow at nn and 2nn indicate typical
separation distances of nearest and second nearest neighbors in a solid.
3. Bookkeeping Matters
Our simulation system is typically a cubical cell in which particles are placed either in a
very regular manner, as in modeling a crystal lattice, or in some random manner, as in
modeling a gas or liquid. The number of particles in the simulation cell is quite small.
For the homework assignment only certain discrete values, 32, 108, 256, 500, 864, should
be specified. These come about because the class code (which we call hailecode) is
designed for a face-centered cubic lattice which has 4 atoms in each primitive cell. Thus,
if our cube has s cells along each side, then the number of particles in the cube will be
5
4s3. The above numbers then correspond to cubes with 2, 3, 4, 5, and 6 cells along each
side respectively.
Once we choose the number of particles we want to simulate, the next step is to choose
what system density we want to study. Choosing the density is equivalent to choosing
the system volume since density n = N/V, where N is the number of particles and V is the
volume. Hailecode uses dimensionless reduced units. The reduced density DR has
typical values around 0.9 - 1.2 for solids, and 0.6 - 0.85 for liquids. For reduced
temperature TR we recommend values of 0.4 - 0.8 for solids, and 0.8 - 1.3 for liquids.
Notice that assigning particle velocities in (b) above is tantamount to setting the system
temperature.
For simulation of bulk systems (no free surfaces) it is conventional to use the periodic
boundary condition (pbc). This means the cubical cell is surrounded by 26 identical
image cells. For every particle in the simulation cell, there corresponds an image particle
in each image cell. The 26 image particles move in exactly the same manner as the actual
particle, so if the actual particle should happen to move out of the simulation, the image
particle in the image cell opposite to the exit side will move in (and becomes the actual
particle, or the particle in the simulation cell) just as the original particle moves out. The
net effect is with pbc particles cannot be lost (destroyed) or gained (created). In other
words, the particle number is conserved, and if the simulation cell volume is not allowed
to change, the system density remains constant.
Since in the pair potential approximation, the particles interact two at a time, a procedure
is needed to decide which pair to consider among the pairs between actual particles and
between actual and image particles. The minimum image convention is a procedure
where one takes the nearest neighbor to an actual particle, irregardless of whether this
neighbor is an actual particle or an image particle. Another approximation which is
useful to keep the computations to a manageable level is to introduce a force cutoff
distance beyond which particle pairs simply do not see each other (see the force curve in
Fig. 2). In order not to have a particle interact with its own image, it is necessary to
ensure that the cutoff distance is less than half of the simulation cell dimension.
Another bookkeeping device often used in MD simulation is a Neighbor List which
keeps track of who are the nearest, second nearest, ... neighbors of each particle. This is
to save time from checking every particle in the system every time a force calculation is
made. The List can be used for several time steps before updating. Each update is
expensive since it involves NxN operations for an N-particle system. In low-temperature
solids where the particles do not move very much, it is possible to do an entire simulation
without or with only a few updating, whereas in simulation of liquids, updating every 5
or 10 steps is quite common. For further discussions of bookkeeping matters, the student
should see the MD Primer of J. M. Haile (1980).
6
4. Properties Which Make MD Unique
There is a great deal that can be said about why MD is such a useful simulation
technique. Perhaps the most important statement is that in this method (consider classical
MD for the moment, as opposed quantum MD) one follows the atomic motions according
to the principles of classical mechanics as formulated by Newton and Hamilton. Because
of this, the results are physically as meaningful as the potential U that is used. One does
not have to apologize for any approximation in treating the N-body problem. Whatever
mechanical, thermodynamic, and statistical mechanical properties that a system of N
particles should have, they are all still present in the simulation data. Of course how one
extracts these properties from the output of the simulation – the atomic trajectories –
determines how useful is the simulation. Before any conclusions can be drawn, one
needs to consider how the various properties are to be obtained from the simulation data.
We can regard MD simulation as an ‘atomic video’ of the particle motion (one which we
can display as a movie). While there is a great deal of realistic details in the motions
themselves, how to extract the information in a scientifically meaningful way is up to the
viewer. It is to be expected that an experienced viewer can get much more useful
information than an inexperienced one!
The above comments aside, we list here a number of basic reasons why MD simulation is
so useful (or unique). These are meant to guide the thinking of the student and encourage
the student to discover and appreciate the many interesting and thought-provoking
aspects of this technique on your own.
(a) Unified study of all physical properties. Using MD one can obtain thermodynamic,
structural, mechanical, dynamic and transport properties of a system of particles
which can be a solid, liquid, or gas. One can even study chemical properties and
reactions which are more difficult and will require using quantum MD.
(b) Several hundred particles are sufficient to simulate bulk matter. While this is not
always true, it is rather surprising that one can get quite accurate thermodynamic
properties such as equation of state in this way. This is an example that the law of
large numbers takes over quickly when one can average over several hundred degrees
of freedom.
(c) Direct link between potential model and physical properties. This is really useful
from the standpoint of fundamental understanding of physical matter. It is also very
relevant to the structure-property correlation paradigm in materials science.
(d) Complete control over input, initial and boundary conditions. T
his is what gives
physical insight into complex system behavior. This is also what makes simulation
so useful when combined with experiment and theory.
(e) Detailed atomic trajectories. This is what one can get from MD, or other atomistic
simulation techniques, that experiment often cannot provide. This point alone makes
it compelling for the experimentalist to have access to simulation.
7
We should not leave this discussion without reminding ourselves that there are significant
limitations to MD. The two most important ones are:
(a) Need for sufficiently realistic interatomic potential functions U. This is a matter of
what we really know fundamentally about the chemical binding of the system we
want to study. Progress is being made in quantum and solid-state chemistry, and
condensed-matter physics; these advances will make MD more and more useful in
understanding and predicting the properties and behavior of physical systems.
(b) Computational-capability constraints. No computers will ever be big enough and fast
enough. On the other hand, things will keep on improving as far as we can tell. Current
limits on how big and how long are a billion atoms and about a microsecond in brute
force simulation.
5
H
ands-On MD
‘Talk is cheap’ when it comes to modeling and simulation. What is not so easy is to ‘just
do it’. In this spirit we want everyone to get your hands on an MD simulation code and
just play with it.
Here are the instructions for getting the code, for which we suggest the name hailecode,
into your own directory.
1. In the MIT server directory, type
add 22.53
cd /mit/22.53/fall00/md_tutorial/tutor
add matlab
matlab -ver 6.5.1 nojvm &
When presented with a Menu, choose #1 tutorial if this is your first time. Choose #3 when you are ready to download the Code (which will be named hailecode) Go back to your own directory and type cd ~/22.53
g77 –O3 moldyn_sim.f –o hailecode
Now hailecode should be loaded into your directory.
To run the Code, type
./hailecode
8
then follow the prompt to specify 5 input parameters
When simulation is done, you can plot the results by returning to the Matlab terminal and
type
cd ~/22.53
plotdata
You will get three figures plotted out on the screen.
2. To make future runs from the MIT server directory, type
cd ~/22.53
g77 –O3 moldyn_sim.f –o hailecode
./hailecode
Follow prompt, when run is finished, you can go to plot by typing
Add matlab
Matlab -ver 6.5.1 nojvm &
Wait for Matlab window, type at the prompt >>
Cd ~/22.53
Plotdata
Get three figures on screen as before.
There exists a very useful writeup – A Primer on the Computer Simulation of Atomic
Fluids by Molecular Dynamics, J. M. Haile (1980), which is effectively a User’s
Manual for the code. Any student who would like to see a copy should contact the
instructor.
5. Understanding Crystals and Liquids – An Example of an MD Application
There are many ways one can study the structure and dynamics of solids and liquids at
the atomistic level using MD. In fact, this is one of main reasons why MD has become so
well respected for what it can tell about the distribution of atoms and molecules in
various states of matter, and the way they move about in response to thermal excitations
or external stress such as pressure. We will encounter many examples of this kind of
discussion, for now we will focus on two basic properties of matter, structure and motion
at the atomic level. Fig. 3 shows the simulated trajectories of molecules as they move
around in a typical solid, liquid, and gas. The most striking features that one can readily
observe are that the atomic structure is highly ordered in the solid (crystalline) state, quite
disordered (random but with some degree of local packing) in the liquid state, and very
random in the gas state. The corresponding particle motions are small-amplitude
vibrations about the lattice site, diffusive movements over a local region, and long free
9
flights interrupted by a collision every now and then. The question we now ask is how to
quantify this information in a way that it can be used to better understand the many
physical properties of systems of atoms and molecules. In other words, if we can
generate the data, how do we analyze them?
Fig. 3. Atomic trajectories of a two-dimensional crystal, liquid, and gas simulated by
molecular dynamics [J. A. Barker and D. Henderson, Scientific American, Nov. 1981].
Imagine we are doing a simulation with the hailecode where we specify the following
input:
NP = number of particles
NEQ = number of timesteps for equilibration
MAXKB = number of timesteps for the actual simulation run
TR = reduced temperature
DR = reduced density
The output of hailecode for this set of input parameters can be plotted in Matlab by
following the above instructions. What you will get are three plots. Fig. 4 is a composite
of three graphs showing the variation of pressure, potential energy, and temperature with
time as the simulation evolves. This information is useful to make sure that the system is
well equilibrated and that nothing strange is happening during the entire simulation.
These graphs are like the meters on the wall of a reactor control room, showing how the
pressure and temperature of the reactor are varying instantaneously during operation.
Although important, they do not tell us anything about what is going on with the atoms
inside the reactor. That is, they are macroscopic properties which are not sensitive to the
details at the microscopic level. The only way you can tell whether you are dealing with
a solid, liquid or gas is to examine the values of the equilibrium pressure, volume, and
10
temperature, and use them to locate the system in the phase diagram. We will not do this
here. Fig. 4, however, is useful for seeing that the system has reached equilibrium, as
indicated by the convergence of the properties to steady-state values. The transients give
us a feeling for how quickly the initial perturbations are damped out by the molecules
interacting with each other.
Fig. 4. Time variation of system pressure, energy, and temperature in an MD simulation
of a solid. The initial behavior are transients which decay in time as the system reaches
equilibrium.
Fig. 5. Results of MD simulation similar to Fig. 4 except the system is now in a liquid
state. Note the longer transients and the slower convergence to equilibrium.
The Radial Distribution Function
This quantity is defined as
g (r ) = ρ (r ) / ρ
(12-9)
where ρ (r )3 is the local number density. For the hailecode, DR is the dimensionless
density ρσ . By the way, the dimensionless temperature TR is just k BT / ε , where kB is
11
the Boltzmann's constant. Recall that σ , ε are the two parameters of the Lennard-Jones
potential model. Hailecode calculates g(r) according to the expression
g (r ) =
< N ( r ± ∆r / 2) >
Ω(r ± ∆r / 2) ρ
(12-10)
where the numerator is the average number of particles in a spherical shell of radius r and
thickness ∆r , with the shell centered on one of the particles (any particle is as good as
any other) in the system, and Ω in the denominator is the volume of this shell. A simple
way to express the physical meaning of g(r) is: g(r )4π r 2 dr = number of particles lying
in a spherical shell of radius r and thickness dr given that a particle is at the origin.
What should g(r) look like if one plots it as a function of r? Two typical distributions are
shown in Fig. 6. The function g(r) shows several peaks, which can be very sharp or quite
broad depending on the state of the system. Physically a peak indicates a particularly
favored separation distance for the neighbors to a given particle. The first peak
corresponds to the nearest neighbor shell, the second peak to the second nearest neighbor
shell, etc. Thus, g(r) is the function that reveals the atomic structure of the system being
simulated.
Fig. 6. Radial distribution functions simulated by molecular dynamics for a crystal (a)
and a liquid (b) using the Lennard-Jones potential.
In the case of the output from hailecode we can even predict where the peaks should be
located in the case of a low-temperature crystal. This is because the atoms are put into
the simulation cell in the positions of a face-centered cubic lattice. It is known that in the
primitive unit cell of fcc, one has 4 atoms in the cell. Sitting on any of the particles one
can look around the surroundings in the lattice and count the number of nearest neighbor,
second nearest neighbor, third neighbor, …, and measure the distances between the
central particle and its various neighbors. The numbers should be 12, 6, 24, and 12 for
the first four neighbors. Thus the four peaks in Fig. 6(a) correspond to these four
neighbor rings. If one were to plot 2π r 2 g ( r ) instead of g(r), the areas under the four peaks
will also match the number of neighbors. Looking now at the g(r) for a liquid, Fig. 6(b),
we still see a prominent nearest neighbor peak which is considerably broadened by
thermal motion at the higher temperature. We also see a broad second-neighbor at
distances where the third and fourth neighbor peaks occur in the solid. In changing from
solid to liquid, it appears that the second nearest peak has dissolved (implication is
separation from the central particle at this distance is no longer favored in the liquid
environment), while the third and fourth neighbor peaks merge to form what is now the
second neighbor peak in the liquid.
12
2
The Mean Square Displacement function < ∆r >
This quantity, which we have already encountered in the lecture on random walk, is
defined as
< ∆r >=
2
1
∑ [r (t) − r (0)]
N
i
2
i
(12-11)
i
Here r (t ) is the position of particle i at time t, so the square of the vector difference is the
distance that particle i has moved during the time interval t. If we average over all the
particles this then gives the mean square distance that the particles have moved on
average during time t.
i
By definition < ∆r > must start at zero at t = 0 and grows like t2 with a coefficient
all the atoms
proportional to k BT / m , where m is the particle mass. Recall from Fig. 3 that
2
in a solid are bound to some local position. So for a solid we expect < ∆r > to grow to a
characteristic value, which should be determined by how tightly are the atoms being to
their lattice site, and fluctuate weakly about this level. In contrast, if the system were a
liquid, then we expect all the atoms to be able to diffuse continuously
through the liquid,
2
with t,
as in Brownian motion. Diffusive motion manifest in < ∆r > as a linear variation
2
which is the signature of classical diffusion. These simple features of < ∆r > can be
quite helpful when it comes to interpreting the simulation results.
2
Fig. 7. Mean square displacement in a liquid (a) and a crsytal (b) as simulated by
molecular dynamics. The temperature and density conditions are those in Fig. 6.
In closing, we have given some hints here as to how one can learn about the structure and
dynamics of systems of particles by doing MD simulation. We hope the students will
explore further on your own. You should play around with using different values for the
input parameters. Consider the following suggestions.
NP = 32, 108, 256, 500, 864. Any one of these values will work. Obviously a small
system will run faster which means you get the results back right away if you use a 32particle simulation cell as opposed to an 864-particle cell. The latter generally takes less
than 5 minutes according to my experience.
NEQ = 1000. Use this default value. We can talk about doing something different later.
13
MAXKB = 2000 for a short run, 10000 for a longish run.
TR = 0.4 - 0.7 for crystal, 0.9 - 1.2 for liquid
DR = 0.9 - 1.2 for crystal, 0.6 - 0.9 for liquid
You should keep in mind that using more particles and running to longer times will give
you smoother and higher-quality results. The cost is that the simulation will take longer.
If you pick combinations of TR and DR values which are not in the part of the phase
diagram that is clearly solid or liquid, then the system may have a hard time deciding
which phase it should go into. Then you can get results that are not as clear-cut as the
behavior we have discussed. There is much that you will learn by exploring on your
own. Have fun and let us know how you are doing!
14
Download