FSSIM v3.0 Notes on File Structures =================================== Usage: fssnew fssnew_gui Zone, AU, Table and Block labels can be up to 19 characters long (for the programming types: labels are 20 characters wide internally, 19 usable text characters plus a NULL terminator). axs.dat ------- UnitType UnitID Start End Constraint UnitType is a character string, allowed values are "ZONE" or "GROUP", case is ignored. UnitID is a character string. The zone or group must exist in class.dat or group.dat respectively. Start and End are integer values specifying the inclusive period window in which the constraint is active. Constraints are in the form of a (float, char, int) triplet; the float field is a percentage in the range [0.00 .. 100.00] inclusive. The character field is a string witrh allowed values "<" or ">-". The integer field is an age. Height-based constraints are not implemented. Examples: 25.00 < 17 33.00 >= 140 class.dat --------- Zone AU Block Age Area CType RevertAge [ ] Zone is a character string. Zones that do not exist are created. AU is a character string. The AU must exist in vols.dat. Block is a character string. Blocks that do not exist are created. Age is an integer. Negative values are allowed. Area is a float. Negative values are not allowed. CType is a single character. Valid values are 'O' 'I' 'D' and 'N'. Case ignored. O=operable; I=inoperable; D=deferred; N=non-contributing. Operable area is harvestable and contributes to constraints. Inoperable area is not harvestable and contributes to constraints. Deferred area is not harvestable and contributes to constraints. Deferred area may revert to operable (see RevertAge below). Non-contributing area is not harvestable and does not contribute to constraints. Non-contibuting area may revert to operable (see RevertAge below). D- and N-types must have a RevertAge. O- and I-types do not require a RevertAge. RevertAge is an integer. Negative values are allowed. D- or N-type area that age past RevertAge reverts to O-type. config.dat ---------- Harvest Rule [1..4]: Initial Age Offset [years]: Trace [On/Off]: Class Splitting [On/Off]: Class Split Threshold [ha]: Randomizer [On/Off]: Randomizer Seed [integer]: Reports [On/Off]: Report Headers [On/Off]: Output Directory: LastPeriodTarget: GSPercentTarget [%]: Harvest Rule [1..4]: integer value in the range 1..4 inclusive specifying the harvest rule to use throughout the planning horizon. Defaults to (2) relative oldest first if not specified. 1 - absolute oldest first, queue sorted on age 2 - relative oldest first, queue sorted on (age-mha) 3 - absolute youngest first, queue sorted on -age 4 - random, queue randomly scrambled Initial Age Offset [years]: integer value specifying the number of years to offset all class ages at time0. Negative values are allowed. Defaults to 0 if not specified. Trace [On/Off]: character string. Valid values are "ON" and "OFF", case ignored. With trace on, a trace report file showing class level harvest details is generated to the output directory. With trace off, this file is not generated. Defaults to "OFF" if not specified. Class Splitting [On/Off]: character string. Valid values are "ON" and "OFF", case ignored. With class splitting on, portions of a class can be harvested. With class splitting off, class harvest is all or nothing. If a portion of the class area cannot be harvested for whatever reason eg mha, constraints, target, etc, no harvest takes place in the class. Defaults to "ON" if not specified. Class Split Threshold [ha]: float value. Specifies the threshold in hectares for class splitting. If class splitting is disabled, the class splitting algorithm will not leave or create class area less than threshold hectares in size. Defaults to 0.0 if not specified. Randomizer [On/Off]: character string. Valid values are "ON" and "OFF", case ignored. Because of the way classes are queued for harvest, there is an inbuilt bias within the model to harvest classes in alphabetically lower ranked zones and AUs first (all other things being equal). That is, given classes of the same age, the candidate queue will be ordered alphabetically by zone and AU. Setting Randomizer "ON" overcomes this bias by queuing the harvest candidates in a randomized hash list: all candidates with the same harvest priority are placed in the same hash and candidates within each hash sorted randomly. The end result is that proper harvest priorities are maintained and the alphabetic sorting bias removed. Randomizer Seed [integer]: integer value specifying the seed for the inbuilt random number generator. The random number stream generated is the same from one run to the other as long as the seed is the same. Negative values are allowed. Defaults to 1 if not specified. Random numbers are used for candidate hashing and for the random harvest rule. Reports [On/Off]: character string. Valid values are "ON" and "OFF", case ignored. If reports are on. report files are generated to the output report directory. If reports are off, report files are not generated. Defaults to "ON" if not specified. Report Headers [On/Off]: character string. Valid values are "ON" and "OFF", case ignored. If report headers are on, report files contain text header information describing the report fields. If headers are off, these text headers are not generated. Defaults to "ON" if not specified. LastPeriodTarget: integer value. Specifies the last period in which targets specified in targets.dat are applied. For all subsequent periods, target levels are calculated internally as a percentage of the growing stock (see GSPercentTarget below). Set to a value beyond the end of the planning horizon if not required. Defaults to 401 if not specified. GSPercentTarget [%]: integer value. Used in conjunction with LastPeriodTarget above. Defaults to 100% if not specified. group.dat --------- Group Type Zone AU Block AgeLow AgeHigh ClassType Group is a character string. Groups that do not exist are created. Type is a single character field. Valid values are 'F' and 'S'. Case is ignored. F=floating groups; group membership is reassessed whenever the state of a class is changed eg aging, type reversion, regeneration. S=static groups; all area that belongs to the group at time0 remains in that group throughout the planning horizon, regardless of state changes. Zone is a character string. "n/a" indicates that zone is not a group membership criterion, otherwise the specified zone must exist in class.dat. AU is a character string. "n/a" indicates that AU is not a group membership criterion, otherwise the specified AU must exist in vols.dat. Block is a character string. "n/a" indicates that block is not a group membership criterion, otherwise the specified block must exist in class.dat. AgeLow is a character string. "n/a" indicates that agelow is not a group membership criterion and agelow is automatically set to -32767, otherwise agelow is converted to an integer. AgeHigh is a character string. "n/a" indicates that agehigh is not a group membership criterion and agehigh is automatically set to 32767, otherwise agehigh is converted to an integer. Area with an age falling in the age range AgeLow..AgeHigh inclusive is considered eligible for group membership. ClassType is a character string. "n/a" indicates that class type is not a group membership criterion, otherwise ClassType must take the value "O" "I" "D" or "N" as described in class.dat above. landoaf.dat ----------- Zone AU LandOAF Zone is a character string. A value of "n/a" indicates that the land oaf is applied at the AU level. AU is a character string. A value of "n/a" indicates that all AUs in the zone have the same land oaf applied. At least one of zone or AU must be non-"n/a" per line. Is both zone and AU are specified, the land oaf is applied to that specific zone/AU pair. LandOAF is a float. Negative values are not allowed. neighbours.dat -------------- Block Neighbours [ .. ] Block is a character string. The block must exist in class.dat. Neighbours are blocks and must also exist in class.dat. One or more neighbours can be specified per line. At least one neighbour must exist per line. More than one line can exist per block. oaf.dat ------- Table MHA AdjacencyAge RefAge OAF1 OAF2 Table is a character string. The table must exist in vols.dat. MHA is an integer. Negative ages are not allowed. AdjacencyAge is an integer. Negative ages are not allowed. RefAge is an integer. Negative ages are not allowed. OAF1 is a float. Negative values are not allowed. All volumes derived from the table are multiplied by OAF1. OAF2 is a float. Negative values are not allowed. OAF2s are applied using the following formula: (OAF2*100) 100 - ( ---------- * age ) refage Volume@age *= --------------------------- 100 param.dat --------- Plan Horizon: Period PeriodLength Plan Horizon: is an integer indicating the number of periods in the planning horizon. "Period PeriodLength" is a required header. The remainder of param.dat is a series of (int, int) pairs. The first integer is a period. Negative values are not allowed. Values exceeding the specified plan horizon are ignored. The second integer is the length of the period in years. Negative values are not allowed. priority.dat ------------ Zone AU Group Start End Priority Zone is a character string. A placeholder of "n/a" can be used, otherwise the zone must exist in class.dat. AU is a character string. A placeholder of "n/a" can be used, otherwise the AU must exist in vols.dat. Group is a character string. A placeholder of "n/a" can be used, otherwise the group must exist in group.dat. At least one of zone, AU or group must be non-"n/a". If group is specified, neither zone nor AU can be specified. Zone and AU can be specified individually or as a pair. Start and End are integer values specifying the inclusive period window in which the priority is active. Priority is an integer in the range 1..100 inclusive. A value of 1 is high priority, a value of 100 is low priority. All units have a default priority of 50. regen.dat --------- Zone AU PC RegenAU RegenAge Offset ReEntryLag Zone is a character string. The zone must exist in class.dat. AU is a character string. The zone/AU pair must exist in class.dat. PC is an integer in the range 1..100 inclusive representing percentage regeneration. The sum of regeneration percentages for a given zone/AU pair must total 100. RegenAU is a character string representing the AU to which area harvested in the zone/Au regenerates. The AU must exist in vols.dat. RegenAge is a character string. Is the string is "KEEP" (case ignored), the age of the area undergoing regeneration is maintained, otherwise the string is converted to an integer. Negative values are allowed. Offset is an integer. Negative values are allowed. The age of the regenerated area is set to RegenAge+Offset. eg RegenAge Offset Post-regen Age 0 -2 -2 4 3 7 -3 0 -3 keep 4 current age + 4 ReEntryLag is an integer. Negative values are allowed but do not make contextual sense. ReEntryLag indicates how many years must elapse before the regenerated area is considered eligibe for harvest again. reports.dat ----------- UnitType UnitID IHRS IHRE IMRS IMRE IHSS IHSE IMSS IMSE ARS ARE LRS LRE HRS HRE UnitType is a character string. Valid values are "ZONE" and "GROUP", case ignored. UnitID is a character string. The zone or group must exist in class.dat or group.dat respectively. The remaining fields are a series of integers representing start and end period windows for reporting. The fields are as follows: IHRS: Inventory area report start period (inv_ha.rep) IHRE: Inventory area report end period (inv_ha.rep) IMRS: Inventory volume report start period (inv_m3.rep) IMRE: Inventory volume report end period (inv_m3.rep) IHSS: Inventory area summary start period (inv_ha.sum) IHSE: Inventory area summary end period (inv_ha.sum) IMSS: Inventory volume summary start period (inv_m3.sum) IMSE: Inventory volume summary end period (inv_m3.sum) ARS: Access constraints report start period (constraints.rep) ARE: Access constraints report end period (constraints.rep) LRS: Harvest level report start period (levels.rep) LRE: Harvest level report end period (levels.rep) HRS: Harvest age distribution start period (hage.rep) HRE: Harvest age distribution end period (hage.rep) Start and end period values must be integers. If reports are not to be generated, start and end should be set beyond the end of the planning horizon. Only one entry can be specified per landunit. This means that it is not possible to specify reports to be generated for, say, period 1-5 and then 12-17. road.dat -------- Zone AU Age PC RoadAU RegenAge Offset ReEntryLag Zone is a character string. The zone must exist in class.dat. AU is a character string. The zone/AU pair must exist in class.dat. Age is an integer. At the start of the planning horizon, classes within the zone/AU strictly less than age is considered to have existing roads and will not be future roaded. PC is an integer in the range 1..100 inclusive representing percentage regeneration. The sum of regeneration percentages for a given zone/AU pair must total 100. RegenAU is a character string representing the AU to which area harvested in the zone/Au regenerates. The AU must exist in vols.dat. RegenAge is a character string. Is the string is "KEEP" (case ignored), the age of the area undergoing regeneration is maintained, otherwise the string is converted to an integer. Negative values are allowed. Offset is an integer. Negative values are allowed. The age of the regenerated area is set to RegenAge+Offset. eg RegenAge Offset Post-regen Age 0 -2 -2 4 3 7 -3 0 -3 keep 4 current age + 4 ReEntryLag is an integer. Negative values are allowed but do not make contextual sense. ReEntryLag indicates how many years must elapse before the regenerated area is considered eligibe for harvest again. targets.dat ----------- UnitType UnitID Start End MinArea MaxArea MinVolume MaxVolume UnitType is a character string. Allowed values are "ZONE" and "GROUP", case ignored. UnitID is a character string. The zone or group must exist in class.dat or group.dat respectively. The only exception is a "ZONE" value of "0" (zero). Zone0 represents the entire landbase and is created within the model automatically. Start and End are integer values specifying the inclusive period window in which the targets are active. MinArea, MaxArea, MinVolume and MaxVolume are character strings. A value of "n/a" indicates that no target is active for the unit in the given period window. Otherwise, the string is converted to a float value. Negative values are not allowed. MinHa and MinM3 must be specified, but are not used. Target levels are yearly. transfer.dat ------------ Group Start End Zone AU Age CType RAge Group is a character string. The group must exist in group.dat. All area within the group will be transfered according to the specified criteria. Start and End are integer values specifying the inclusive period window in which the transfer is active. Zone is a character string. A value of "n/a" indicates that transfered area maintains its current zone, otherwise the zone must exist in class.dat. AU is a character string. A value of "n/a" indicates that transfered area maintains its current AU, otherwise the AU must exist in vols.dat. Age is a character string. A value of "n/a" indicates that transfered area maintains its current age, otherwise the string is convereted into an integer. CType is a character string. A value of "n/a" indicates that transfered area maintains its current class type, otherwise the value must be one of the class types listed under class.dat above. RAge is a character string. A value of "n/a" indicates that transfered area maintains its current reversion age, otherwise the string is converted into an integer. vols.dat -------- Table: Age Volume . . . . Table: is a character string indicating the name of the table. Duplicate table labels are not allowed. "Age Volume" is a required header. The remainder of the table structure is a series of (int, float) pairs. The integer field represents age and the float field represents volume at that age. The final table is a sequence of age/volume vertices. Linear interpolation is performed between vertices to derive the final volume over age curve. Neither age nor volume can be negative. Final volume curves are modified by OAF1 and OAF2 as described in oaf.dat above.