**Reading**: Read
appropriate parts of the VB help files. Your focus this week should
be on learning VB in the context of your project.

**VB graphical space coordinate system**: If you just want to crunch numbers then you can do
quite a bit using VBA in Excel. However, visualization can be
very helpful in providing understanding and so you need to depict
the results in some graphical space. Hence we will focus on how
to do this.

The default scale is in twips, with 567 twips = 1 cm. A number of other possible scale modes are provided and are set using the ScaleMode = k code, where k specifies the type of code. See documentation for a description of possibilities. ScaleMode = 6 uses millimeters and ScaleMode = 7 uses centimeters. you can define your own vertical and horizontal scales (but better to keep it simple for this exercise).

The origin is at the upper left corner of the form. Positive x is to the right. Positive y is down! Note the latter! Luckily it is easier for geoscientists to think of thinks increasing as you go down (e.g. temperature and pressure).

**VB graphics command: **these
are some commands likely to be useful**.**

**Cls**- clears the form. This is useful for starting over.**Pset (x, y)**- this sets that twip or point in coordinate system to a color. The default color is black. The following sets the point to red -**Pset (x, y), vbRed**. vbRed and vbBlue are color constants built into VB. See documentation for further discussion of how point colors can be set.**Line (x1,y1)-(x2,y2)**- this is the basic syntax for drawing a line as defined by endpoints. You can set the color in a similar mode to above. A variant on this syntax can draw a rectangle.**Circle (x,y), r**- This draws a circle centered on x, y and with a radius R.**DrawWidth = k**- This specifies the line thickness for graphics output. The default value is 1.**Printform**- this does just what it sounds like.

**Timer object**:
This is very useful for doing incremental graphics at the speed
of the viewer, i.e. for creating animations. For modeling processes
with a visualization component it particularly useful. Associated
code is performed at specified event intervals. Units are milliseconds
and the interval is specified in the Properties window. It can
be initiated and stopped by setting the abled or disabled property
anywhere in the program.

Turn the AutoRedraw function of your form on in the Properties window.

Suggestion: Create a folder on a disk and save all your work consistently there. Things can get screwed up easily if you are shuffling VB files around.

**Example: modeling gravity profiles over
a buried sphere**. gz in milligals =
.02794 * density contrast in gm/cc * radius in meters cubed *
depth in meters all divided by (x^2+z^2)^1.5, where x is horizontal
distance from center of sphere in meters (formula from Lillie,
1999, Whole Earth Geophysics, Prentice Hall)

- designing the GUI interface.
- placing objects on the form.
- writing the code
- testing, debugging and compiling.

What you need to hand in:

- A highly documented copy of the code. This should explain fully what the program is doing. This will be a major part of your grade.
- A disc with a compiled copy of the program on it.
- An evaluation of the results from a geoscience perspective.

Possible geologic processes to model:

__Modeling of radioactive decay__. The model should model an assemblage of atoms of
an unstable isotope that is undergoing decay. The user should
be able to change the decay rate. It would be helpful if some
sort of plot of the decay process also developed as the visualization
was running.

__Modeling of a fracture intersection pattern__. A propagating fracture may truncate (stop propagating)
when it encounters another fracture. The model should randomly
seed a fracture at a point and then propagate it until it encounters
another fracture. There can be many variants on this program depending
on various rules you devise for fracture propagation directions.
The Point(x,y) function that returns the color value of a point
is very useful here. Note that this is also a fragmentation behavior.

__Modeling of a styolite__.
Start out with a straight line (a long linear array) and then
using the random number generator dissolve an element on either
one side or the other as you go down the line. Have the program
go through at least several hundred reiterations to see how the
line evolves in its shape. Markers on either side should also
move showing the dissolution with time.

__Modeling of a dendritic growth with time__. Start with a point and add points to it with time
within a 180 degree range with some sort of branching rule built
in. Since you are restricted to 180 degrees there will be a gradient
to the growth and you won't get the problem of a tip growing back
on itself. Given the pixel mode their will be 5 possible ways
for the tip to move. One possible branching rule could be that
if the tip is at > a certain distance from any other tip it
branches, otherwise it doesn't. The tip positions could be stored
as x,y values in an array.

__Slip events on a linear array:__ Have a linear array that represents the shear stress
values of elements. Using a loop a shear stress increment can
be added along the the array. When the the shear stress exceeds
a certain value that specific elements slips and transmits some
portion of its shear stress to its neighbor element. If that element
slips then it transmits more shear stress down the line. Of course
if all the initial shear stress values are the same then it will
always propagate all the way down the line, but for all sorts
of reasons shear stress can be expected to vary. Therefore seed
the array with random variations in initial shear stress values.
The random variation should be several times the increment added,
but less than the critical shear stress necessary for slip. The
goal is to produce slip events of different sizes (with different
number of elements that move).

__Daisyworld temperature evolution__: This one is well written up in the literature. Imagine
a surface populated by black and white daisies. The daisies, through
their albedo control the local temperature. As more black daisies
grow the temperature would increase, but such a temperature increase
favors white daisies, which would cool the system. The opposite
feedback would occur. Treat it as a probability distribution of
survival over a temperature range. For example at 40 degrees black
daisies may have a 100% chance of surviving, at 60 degrees a 50
% chance of surviving, and at 80 degrees a 0% chance of surviving.
Tie this with a temperature effect. For example at 100% black
daisies the temperature increases 1 degree per increment of time,
and with 100% white daisies it decreases 1 degree per increment
of time. Start with 50-50% distribution of daisies and set a temperature
this is not in stability with and watch how the pattern and the
temperature evolves.

Copyright by Harmon D. Maher Jr.. This material may be used for non-profit educational purposes if proper attribution is given. Otherwise please contact Harmon D. Maher Jr.