|
@@ -1,76 +1,80 @@
|
|
|
<h2>DESCRIPTION</h2>
|
|
|
|
|
|
-The module <em>r3.out.netcdf</em> exports a 3D raster map as NetCDF file.
|
|
|
+The module <em>r3.out.netcdf</em> exports a 3D raster map as netCDF file.
|
|
|
Maps are valid 3D raster maps in the current mapset search path. The
|
|
|
-<em>output</em> parameter is the name of a NetCDF file that will be
|
|
|
+<em>output</em> parameter is the name of a netCDF file that will be
|
|
|
written in the current working directory. The module is sensitive
|
|
|
to mapset region settings (set with <em>g.region</em>) and the vertical unit settings
|
|
|
of the 3D raster map. The vertical unit can be set with <a href="r3.support.html">r3.support</a>.
|
|
|
|
|
|
<h2>Note</h2>
|
|
|
|
|
|
-The resulting NetCDF file will have time as third dimension in case a temporal
|
|
|
+The resulting netCDF file will have time as third dimension in case a temporal
|
|
|
vertical unit is specified for the input map, otherwise the third dimension is assumed as spatial.
|
|
|
If the 3D raster map has a time stamp with absolute time, the start time will be
|
|
|
-used as starting point for the NetCDF time series. If the absolute time stamp is missing
|
|
|
+used as starting point for the netCDF time series. If the absolute time stamp is missing
|
|
|
the date "Jan. 01. 1900 00:00:00" will be used as default. In case of relative time stamp no start time
|
|
|
-is set in the NetCDF file. The number of depths of the 3D raster map are the number of time slices
|
|
|
-in the NetCDF file. You can use <em>t.rast.to.rast3</em> to convert a
|
|
|
+is set in the netCDF file. The number of depths of the 3D raster map are the number of time slices
|
|
|
+in the netCDF file. You can use <em>t.rast.to.rast3</em> to convert a
|
|
|
space time raster dataset into a 3D raster map representing a space time voxel
|
|
|
-cube, then export the raster time series as NetCDF file.
|
|
|
+cube, then export the raster time series as netCDF file.
|
|
|
<p>
|
|
|
-Spatial coordinates are exported as cell centered coordinates. The projection is stored
|
|
|
-in the metadata as <em>crs</em> attributes using a WKT parameter string.
|
|
|
-The export of projection parameters is suppressed when the XY-projection is set.
|
|
|
-The NetCDF projection metadata storage follows the spatial_ref GDAL/NetCDF suggestion
|
|
|
+Spatial coordinates are exported as cell centered coordinates. The projection can be optionally stored
|
|
|
+in the metadata as <em>crs</em> attributes .
|
|
|
+The netCDF projection metadata storage follows the spatial_ref GDAL/netCDF suggestion
|
|
|
<a href="http://www.gdal.org/frmt_netcdf.html">here</a>
|
|
|
-and the NetCDF CF 1.6 convention
|
|
|
+and the netCDF CF 1.6 convention
|
|
|
<a href="http://cf-pcmdi.llnl.gov/documents/cf-conventions/1.6/cf-conventions.html#coordinate-system">here</a>
|
|
|
using WKT projection information. Additional a PROJ.4 string is
|
|
|
stored in the <em>crs</em> attribute section.
|
|
|
+The export of projection parameters is suppressed when the XY-projection is set.
|
|
|
+<p>
|
|
|
+The range of the 3D raster map is set in the netCDF output file. Optionally a the netCDF missing value and
|
|
|
+_FillValue can be set using the <em>null</em> option. As default the netCDF floating point _FillValues are used
|
|
|
+to fill empty cell.
|
|
|
<p>
|
|
|
-The NetCDF library must be installed on the system and activated at configuration time to compile this module.
|
|
|
+The netCDF library must be installed on the system and activated at configuration time to compile this module.
|
|
|
|
|
|
<h2>Examples</h2>
|
|
|
|
|
|
-<h3>Using lat/lon projection without vertical unit specification</h3>
|
|
|
-
|
|
|
-<p>Lets create a 3D raster map without the specification of a vertical unit</p>
|
|
|
-
|
|
|
<div class="code"><pre>
|
|
|
-g.region s=-90 n=90 w=-180 e=180 b=0 t=50 res=10 res3=2 -p3
|
|
|
-r3.mapcalc expr="volume_double = double(col() + row() + depth())"
|
|
|
-r3.info
|
|
|
+g.region s=-90 n=90 w=-180 e=180 b=0 t=5 res=10 res3=10 tbres=1 -p3
|
|
|
+
|
|
|
+#####################################################################
|
|
|
+# We create a simple volume map with floating point values
|
|
|
+#####################################################################
|
|
|
|
|
|
+r3.mapcalc --o expr="volume_float = float(col() + row() + depth())"
|
|
|
+r3.info volume_float
|
|
|
+----------------------------------------------------------------------------+
|
|
|
- | Layer: volume_double Date: Wed May 16 20:08:22 2012 |
|
|
|
+ | Layer: volume_float Date: Thu Jun 14 08:40:56 2012 |
|
|
|
| Mapset: PERMANENT Login of Creator: soeren |
|
|
|
| Location: TestLL |
|
|
|
| DataBase: /1/soeren/grassdata |
|
|
|
- | Title: volume_double |
|
|
|
+ | Title: volume_float |
|
|
|
| Units: none |
|
|
|
| Vertical unit: units |
|
|
|
| Timestamp: none |
|
|
|
|----------------------------------------------------------------------------|
|
|
|
| |
|
|
|
| Type of Map: 3d cell Number of Categories: 0 |
|
|
|
- | Data Type: DCELL |
|
|
|
- | Rows: 90 |
|
|
|
- | Columns: 180 |
|
|
|
- | Depths: 25 |
|
|
|
- | Total Cells: 405000 |
|
|
|
- | Total size: 2835864 Bytes |
|
|
|
- | Number of tiles: 108 |
|
|
|
- | Mean tile size: 26258 Bytes |
|
|
|
- | Tile size in memory: 32400 Bytes |
|
|
|
- | Number of tiles in x, y and z: 6, 6, 3 |
|
|
|
- | Dimension of a tile in x, y, z: 30, 15, 9 |
|
|
|
+ | Data Type: FCELL |
|
|
|
+ | Rows: 18 |
|
|
|
+ | Columns: 36 |
|
|
|
+ | Depths: 5 |
|
|
|
+ | Total Cells: 3240 |
|
|
|
+ | Total size: 10114 Bytes |
|
|
|
+ | Number of tiles: 1 |
|
|
|
+ | Mean tile size: 10114 Bytes |
|
|
|
+ | Tile size in memory: 12960 Bytes |
|
|
|
+ | Number of tiles in x, y and z: 1, 1, 1 |
|
|
|
+ | Dimension of a tile in x, y, z: 36, 18, 5 |
|
|
|
| |
|
|
|
| Projection: Latitude-Longitude (zone 0) |
|
|
|
- | N: 90N S: 90S Res: 2 |
|
|
|
- | E: 180E W: 180W Res: 2 |
|
|
|
- | T: 50 B: 0 Res: 2 |
|
|
|
- | Range of data: min = 3 max = 295 |
|
|
|
+ | N: 90N S: 90S Res: 10 |
|
|
|
+ | E: 180E W: 180W Res: 10 |
|
|
|
+ | T: 5 B: 0 Res: 1 |
|
|
|
+ | Range of data: min = 3 max = 59 |
|
|
|
| |
|
|
|
| Data Source: |
|
|
|
| |
|
|
@@ -80,147 +84,171 @@ r3.info
|
|
|
| generated by r3.mapcalc |
|
|
|
| |
|
|
|
| Comments: |
|
|
|
- | r3.mapcalc expression="volume_double = double(col() + row() + depth(\ |
|
|
|
- | ))" |
|
|
|
+ | r3.mapcalc expression="volume_float = float(col() + row() + depth())" |
|
|
|
| |
|
|
|
+----------------------------------------------------------------------------+
|
|
|
|
|
|
-</pre></div>
|
|
|
-<p>Export the map and show the NetCDF header</P>
|
|
|
-
|
|
|
-<div class="code"><pre>
|
|
|
-r3.out.netcdf input=volume_double output=test_double.nc
|
|
|
-ncdump -h test_double.nc
|
|
|
+#####################################################################
|
|
|
+# We use the netCDF ncdump tool to have a look at the header
|
|
|
+# and coordinates of the exported netCDF file
|
|
|
+#####################################################################
|
|
|
|
|
|
-netcdf test_double {
|
|
|
+r3.out.netcdf --o input=volume_float output=test_float.nc
|
|
|
+ncdump -c test_float.nc
|
|
|
+
|
|
|
+netcdf test_float {
|
|
|
dimensions:
|
|
|
- longitude = 180 ;
|
|
|
- latitude = 90 ;
|
|
|
- z = 25 ;
|
|
|
+ longitude = 36 ;
|
|
|
+ latitude = 18 ;
|
|
|
+ z = 5 ;
|
|
|
variables:
|
|
|
- char crs ;
|
|
|
- crs:crs_wkt = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ;
|
|
|
- crs:spatial_ref = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ;
|
|
|
- crs:crs_proj4 = " +proj=longlat +no_defs +a=6378137 +rf=298.257223563 +towgs84=0.000,0.000,0.000" ;
|
|
|
- float longitude(longitude) ;
|
|
|
- longitude:units = "degrees_east" ;
|
|
|
- longitude:long_name = "Longitude values" ;
|
|
|
- longitude:standard_name = "longitude" ;
|
|
|
- longitude:axis = "X" ;
|
|
|
- float latitude(latitude) ;
|
|
|
- latitude:units = "degrees_north" ;
|
|
|
- latitude:long_name = "Latitude values" ;
|
|
|
- latitude:standard_name = "latitude" ;
|
|
|
- latitude:axis = "Y" ;
|
|
|
- float z(z) ;
|
|
|
- z:units = "meter" ;
|
|
|
- z:long_name = "z coordinate of projection" ;
|
|
|
- z:standard_name = "projection_z_coordinate" ;
|
|
|
- z:positive = "up" ;
|
|
|
- z:axis = "Z" ;
|
|
|
- double volume_double(z, latitude, longitude) ;
|
|
|
- volume_double:grid_mapping = "crs" ;
|
|
|
+ float longitude(longitude) ;
|
|
|
+ longitude:units = "degrees_east" ;
|
|
|
+ longitude:long_name = "Longitude values" ;
|
|
|
+ longitude:standard_name = "longitude" ;
|
|
|
+ longitude:axis = "X" ;
|
|
|
+ float latitude(latitude) ;
|
|
|
+ latitude:units = "degrees_north" ;
|
|
|
+ latitude:long_name = "Latitude values" ;
|
|
|
+ latitude:standard_name = "latitude" ;
|
|
|
+ latitude:axis = "Y" ;
|
|
|
+ float z(z) ;
|
|
|
+ z:units = "meter" ;
|
|
|
+ z:long_name = "z coordinate of projection" ;
|
|
|
+ z:standard_name = "projection_z_coordinate" ;
|
|
|
+ z:positive = "up" ;
|
|
|
+ z:axis = "Z" ;
|
|
|
+ float volume_float(z, latitude, longitude) ;
|
|
|
+ volume_float:valid_min = 3.f ;
|
|
|
+ volume_float:valid_max = 59.f ;
|
|
|
|
|
|
// global attributes:
|
|
|
- :Conventions = "CF-1.5" ;
|
|
|
- :history = "GRASS GIS 7 NetCDF export of r3.out.netcdf" ;
|
|
|
+ :Conventions = "CF-1.5" ;
|
|
|
+ :history = "GRASS GIS 7 netCDF export of r3.out.netcdf" ;
|
|
|
+data:
|
|
|
+
|
|
|
+ longitude = -175, -165, -155, -145, -135, -125, -115, -105, -95, -85, -75,
|
|
|
+ -65, -55, -45, -35, -25, -15, -5, 5, 15, 25, 35, 45, 55, 65, 75, 85, 95,
|
|
|
+ 105, 115, 125, 135, 145, 155, 165, 175 ;
|
|
|
+
|
|
|
+ latitude = 85, 75, 65, 55, 45, 35, 25, 15, 5, -5, -15, -25, -35, -45, -55,
|
|
|
+ -65, -75, -85 ;
|
|
|
+
|
|
|
+ z = 0.5, 1.5, 2.5, 3.5, 4.5 ;
|
|
|
}
|
|
|
-</pre></div>
|
|
|
|
|
|
-<p>Now we create a 3D raster map with a temporal vertical unit</p>
|
|
|
+#####################################################################
|
|
|
+# Exporting the projection specific settings and a null value
|
|
|
+#####################################################################
|
|
|
|
|
|
-<div class="code"><pre>
|
|
|
-g.region s=-90 n=90 w=-180 e=180 b=0 t=50 res=10 res3=2 -p3
|
|
|
-r3.mapcalc expr="volume_double = double(col() + row() + depth())"
|
|
|
-r3.timestamp map=volume_time_double date='1 Jan 2001'
|
|
|
-r3.support map=volume_time_double vunit="days"
|
|
|
-r3.info
|
|
|
+r3.out.netcdf --o -p null=-1 input=volume_float output=test_float.nc
|
|
|
+ncdump -c test_float.nc
|
|
|
|
|
|
- +----------------------------------------------------------------------------+
|
|
|
- | Layer: volume_time_double Date: Wed May 16 20:26:28 2012 |
|
|
|
- | Mapset: PERMANENT Login of Creator: soeren |
|
|
|
- | Location: TestLL |
|
|
|
- | DataBase: /1/soeren/grassdata |
|
|
|
- | Title: volume_time_double |
|
|
|
- | Units: none |
|
|
|
- | Vertical unit: days |
|
|
|
- | Timestamp: 1 Jan 2001 |
|
|
|
- |----------------------------------------------------------------------------|
|
|
|
- | |
|
|
|
- | Type of Map: 3d cell Number of Categories: 0 |
|
|
|
- | Data Type: DCELL |
|
|
|
- | Rows: 90 |
|
|
|
- | Columns: 180 |
|
|
|
- | Depths: 25 |
|
|
|
- | Total Cells: 405000 |
|
|
|
- | Total size: 2835864 Bytes |
|
|
|
- | Number of tiles: 108 |
|
|
|
- | Mean tile size: 26258 Bytes |
|
|
|
- | Tile size in memory: 32400 Bytes |
|
|
|
- | Number of tiles in x, y and z: 6, 6, 3 |
|
|
|
- | Dimension of a tile in x, y, z: 30, 15, 9 |
|
|
|
- | |
|
|
|
- | Projection: Latitude-Longitude (zone 0) |
|
|
|
- | N: 90N S: 90S Res: 2 |
|
|
|
- | E: 180E W: 180W Res: 2 |
|
|
|
- | T: 50 B: 0 Res: 2 |
|
|
|
- | Range of data: min = 3 max = 295 |
|
|
|
- | |
|
|
|
- | Data Source: |
|
|
|
- | |
|
|
|
- | |
|
|
|
- | |
|
|
|
- | Data Description: |
|
|
|
- | generated by r3.mapcalc |
|
|
|
- | |
|
|
|
- | Comments: |
|
|
|
- | r3.mapcalc expression="volume_time_double = double(col() + row() + d\ |
|
|
|
- | epth())" |
|
|
|
- | |
|
|
|
- +----------------------------------------------------------------------------+
|
|
|
+netcdf test_float {
|
|
|
+dimensions:
|
|
|
+ longitude = 36 ;
|
|
|
+ latitude = 18 ;
|
|
|
+ z = 5 ;
|
|
|
+variables:
|
|
|
+ char crs ;
|
|
|
+ crs:crs_wkt = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ;
|
|
|
+ crs:spatial_ref = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ;
|
|
|
+ crs:crs_proj4 = " +proj=longlat +no_defs +a=6378137 +rf=298.257223563 +towgs84=0.000,0.000,0.000" ;
|
|
|
+ float longitude(longitude) ;
|
|
|
+ longitude:units = "degrees_east" ;
|
|
|
+ longitude:long_name = "Longitude values" ;
|
|
|
+ longitude:standard_name = "longitude" ;
|
|
|
+ longitude:axis = "X" ;
|
|
|
+ float latitude(latitude) ;
|
|
|
+ latitude:units = "degrees_north" ;
|
|
|
+ latitude:long_name = "Latitude values" ;
|
|
|
+ latitude:standard_name = "latitude" ;
|
|
|
+ latitude:axis = "Y" ;
|
|
|
+ float z(z) ;
|
|
|
+ z:units = "meter" ;
|
|
|
+ z:long_name = "z coordinate of projection" ;
|
|
|
+ z:standard_name = "projection_z_coordinate" ;
|
|
|
+ z:positive = "up" ;
|
|
|
+ z:axis = "Z" ;
|
|
|
+ float volume_float(z, latitude, longitude) ;
|
|
|
+ volume_float:valid_min = 3.f ;
|
|
|
+ volume_float:valid_max = 59.f ;
|
|
|
+ volume_float:missing_value = -1.f ;
|
|
|
+ volume_float:_FillValue = -1.f ;
|
|
|
+ volume_float:grid_mapping = "crs" ;
|
|
|
|
|
|
-</pre></div>
|
|
|
-<p>Export the map and show the NetCDF header</P>
|
|
|
+// global attributes:
|
|
|
+ :Conventions = "CF-1.5" ;
|
|
|
+ :history = "GRASS GIS 7 netCDF export of r3.out.netcdf" ;
|
|
|
+data:
|
|
|
|
|
|
-<p>NetCDF header of an exported 3D raster map with vertical temporal unit in a Lat/Lon projection:</P>
|
|
|
+ longitude = -175, -165, -155, -145, -135, -125, -115, -105, -95, -85, -75,
|
|
|
+ -65, -55, -45, -35, -25, -15, -5, 5, 15, 25, 35, 45, 55, 65, 75, 85, 95,
|
|
|
+ 105, 115, 125, 135, 145, 155, 165, 175 ;
|
|
|
|
|
|
-<div class="code"><pre>
|
|
|
-r3.out.netcdf --o input=volume_time_double output=test_time_double.nc
|
|
|
-ncdump -h test_time_double.nc
|
|
|
+ latitude = 85, 75, 65, 55, 45, 35, 25, 15, 5, -5, -15, -25, -35, -45, -55,
|
|
|
+ -65, -75, -85 ;
|
|
|
+
|
|
|
+ z = 0.5, 1.5, 2.5, 3.5, 4.5 ;
|
|
|
+}
|
|
|
|
|
|
-netcdf test_time_double {
|
|
|
+#####################################################################
|
|
|
+# Assigning time as vertical unit and setting an absolute time stamp
|
|
|
+#####################################################################
|
|
|
+
|
|
|
+r3.timestamp map=volume_float date='1 Jan 2001/5 Jan 2001'
|
|
|
+r3.support map=volume_float vunit="days"
|
|
|
+r3.out.netcdf --o -p null=-1 input=volume_float output=test_float.nc
|
|
|
+ncdump -c test_float.nc
|
|
|
+
|
|
|
+netcdf test_float {
|
|
|
dimensions:
|
|
|
- longitude = 180 ;
|
|
|
- latitude = 90 ;
|
|
|
- time = 25 ;
|
|
|
+ longitude = 36 ;
|
|
|
+ latitude = 18 ;
|
|
|
+ time = 5 ;
|
|
|
variables:
|
|
|
- char crs ;
|
|
|
- crs:crs_wkt = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ;
|
|
|
- crs:spatial_ref = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ;
|
|
|
- crs:crs_proj4 = " +proj=longlat +no_defs +a=6378137 +rf=298.257223563 +towgs84=0.000,0.000,0.000" ;
|
|
|
- float longitude(longitude) ;
|
|
|
- longitude:units = "degrees_east" ;
|
|
|
- longitude:long_name = "Longitude values" ;
|
|
|
- longitude:standard_name = "longitude" ;
|
|
|
- longitude:axis = "X" ;
|
|
|
- float latitude(latitude) ;
|
|
|
- latitude:units = "degrees_north" ;
|
|
|
- latitude:long_name = "Latitude values" ;
|
|
|
- latitude:standard_name = "latitude" ;
|
|
|
- latitude:axis = "Y" ;
|
|
|
- int time(time) ;
|
|
|
- time:units = "days since 2001-01-01 00:00:00" ;
|
|
|
- time:long_name = "Time in days" ;
|
|
|
- time:calendar = "gregorian" ;
|
|
|
- time:positive = "up" ;
|
|
|
- time:axis = "T" ;
|
|
|
- double volume_time_double(time, latitude, longitude) ;
|
|
|
- volume_time_double:grid_mapping = "crs" ;
|
|
|
+ char crs ;
|
|
|
+ crs:crs_wkt = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ;
|
|
|
+ crs:spatial_ref = "GEOGCS[\"wgs84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]" ;
|
|
|
+ crs:crs_proj4 = " +proj=longlat +no_defs +a=6378137 +rf=298.257223563 +towgs84=0.000,0.000,0.000" ;
|
|
|
+ float longitude(longitude) ;
|
|
|
+ longitude:units = "degrees_east" ;
|
|
|
+ longitude:long_name = "Longitude values" ;
|
|
|
+ longitude:standard_name = "longitude" ;
|
|
|
+ longitude:axis = "X" ;
|
|
|
+ float latitude(latitude) ;
|
|
|
+ latitude:units = "degrees_north" ;
|
|
|
+ latitude:long_name = "Latitude values" ;
|
|
|
+ latitude:standard_name = "latitude" ;
|
|
|
+ latitude:axis = "Y" ;
|
|
|
+ int time(time) ;
|
|
|
+ time:units = "days since 2001-01-01 00:00:00" ;
|
|
|
+ time:long_name = "Time in days" ;
|
|
|
+ time:calendar = "gregorian" ;
|
|
|
+ time:positive = "up" ;
|
|
|
+ time:axis = "T" ;
|
|
|
+ float volume_float(time, latitude, longitude) ;
|
|
|
+ volume_float:valid_min = 3.f ;
|
|
|
+ volume_float:valid_max = 59.f ;
|
|
|
+ volume_float:missing_value = -1.f ;
|
|
|
+ volume_float:_FillValue = -1.f ;
|
|
|
+ volume_float:grid_mapping = "crs" ;
|
|
|
|
|
|
// global attributes:
|
|
|
- :Conventions = "CF-1.5" ;
|
|
|
- :history = "GRASS GIS 7 NetCDF export of r3.out.netcdf" ;
|
|
|
+ :Conventions = "CF-1.5" ;
|
|
|
+ :history = "GRASS GIS 7 netCDF export of r3.out.netcdf" ;
|
|
|
+data:
|
|
|
+
|
|
|
+ longitude = -175, -165, -155, -145, -135, -125, -115, -105, -95, -85, -75,
|
|
|
+ -65, -55, -45, -35, -25, -15, -5, 5, 15, 25, 35, 45, 55, 65, 75, 85, 95,
|
|
|
+ 105, 115, 125, 135, 145, 155, 165, 175 ;
|
|
|
+
|
|
|
+ latitude = 85, 75, 65, 55, 45, 35, 25, 15, 5, -5, -15, -25, -35, -45, -55,
|
|
|
+ -65, -75, -85 ;
|
|
|
+
|
|
|
+ time = 0, 1, 2, 3, 4 ;
|
|
|
}
|
|
|
+
|
|
|
</pre></div>
|
|
|
|
|
|
<h2>SEE ALSO</h2>
|