The Monash University Research Repository has migrated to three new platforms. See Home page for more information and links new repositories.

Add Add to Quick Collection

Please use this identifier to cite or link to this item: http://arrow.monash.edu.au/hdl/1959.1/79596

Cyclone Tracking Programme manual

TRACKX        Cyclone Tracking Programme
======

NAME
=====

    track{$versono}x

USAGE
=====

    track{$versno}x [-d idiagt] [-i infile]
     [-c cfile] [-a zfile] [-b afile] [-z zfile]
     [-w wfile] [-h] [-j zfile] [-U] [-N] [-O] [-o]

SUMMARY OF OPTIONS
==================

    Opt Arg.     Meaning of option

    -i: ifile    instruction file (default intrack)'
    -c: cfile    cyclone data file (default cycdat)'
    -a: afile    zonal average prediction vel. file '
    -b: afile    grid point prediction vel. file '
    -z: zfile    z500 file for geostrophic velocities'
    -w: wfile    parameter weighting stats. output file'
    -h           continue tracks from thist?.1 files '
    -j: jfile    continue from concatenated history file'
    -d: idiagt   diagnostic output level'
    -U           unformatted files to be used'
    -N           unformatted files with namelist'
    -O           force overwriting of thist files'

    -w, -F, -o      not used

    Further information about the options is given under `OPTIONS' below. 

FILES
=====

    track.dir/{*F,*f,*h,Makefile}

DESCRIPTION
===========

  Some basic usages are:

trackx -i ifile -c cdata -FO             Track cyclones from cdata and
                                          force overwrite of thist*,
                                          writing formatted output
trackx -i ifile -c cdata -a afile        Track cyclones from cdata using
                                          prediction velocities in afile
                                          writing unformatted output
cat thist[123].1 > trackdata             Concatenate component track 
                                          history files

Tracking can be continued by addition to an existing track file or files.
The tracking resumes from the last date/time in the existing track file.
NOTE: Continuation options have not been checked since format changes
were made.

trackx -j oldtrackdata -i ifile -c cdata Add tracks of cyclones from cdata 
                                          to tracks in oldtrackdata
trackx -h -i ifile -c cdata              Add tracks of cyclones from cdata 
                                          to tracks in thist[123].1

OPTIONS
=======

    -d idiagt
         This option, if used, uses an integer argument to specify the 
         diagnostic output required

         idiagy >= 1: Tracking stages at each time noted
         idiagy >= 2: Summary tables for each stage 
         idiagy >= 3: Further diagnostics of predict,match
         idiagy >= 4: Further diagnostics of match
         idiagy >= 5: Formatted track histories at each time step
       
    -i ifile           
         Namelist input file for parameters controlling cyclone tracking,
         default is 'intrack'. (See section `NAMELIST INPUT' below.)

    -c cfile    
         Cyclone data file (default cycdat)

    -a afile    zonal average prediction vel. file 
    -b afile    grid point prediction vel. file
         Climatological cyclone velocity prediction file.  The option
         -a indicates that zonal average velocities are provided;
         -b, that grid point velocities are provided.  See `DATA
         FORMATS below.  If neither option be used, the programme will 
         work without prediction velocities.

    -z zfile    
         z500 file for geostrophic velocities.  (NO LONGER USED -
         the information is provided in the cyclone position file now.)

    -h   This option indicates that tracks are to be sequentially
         continued from the tracks contained in the set of files named 
         thist[123].1

    -j jfile
         This option indicates that tracks are to be sequentially
         continued from the tracks contained in jfile.  Options -h
         and -j must not be used together.

    -U   The programme writes to unformatted track history files and
         reads from unformatted files if -h or -j be used.

    -N   The programme writes and reads unformatted files but with 
         a namelist record incorporated in character strings.

    -O   By default, the programme will exit if existing thist* files
         be found.  This option will force overwriting of thist files.

NAMELIST INPUT
==============

  Instruction parameters are given in a file containing the namelist 
record "nlmtrack".  

      namelist /nmltrack/ ddhmmn,ddhmmx,dastrt,hrstrt,dastop,hrstop,
     * da0,hr0,iopmxt,latmnt,latmxt,lonmnt,lonmxt,cmnt1,cmnt2,cmnt3,
     * refdt,wsteer,fsteer,asteer,wmotn,wpten,dequiv,rcprob,rpbell,
     * qmxopn,qmxwek,qmxnew,nsort,irevmx,merget,qmerge,itabt3,itabt4,
     * rsttks,pstrak,hemis,xcen,ycen,rproj,requiv

(i) Time quantities
    ---------------

  These quantities determine the range of times at which tracking is
done.  The meanings of the dates and times of day depend on "dmode",
which is set in the cyclone file.  

  Certain aspects of programme control require a base time or epoch to 
be set so that decimal times (and time differences) in units of days
can be calculated.  These times may also be useful for track plotting.
The epoch is defined by the date and time of day, da0 and hr0.

  If the time difference between successive analyses exceed ddhmmx,
the programme will either exit or continue if rsttks=.true.  In the
latter case, all existing tracks are finished off and new ones are
begun.

      ddhmmn = 010000  ! Minimum time interval between successive data fields,
                       !   in days,hours,minutes (ddhhmm); e.g. 010000=1 day,
                       !   000600=6 hrs.
      ddhmmx = 020000  ! Maximum time interval between successive data fields
                       !   (0=inf, no check made)
      dastrt = 0       ! Starting date (0=first data field used; otherwise the 
                       !   meaning depends on dmode.  If dmode='DDDHM', it is 
                       !   the day no; if dmode='YMDHM', 910311= 11th Mar. 1991)
      hrstrt = 0       ! Starting time
      dastop = 0       ! Finishing date (0=last data field used)
      hrstop = 0       ! Finishing time
      da0    = 000000  ! Epoch date (decimal dates)                  
      hr0    = 0000    ! Epoch time
      rsttks  = .true. ! Start new tracks after data gap(1)     

(ii) Screening of cyclone data
     -------------------------

  The screening of depressions on the basis of status, strength, or
geographical position is normally performed in the cyclone finding 
programme; but further screening may be performed in the tracking
programme if desired.

  Cyclones are classified as open or closed and strong or weak, as
in programme cycloc.  The status variable for the possible combinations
is 0 (strong closed), 1 (strong open), 10 (weak closed), 11 (weak open).
The parameter iopmxt will limit the allowed value of this variable.
Weak cyclones may also be culled by setting limits on the strength of
open and/or closed depressions.

  Only latitude limits are used for delimiting the area of tracking,
with the sign convention that southern latitudes are negative; 
longitude limits are not enabled.

      iopmxt  = 99     ! Open depressions allowed (=1), or not  
      latmxt  = 90.    ! Max. latitude 
      latmnt  = -90.   ! Min. latitude 
c     lonmxt  = 0.     ! Max. longitude 
c     lonmnt  = 360.   ! Min. longitude 
      cmnt1   = 0.     ! Max. Laplacian for closed depressions  
                       ! (0=use cmnc1)
      cmnt2   = 0.     ! Max. Laplacian for open depressions    
                       ! (0=use cmnc2)

(iii) Prediction velocities
      ---------------------

  The projected displacement of a cyclone is based on one or more of 
three velocity predictors: a continuation of the movement of the 
cyclone during the previous analysis interval (uM), the climatological 
cyclone velocity at the cyclone's latitude or latitude and longitude
(uL), and a scaled steering velocity (uS).  If more than one be used, 
the prediction velocity is a weighted combination of them, viz.,

    u_pred = wtM*uM + wtL*uL + wtS*uS,    wtM + wtL + wtS = 1.

  When the programme was first written, data for certain times was
missing, and it was considered necessary to allow for non-uniform 
intervals between analysis times by reducing the weighting of
climatology from the parameter value (wmotn) when the time 
difference (dt) exceeded the reference analysis interval (refdt).
The principal behind this is that the influence of inertia is
greatest at short time intervals, but decreases relative to climat-
ology with increasing time interval.  In practice this does not work
very well because of noise in the analysed cyclone positions; however,
the details are given below anyway.  The effect of the motion 
weighting parameter is referred to reference time interval, refdet.
The time dependence may be switched off by setting refdt=0; in this
case the previous motion component of the projected displacement is
just wmotn times a linear extrapolation in time of the previous
velocity.

  The displacement (dxnextM) and corresponding velocity (unextM=
dxnextM/dtnext) predicted from previous movement (dxlast, ulast) are

    dxnextM = wMdx*dxlast,
    unextM  = wMdx*ulast*(dtlast/dtnext),
            = wMu*ulast, where

    wMdx = (1.-wmotn**(dtnext/refdt))/(wmotn**(-dtlast/refdt)-1.),
    wMu  = wMdx*(dtlast/dtnext).

For dtlast=dtnext=n*refdt, the memory of previous movement decreases
exponentially with interval length (unless wmotn=1), and the 
climatological component increases correspondingly,

    wMdx = wmotn**n = wMu

For wmotn = 1, the projected movement is a linear extrapolation, and
for wmotn ~ 1,

    wMdx = wmotn**n * dtnext/dtlast,  wMu = wmotn**n    

Remving the time dependence by setting refdt = 0, causes wMu = wmotn
for all time intervals, i.e.

    dxnextM = (dtnext/dtlast) * dxlast.

No time dependence has been instituted for steering velocities (i.e., 
it is the same as for motion, with refdt = 0).

  The quantity wMu only controls the relative weighting of previous
movement and climatology; wsteer controls the weighting of steering
versus the other two, so

    wtS = wsteer
    wtM = (1.-wsteer)*wMu
    wtM = (1.-wsteer)*(1.-wMu)

  With the introduction of steering velocities, the usefulness of 
climatological velocities has declined, and is normally not included.
Climatological velocities will be used in place of movement in the
case of newly formed systems (for which the latter is not available)
if a prediction velocity file be given on the command line, even if
wmotn = 1.

  The steering velocity is scaled by a factor fsteer from the raw
value given in the cyclone data file, which represents the wind 
velocity at the steering level or a raw geostrophic velocity
obtained geostrophically from a pressure or geopotential field.
For predicting the velocities of mid-latitude MSLP lows from 
geostrophic velocities obtained from 5 deg. averaged PMSL gradients, 
a factor of 2.0 has been found suitable; for predicting them from
actual or geostrophic 500 mb. winds, a factor of 0.5 or 0.6 is
usually assumed.  

  The steering displacement is calculated in two parts.  The last 
position is projected by a proportion (1-asteer) and the next is
regressed by a proportion asteer.  The projected and regressed
displacements are thus

    dxproj = wsteer*fsteer*(1.-asteer)*u_flow * dt
    dxlast = wsteer*fsteer*    asteer *u_flow * dt

where u_flow is the calculated flow at the steering level and dt
is the analysis time interval.  The logical and default value to 
use is asteer=0.5, which is centred in time.  Note that wsteer and 
fsteer are both needed since wsteer affects the weighting of the 
other components (by 1-wsteer) whereas fsteer does not.  When no 
climat- ological velocities are given and a cyclone is new, one 
could argue that it would be logical to make the steering weighting 
1; this does not improve the skill of the tracking (which may be
indicative of the finite skill of steering information) and 
provision for augmenting the weighting has not been included.

  Provision also exists for using projected pressures based on 
previous pressure tendency in the probability calculation,

    wPdash = (1.-wpten**(dtnext/refdt))/(wpten**(-dtlast/refdt)-1.),
    dp = dtlast/dtnext * wPdash*(p(n) - p(n-1)).

This has not been found to contribute skill to the tracking of MSLP 
lows and is not recommended; it may be of some use when tracking 
from vorticity fields.

      refdt   = 1.     ! Reference time interval for wmotn,wpten,
                       !   dequiv,rcprob,rpbell,qmxopn,qmxwek,qmxnew
      wsteer  = 0.     ! Weighting factor for steering velocity
      fsteer  = 1.     ! Scaling factor for steering velocity
      asteer  = 0.5    ! Weighting (0. or 0.5) for steering velocity 
                       !   at time tc (weighting at tb is 1-asteer)
      wmotn   = 0.36   ! Weighting factor for movement relative
                       ! to the total of movement and latitude
                       ! applicable to an interval of refdt 
      wpten   = 0.3    ! Weighting factor for p tendency (1 day)

(iv) Probability calculation
     -----------------------

  Probabilities of identification are calculated between all paris of
lows at the last and next times that fall within a critical or pass
radius of each other.  Distances can either be calculated on the
sphere or on a PS projection (if pstrak=.true.).  The pass radius
is maximum equal to rcprob (degrees) for strong closed depressions that 
are at least two intervals in age.  The probability function (or
actually the logarithm of the probability) is given by

    q = qmx - r**2/(rpbell + (1.-rpbell)*r**2),
      = qmx - r**2   if rpbell = 1,

where r is the distance between the centres divided by rcprob.  The
`distance' may include an extra dimension, a scaling of the difference
between the predicted and actual pressures at the new time (dp) when
dequiv is non-zero, in which case

    r = (1/rcprob) * sqrt(dist**2 + (dp*dequiv)**2).

  The function q is a maximum (qmx) when the lows are coincident (r=0) 
