
Report Written by Ian Young
Own major project was to visualise weather data that
is of the state of NSW. The given data included many different types
of data such as land & surface data, humidity levels, wind vectors,
and temperature. The variables in the system, such as humidity and wind,
varied over time and the data was taken over 1 whole day. Each reading
was taken at hourly intervals throughout the day, to end up with 24 sets
of data.
Surface:
The surface that was given in the file 'xyz.dat' is a
2.5D surface of a 114*77 array of data points which made up the land and
sea of NSW. All of this data was kept in the one file, as for each time
step this data is constant.
Humidity:
The relative humdity levels were kept in the files 'rh.dat'
and each file held a data array of size 114*77*7. This file held all of
the humidity levels at all 7 levels for each hour. Each of the 7 levels
of readings had the all data points in-line, just at a different z component.
Although, the z compentents were not spread out evenly across the sky,
as they took readings spread out in the lower atmosphere, and closer readings
higher in the atmosphere. It turned out that the readings were taken as
shown below:

Also the values at each point were a percentage, and therefore were values between 0 and 1.
Wind Vectors
The wind vectors were held in the 'vel.dat' file, which
had an array of vectors of size 114*77*7. All the data for each time step
was kept in the single file, and had a total of 7 levels of readings equally
spaced apart. All the points on each level were common with all the other
7 layers. This gave the direction of the wind at each point and the magnitude
of the wind.
For Each Point there were an x, y and z components, but
the z component was constant for all vectors.
Temperature
The temperature at each point on the surface was held
in the file 'temp.dat'. This file was similar to the rest, by all the data
for each time step being held in the one file. The difference was that
there was only one layer of data of size 114*77. This layer was directly
related to the surface, and therefore for each point on the surface there
was a corresponding temperature for each time step.
The original files given to us included an OpenDX
network which should have loaded the files in. After some testing with
OpenDX it was found to be too difficult to attempt to continue using OpenDX,
as it would take around a week just to get used to differences between
OpenDX and AVS. Since time was shorter than anticipated we decided it would
be more practical to load all the data files into AVS and visualise, as
we already have a good understanding of AVS.
It became an obstacle to actually load the data files into AVS as we had little information on what structure of data file was, and how to load it in. The only information that was available was the field files used by OpenDX. Sadly the format used by OpenDX field files differs greatly to AVS field files. Here is a small exert from an OpenDX field file:
As you can see it is not obvious what each of the parameters mean. To convert the file, some documentation on OpenDX was required, and even then the differences between AVS and OpenDX emerged.object 1 class array type float rank 1 shape 3 items 61446
binary data file xyz.dat, 4
attribute "dep" string "positions"
#
object 2 class gridconnections counts 7 77 114
#
object 3 class array type float rank 0 items 61446
binary data file velx.dat, 2212132
attribute "dep" string "positions"
For each time step of the weather data, a separate field file had to be created, as you can only work with one time step at once. So A series of field files were created for the relative humidity, wind vectors, and also temperature. The surface only required the one field file since each time step used exactally the same surface data.
Eventually the relative humidity file had been loaded
in correctly, as you could look at each of the values and they were between
0 and 1. This showed that it was reading in the values correctly and that
the bit alignment was correct. When trying to visualise the data there
were also slight offset errors which needed to be corrected. Once the relative
humidity data had shown to be loaded in correctly, loading the rest of
the files became fairly straight forward.
Creating the Surface of NSW
The first thing to do would be create to the actual land
of NSW by using all the coordinates read from 'xyz.dat'. These points plot
a 114*77 2.5D contour of the land of NSW.
The initial surface was created by using the 'read
field' to read all the coordinates, and then feeding the field into
the 'field to mesh'. This is the initial creation of the simple
colourless land. From here the mesh is fed into 'colourize geometry'
which also takes in a colour method. The way the surface was initially
coloured was by height, but was soon changed to temperature as describe
below.
Colouring the Surface of NSW
The
next thing to do was the colouring of the surface. This was initially done
by using the height as the colour, and this seemed perfectly obvious that
this meant height. A problem arose when other people had seen a simple
animation as they had automatically assumed that a red area on the surface
meant a hot area, and blue areas meant cold.
The outcome of this problem was simply to keep with everyones in-built ideas of red being hot and blue meaning cold, by colouring by temperature. This change was fairly simple but could have easily been overlooked, and created ambiguity in out visualisation.
To make to sureface coloured by temperature requires it to vary with each time frame. As shown to the right, this required the use of an 'animate filename' module which would change file with each time unit, and therefore temperature would vary slowly modify with each frame. The temperature field is then fed into the 'colour range' and 'colourize' module, to finially apply the temperature to the surface.
The final thing to do would be to pipe the resultant image
into the 'geometry viewer' which is just out of view in the given
image.
Creating the Clouds
The
next part was to add the clouds to the visualisation. To create the
clouds required the relative humidity data to work out where the humid
areas were. All the humidity levels at each point could be used to
create a isosurface through the humidity space at a certain level.
Firstly, an 'animate filename' module was used to go through all the files which had each frame of humidity. Each frame was then read by the 'read field' module, and then each point was multiplied by 1000 to make selecting the correct level for the isosurface easier and more accurate. This created a blanket over the parts of NSW with the highest levels of humidity, in turn creating artificial clouds.
To make each frame look a little more realistic, a certain degree of transperancy to the clouds. This was done by changing the transperancy setting in the 'geometry viewer'.
Creating the Wind Arrows
To
create the arrows to represent the wind, require the use of the 'hedgehog'
module. This module takes in a field, and at each 3 dimensional data
point , it places an arrow there using the vector data from the wind data
files. Again this data varies over time and therfore loads in a
new field file for each frame.
If we were to view absolutely every data vector for a single frame on the screen, You would not be able to see anything else apart from thousands of arrows. To solve this, a 'downsize' was used, and therefore we had a total of 19*13*2 arrows on the screen. The arrows no longer cluttered up the screen, and stopped distracting from all the other information in the visualisation.
The arrows are also coloured by the magnitude of the vector. Therefore the arrows actually use two methods to bring across the idea of wind stregth. This was done as the colourless arrows did not give the idea of strong current in different regions, and it only seemed to show the direction of the wind
The Resultant Network
Here is to final network all put together, and you can
see how it all works together to create the visualisation.