and zero when they are displaced at or greater than rcprob (r>=1).  
The maximum is 1 for an old strong closed low but is reduced for a 
weak, open, or new low according to the following rules:

    qmx = qage*qstat

    qage  = 1        for a low more than one interval old
            qmxnew   for a newly formed low
    qstat = 1        for a strong closed low
            qmxopn   for a strong open low
            qmxwek   for a weak (open or closed) low

  The parameter rpbell determines the shape of the function:
rpbell=1 gives an inverted parabolic shape, rpbell=xx gives a
Cressman function shape, and lower values give a bell-shapen curve
rapidly diminishing away from r=0.

  Associations that have a log. probability greater than zero are
passed to the matching routine for sorting.

      dequiv  = 0.35   ! Deg. lat. equiv to 1 mb. pressure diff.
      rcprob  = 12.5   ! Pass radius (deg.lat.) for prob. fun.  
      rpbell  = 1.     ! c2/R (where P = R2/(R2 + r2) in prob.f.
      qmxopn  = 0.80   ! Max. value of prob.fn.(q) open depress.
      qmxwek  = 0.60   ! Max. value of prob.fn.(q) weak depress.
      qmxnew  = 0.75   ! Max. value of prob.fn. for new cyclones

      requiv  = -1.    ! (formerly reciprocal of dequiv - NOT USED)

(v) Matching calculation
    --------------------

  Associations are arranged into groups such that each old and new
cyclone only figures in the associations in a particular group.  The
matching calculation finds the possible combinations of associations
such that any one cyclone shall occur in only one association within
the combination.  The combination with the greatest probability 
(i.e., with the maximum sum of log. probabilities of the associations
in the combination) gives the matching for the group.  Unmatched
cyclones are deemed to have been born or to have decayed.

  The matching calculation is performed in six nested do loops, one
for each association added in a particular combination.  The number
of loops can be limited to nsort by making this number less than 6.
This is not very helpful.  Frequently more than six are required,
and it is not really practicable to nest more loops because the 
computational effort increases exponentially with the number of
associations in a group.  To overcome this difficulty, the number
of grouped associations can be reduced artificially by confirming
the match of the highest probability association without reference
to the summed functions of the other associations possible with it.
After this sorting revision, the matching is attempted with the
associations which do not involve either of the matched pair of 
cyclone positions.  The process may be iterated up to a maximum of
irevmx sorting revisions.

  Provision for division and merging of cyclone tracks using the
parameters merget and qmerge has not been written into the algorithm.


  Matching of combinations occurs within
      nsort   = 6      ! Max.no. of simultaneous associations   
      irevmx  = 9      ! Max. no. of artificial sorting revisns.
      merget  = 0      ! Merging of tracks (not yet available (unused)
      qmerge  = 0.     ! Min. prob. fn. for merging/dividing (unused)

(vi) Tabulation specifiers
     ---------------------

  The tabulation columns normally contain the same numbers as in the
cyclone file, except for the addition of decimal days, track end status,
and association probabilities, and also except for the fact that the
cyclone data are reordered into tracks.  If desired, certain columns
may be deleted and itabt3 and itabt4 have the same effect as itabc3
and itabc4 in cycloc.

      itabt3  = 100    ! Tabuln. of cyclone variables in history file 
                       ! 0=use (itabt3=itabc))
      itabt4  = 100    ! Tabuln. of additional variables in history file

(vii) Projection information
      ----------------------

  Many of the tracking calculations require a knowledge of angular 
separations on the sphere.  This is now normally performed using
spherical trigonometry, which is enabled by the logical variable
pstrak.  It is more accurate and only takes only slightly more 
computational effort than alternative (when pstrak=.false.) of
computing the distances on a PS projection; it also allows tracks
to be constructed without any consideration of which hemisphere
is to be used for projection.

  The use of the PS projection dates from a time when all phases
of the programme and all data files used positions in PS units.
This PS calculation makes use of the conformal property and a map 
scale, viz.

      dist = scallat * sqrt(deltax**2 + deltay**2)
      scallat = rproj*tan(phidash/2.)
              = 2.*57.2958/rproj * R**2/(R**2 + rproj**2)
      R    = sqrt( (x-xcen)**2 + (y-ycen)**2 )

For this purpose, projection parameters hemis, xcen, ycen, and 
rproj.  Since the cyclone data is read from and the tracks are
written to files containing positions as latitudes and longitudes,
the projection scale (rproj) is arbitrary and there is no array 
size (ni,nj).  It is set by default to 30 to make for reasonable
numbers in the diagnostic tabulations.

      pstrak  = .true. ! Calculate tracks on PS projection
      xcen    = 31     ! Position on array of pole of projection.  (This
      ycen    = 31     ! will normally be at the centre of the array, but
                       ! may be at any grid point or intermediate location.)
      rproj   = 30.    ! No. of grid point spaces between pole and equator
      hemis   = ' '    ! The hemisphere in which the projection is done will 
                       ! depend on the latitude range of the cyclone data
                       ! unless specified 'N' or 'S'.
  
DATA FORMATS
(===========

(a) Cyclone input data
    ------------------

  The cyclone position file consists of a concatenated series of single
analysis time records of variable length depending on the number of
cyclones found.  Each record contains a header line, a record of control 
parameters and quantity information in namelist form, a row of column 
headers, and one row of numerical data for each cyclone position.
The header line should conform to the format given by statement 240 
below.  The number nnmlc is needed for reading the namelist record,
itabc* are needed for interpreting the tabulation, and da and hr are
needed for time management. 

  The Fortran statements are

      namelist /nmlcycdat/quant,level,lunit,source,unit,cunit,area,
     * dmode,rdiff,hilo,feat,iopmxc,istmxc,latmnc,latmxc,lonmnc,lonmxc,
     * nshell,mscrn,sdrmx,drmx1,drmx2,itmx1,itmx2,diflt1,diflt2,iconcv,
     * icendp,cvarad,cmnh,cmnc0,cmnc1,cmnc2,swvmn,dpmn,fccmn,
     * fmxc,frmxc,frcmxc,cmnhw,cmncw,dpmnw,swvmnw,rdincr,nrddir,sphtrg,
     * zsmax,zscr1,zscr2,qsteer,rdustr,npgdir,alatgv,rhoa,upfact
c ...
  400 continue                       ! can skip blank lines
      read (iunit,'(a80)' chead      ! header line
      if (lnblnk(chead).eq.0) go to 400
c ...
      read (chead,240,err=440,end=430) da,hr,nnmlc,nnmlcp4,
     * itabc1,itabc2,itabc3,itabc4,itabc5,nk
  240 format (' CENTRES:  ',i6,x,i4,' (NNML=',i2,',',i2,';ITABC=',
     * 2i1,i2,i1,i2,'), ',i3,x,a)
c ...
      read (iunit,'()',end=460)
      read (iunit,'(a100)',end=470)  ! strings read/written to file and 
     * (lnmlc(inmlc),inmlc=1,nnmlc)  ! read as namelist record
c ...
      read (iunit,'(//)',end=510)    ! first line has tabulation headers
      do 500 k = 1,nk
        read (iunit,fmt,err=520,end=510) 
     *   k,                          !                  sequential number
     *   iopc(k),                    !                  cyclone status
     *   (xc(k),yc(k),               !(if itabc2 >= 1)  cyclone position
     *   fc(k),                      ! if itabc3 >= 1   field variable
     *   cc(k),                      ! if itabc3 >= 2   averaged Laplacian
     *   dpc(k),                     ! if itabc3 >= 3   depth  (NOT IN USE)
     *   rdc(k),                     !      " "         radius (NOT IN USE)
     *   zsc(k),                     ! if itabc3 >= 4   togographic height
     *   (upc(k),vpc(k),             ! if itabc4 >= 1   steering velocity
     *   (xv(k),yv(k),               ! if itabc2 >= 2   vorticity centre
     *   (sc(k,isup),isup=1,itabc5)  ! if itabc5 >= 1   supplementary vars.
  500 continue

(b) Predition velocity input data
    -----------------------------

  Prediction velocities are read as zonal averages from the a formatted
file, the argment of a -a option, or as u and v lat.-lon. arrays from an
unformatted file the argument of a -b option.  The velocities should be
in m/s, although they are converted to deg./day in subroutine "predvl".
If no such files be provided, the programme will function without and
give full weighting to the motion component (i.e., make wmotn=1.).

  The Fortran statement for zonal average velocities are:

      read (iunit,'(a80)') card
      read (iunit,*) nja
      do 120 ja = 1,nja
        read (iunit,*) lat(ja),u(ja),v(ja)
  120 continue

  Regional velocities are read from a single unformatted file containing
two concatenated CIF (conmap input file) records, for the u (east) and v 
(north) components; the u componet record is read by

      read (iunit) nlat                         ! No. of latitudes
      read (iunit) (lat(j),j=1,nlat)            ! Latitudes
      read (iunit) nlon                         ! No. of longitudes
      read (iunit) (lon(i),i=1,nlon)            ! Longitudes
      read (iunit) head                         ! 80 character header
      read (iunit) ((u(i,j),i=1,nlon),j=1,nlat) ! Array data

(c) Track output data
    -----------------

  The track output is initially written to several files: thist1.[12],
which contain the parameter and date information, and thist2.1, and 
thist3.[12], which contain the track data.  The ".1" and ".2" versions
if thist1 and thist3 are written at successive analysis times.
thist2.1 contains only completed tracks, and thist3.[12] contain all
the tracks from the first numbered track which is still growing to the
most recent track.  At the end of tracking, the most recent versions
of thist1, thist2, and thist3 are concatenated into a single file.

  The track file (and the partial files from which it is compiled)
contains two types of record, a header block (taken from 
thist1.[1 or 2]J) and a large number ("lstrk2") of variable length 
track records, taken from thist2.1 and thist3.[1 or 2], which are in
the same format.

  The track file may formatted or unformatted.  For most applications,
a formatted file is more convenient, and it may be easily compressed.
An unformatted file may have two possible forms of the parameter list, 
one a straight listing (option -U) and the other a namelist listing 
(option -N).  When a namelist is used with an unformatted data file, 
the namelist is initially written to a scratch file; the individual 
lines of this file are stored as character strings in the data file.   

  (i) File header formats
      -------------------

  The fortran statements for the file header as are as follows:

  Formatted files
  ---------------

      write (iunit,'(a/)') ' TRACK HISTORY FILE'
      write (iunit,nmltrdata)
      write (iunit,'()')

  The namelist is

      namelist /nmltrdata/
     * quant,level,lunit,source,dmode,unit,cunit,area,
     * hilo,feat,latmnc,latmxc,lonmnc,lonmxc,
     * sdrmx,drmx1,drmx2,itmx1,itmx2,nshell,cvarad,
     * fmxc,frmxc,frcmxc,da0,hr0,ddhmt,iopmxt,cmnt1,cmnt2,
     * iadvtp,afile,refdt,wsteer,fsteer,asteer,wmotn,wpten,
     * dequiv,rcprob,rpbell,qmxopn,qmxwek,qmxnew,
     * nsort,irevmx,merget,qmerge,itabt3,itabt4,rsttks,
     * t1,da1,hr1,ic,tc,dac,hrc,nkc,ndt,lstrk1,lstrk2
 
  In addition to the parameters, the namelist includes some start
and finish information, viz.,

  t1       Decimal time in days of track start after an arbitrary
             `epoch', da0,hr0
  da1,hr1  Date and time of start of tracking

  ic       Current analysis time number
  tc       Decimal time in days of current time after da0,hr0  
  dac,hrc  Current date and time

  nkc      No. of cyclones at current time
  ndt      Time interval (days) of last analysis interval
  lstrk1   No. of last track before first uncompleted track
             (i.e., the last track of file thist2.1)
  lstrk2   No. of last track in track file

  Unformatted files
  -----------------
  
  The track parameters can be written simply as a single straight
record in the track file, using option -U, viz.,

      fileid = 'thist1'
      write (iunit) fileid,
     * quant,level,lunit,source,dmode,unit,cunit,area,
     * hilo,feat,latmnc,latmxc,lonmnc,lonmxc,
     * sdrmx,drmx1,drmx2,itmx1,itmx2,nshell,cvarad,
     * fmxc,frmxc,frcmxc,da0,hr0,ddhmt,
     * iopmxt,cmnt1,cmnt2,iadvtp,afile,refdt,wsteer,fsteer,
     * asteer,wmotn,wpten,dequiv,rcprob,rpbell,qmxopn,qmxnew,
     * nsort,irevmx,merget,qmerge,itabt3,itabt4,rsttks
      write (iunit) t1,da1,hr1,ic,tc,dac,hrc,nkc,ndt,
     * lstrk1,lstrk2

  Alternatively the parameters can be written as the namelist 
nmltrdata, defined above, which is written to the track file 
as character strings lnmlt(inmlt).  This has the advantage that
extra variables may be added without the format needing to
be changed; however, it may not be convenient to use it on some
operating systems.
 
      fileid = 'thnml'
      write (iunit) fileid,nnmlt
      do 80 inmlt = 1,nnmlt
        write (iunit) lnmlt(inmlt)
   80 continue

  (ii) Formats for individual track records
       ------------------------------------

  Formatted files
  ---------------

      write (iunit,310) trk,statf,statl,ifst,ilst,nit,
     * idafst,ihrfst,idalst,ihrlst,itabt3z,itabt4z
  310 format (' Track ',i4,': stat = ',i1,i1,', ifst = ',i4,
     *     ', ilst = ',i4,', nit = ',i3,x,i6,i4,' - ',i6,i4,
     *     '.  (itab=',2i2,')')
   
      write (iunit,'(/a)') trtab(1:lntrtab)
      write (iunit,fmt) ((vart(m,isw(ivar)),ivar=1,nvar),m=1,nit)
      write (iunit,'()')

  Unformatted files
  -----------------

      fileid = 'thist2'
      write (iunit) fileid,trk,statf,statl,ifst,ilst,nit,
     * idafst,ihrfst,idalst,ihrlst,itabt3z,itabt4z
      write (iunit) ((vart(m,isw(ivar)),ivar=1,nvar),m=1,nit)

  The track record consists of a track header and the data for each 
individual time,  The information in the track header is as follows:

  trk             Sequential track number
  statf           Status of system at the start of the track record
  statk           Status of system at the end of the track record
  ifst            Analysis time number for the start of the track
  ilst            Analysis time number for the end of the track
  nit             Number of analysis times that the track covers
  idafst,ihrfst   Date and time of cyclogenesis
  idalst,ihrlst   Date and time of cyclolysis
  itabt3z         Tabulation specifier for cyclone characteristics
  itabt4z         Tabulation specifier for steering velocity

  The data is stored in an array vart(m,isw(ivar)).  The first
subscript ("m" or "it") is the analysis period relative to cyclo-
genesis (m=1) and the second is a pointer to the array location for
each variable required in the specified tabulation.  The tabulation
is ordered as follows.  

  t     Decimal time after da0,hr0
  da    Date
  hr    Hour
  stat  Status
  k     Cyclone no. in cyclone file
  iop   Open/closed status
  q     Matching probability
  x     Longitude                         
  y     Latitude                          
  p     Central pressure                  if itabt3 >= 1
  c     Delsq central pressure            if itabt3 >= 2
  dp    Cyclone depth                     if itabt3 >= 3
  rd    Cyclone radius                    if itabt3 >= 3
  up    Steering E'wds velocity           if itabt4 >= 1
  vp    Steering N'wds velocity           if itabt4 >= 1

  Depending on the extent of the tabulation specified by itabt3
and itabt4, only certain variables will be plotted.  The switching 
variable, "isw" points from a squential column number to the
required variable.

COMPILATION
===========

  Programmes are best built using make.  A number of the routines accessed
by the programme bear a '.F' suffix and pass through a cc preprocessor to
collect and check changes in included files.

  In order to keep track of modifications to the code, variations to
routines and executables are given version numbers.  This does not yet 
apply to the include files themselves.  Only the currently used versions
of the routines are provided.

FORTRAN PORTABILITY
===================

  Most features of the system have been tested on SUNOS and SUN Solaris
machines.  SUN Fortran allows some constructions which other platforms
do not permit, and attention is drawn to the following types of syntax
or statement which may cause trouble.

(1)  Cases have been found of "go to" statements transferring control to
locations inside do loops or conditional blocks.  It is believed that 
none of these now remain; however, if found, they may cause compilation
errors.

(2)  Undefined variables are set to zero on the SUN but may return NaN
on other platforms or may give a compilation error.  These may still exist 
in rarely used diagnostics and may be set to zero if found in such places.

(3)  Instruction parameters for programmes are given in namelist input
and output.  Namelist records also occur in cyclone and track data files.
The use of this format is now widespread, but some machines may not 
recognise it, in which case input file reading routines or statements 
which use them may need to be modified.

(4)  Some machines write namelists one variable per line, although they
read namelist records which have more than one variable per line.  In
such a case, the dimension of lnmlc in subroutines cychdwr, cychdrd,
and cycio in file cycio.F should be changed from 20 to 100.  Alternative-
ly, a routine could be written to concatenate strings to make up lines
of 80 characters.

(5)  There may be some logical expressions are converted to integers
using int(), e.g.,

      n = 1 + int(x.ge.100)

If found and causing compilation errors, they may need to expanded
appropriately.

(6)  Some machines do not recognise data format fields such as
'1pe3.10.1', which may need to be converted to '1pe3.10', 'e3.10', or
something similar.

(7)  Null do loops may exist in subroutines "cycio" and "trackio", 
depending on the ending index, e.g.,

      read ( ....  (xv(k),yv(k),ii=2,itabc2),(sc(k,isup),isup=1,nsuplt)

where itabc2 < 2 or nsuplt < 1.  SunOS and Sun Solaris systems skip
such loops; but some systems may process the first item of the loop
(i.e., itabc2 = 2 and isup = 1), in which case conditional statements
must be included in the code.
Open in Browser | View/Download 32 KB