Open Collections

UBC Theses and Dissertations

UBC Theses Logo

UBC Theses and Dissertations

Water and material balance at mine tailings impoundments : software program development and risk analysis Estergaard, Andrea Holly 1999

You don't seem to have a PDF reader installed, try download the pdf

Item Metadata

Download

Media
ubc_1999-0262.pdf [ 22.8MB ]
[if-you-see-this-DO-NOT-CLICK]
Metadata
JSON: 1.0050155.json
JSON-LD: 1.0050155+ld.json
RDF/XML (Pretty): 1.0050155.xml
RDF/JSON: 1.0050155+rdf.json
Turtle: 1.0050155+rdf-turtle.txt
N-Triples: 1.0050155+rdf-ntriples.txt
Original Record: 1.0050155 +original-record.json
Full Text
1.0050155.txt
Citation
1.0050155.ris

Full Text

W A T E R A N D M A T E R I A L B A L A N C E A T M I N E TAILINGS IMPOUNDMENTS SOFTWARE P R O G R A M D E V E L O P M E N T A N D RISK A N A L Y S I S  by ANDREA HOLLY ESTERGAARD B . A . S c , The University of British Columbia, 1994  A THESIS SUBMITTED IN P A R T I A L F U L F I L M E N T OF THE REQUIREMENTS FOR THE D E G R E E OF M A S T E R OF APPLIED SCIENCE in THE F A C U L T Y OF APPLIED SCIENCE (Department of Civil Engineering, Hydrotechnical Programme)  We accept this thesis as conforming to. the required standard  THE UNIVERSITY OF BRITISH C O L U M B I A APRIL 1999 © Andrea Holly Estergaard, 1999  In presenting this thesis in partial fulfilment of the requirements for an advanced degree at the University of British Columbia, I agree that the Library shall make it freely available for reference and study. I further agree that permission for extensive copying of this thesis for scholarly purposes may be granted by the head of my department or by his or her representatives. It is understood that copying or publication of this thesis for financial gain shall not be allowed without my written permission.  Department of  C\M\\  The University of British Columbia Vancouver, Canada Date  /vg-g-i-^A  ABSTRACT  Tailings impoundments are commonly used in the mining industry for the disposal and storage of mine wastes including tailings, waste rock and process water. The impoundments often require engineered embankment dams to facilitate containment. Failure of impoundment dams can lead to serious effects downstream due to the release of significant amounts of water and solids. Inadequate water management has been recognized as the primary cause of such failures.  Tailings impoundment dam design involves estimating the site water and material balance to design appropriate impoundment structures and material management facilities. The balances are usually conducted using monthly average hydrologic values and output from the balance are the required dam crest elevations during the life of the mine.  The "models" that are employed by industry and their consultants to complete these hydrologic budgets are simple and spreadsheet based, using average hydrologic values to predict required monthly dam crest elevations. The lack of flexibility and transparency in these spreadsheet balances has been identified as a problem by mining engineers.  A Microsoft Windows based software program written in Visual Basic, Visual Balance, was developed as part of this study. Visual Balance is a fast, simple method of modelling the water and material balance in a single impoundment tailings disposal system and predicting required dam crest elevations. Visual Balance also includes a risk analysis module which predicts ii  probable impoundment operation and closure conditions based on a Monte Carlo simulation of expected precipitation and surface runoff values.  Water management problems identified by Visual Balance include insufficient free pond water available for reclaim, inadequate freeboard, uncontrolled release requirements, or tailings solids exposure. Knowledge and anticipation of these challenges could influence tailings impoundment site selection, design, or mine operating conditions.  Planning for these conditions in  impoundment and facility design could save companies considerable cost and aggravation.  The results of the five Case Studies conducted as part of this study emphasized the predictive capabilities of Visual Balance. Monthly dam crest elevations similar to those previously predicted by spreadsheet based balances were modelled for the five Case Studies by Visual Balance.  In the two Case Studies where actual operating conditions were available for  comparison, insufficient free pond water availability and excess water leading to low freeboards experienced at each site were successfully predicted by Visual Balance.  iii  T A B L E OF CONTENTS Page Number Abstract  ....  ii  List of Tables  viii  List of Figures  ix  List of Symbols  x  Acknowledgements 1.0  2.0  xiv  INTRODUCTION  1  1.1  Background  1  1.2  Research Objectives  4  1.3  Thesis Outline  6  TAILINGS DISPOSAL A N D I M P O U N D M E N T DESIGN  8  2.1  Mine Waste  8  2.2  Tailings Disposal Methods  10  2.3  Tailings Impoundment Design  11  2.3.1  Design Floods  16  2.3.2  Design Freeboard  2.3.3  Surface Water Management  24  2.3.4  Regulatory Requirements and Guidelines in British Columbia  25  2.4  .  21  Tailings Impoundment Failures and Accidents  27  2.4.1  Tailings Impoundment Failure Case Studies  28  2.4.2  Failure Causes  31 iv  T A B L E O F C O N T E N T S (cont.) Page Number 3.0  4.0  WATER AND MATERIAL B A L A N C E  33  3.1  Introduction  33  3.2  Water and Material Balance Calculations  37  3.2.1  Water Inflow Calculations  37  3.2.2  Solids Inflow Calculations  41  3.2.3  Water Outflow and Loss Calculations  45  3.2.4  Solids Loss Calculations  49  3.3  Existing Related Water and Material Balance Programs  50  3.4  Risk Analysis and Water and Material Balance  54  VISUAL B A L A N C E PROGRAM DEVELOPMENT  57  4.1  Program Language  57  4.2  Program Structure  58  4.2.1  65  4.3  Detailed Design and Coding Conventions  Program Data Input  67  4.3.1  General Project Data  67  4.3.2  Mine Production and Material Data  69  4.3.3  Hydrologic Data Input  70  4.3.4  Reservoir Characteristics and Operation  71  4.3.5  Dam Safety and Design Information  73  v  T A B L E O F C O N T E N T S (cont.) Page Number  5.0  6.0  4.3.6  Risk Analysis Information  .74  4.3.7  Visual Balance Data Files  76  4.4  Program Calculations  78  4.5  Program Output  79  4.6  Debugging and Testing  80  RISK A N A L Y S I S M O D U L E D E V E L O P M E N T  82  5.1  Critical Risk Parameters  82  5.2  Risk Analysis Approach  83  5.3  Statistical Theory  87  5.4  Risk Analysis Module Performance  92  5.5  Risk Analysis Module Output  96  C A S E STUDIES  99  6.1  Case I - North Coast British Columbia, Canada  101  6.2  Case II - North East British Columbia, Canada .  104  6.3  Case III - Central Interior British Columbia, Canada  107  6.4  Case IV - Northern Ontario, Canada  109  6.5  Case V - Southern Bolivia  113  vi  T A B L E O F C O N T E N T S (cont.) Page Number  7.0  8.0  V I S U A L B A L A N C E UTILITY  118  7.1  Program Applications and Advantages  118  7.2  Program Limitations  121  7.3  Suggestions for Further Research  123  CONCLUSIONS  125  Bibliography  126  Appendix A  Visual Balance Menu and Data Input Forms  134  Appendix B  Visual Balance Data Input Excel Tables  148  Appendix C  Visual Balance Computer Code  155  Appendix D  Visual Balance Case Study Data Input Summary Tables  323  Appendix E  Visual Balance Sample Risk Analysis Results Summary Tables . . 329  Appendix F  Visual Balance Concise Volume and Elevation Output File . . . . . . 344  Appendix G  Visual Balance Extended Volume and Elevation Output File  vii  351  LIST OF T A B L E S Page Number  Table 2.1  Classification of Dams in Terms of Consequence of Dam Failure (CDS A)  19  Table 2.2  Usual Minimum Criteria for Inflow Design Floods (CDSA)  20  Table 4.1  Variable Naming Conventions for Visual Basic  66  Table 4.2  Required Standardized Excel Data Input Files  76  Table 4.3  Optional Standardized Excel Data Input Files  77  Table 4.4  Required Input Text Files (Created by Visual Balance)  77  Table 5.1  Sample Risk Analysis Results  97  Table 6.1  Summary of Risk Analysis Results for Case Study I  104  Table 6.2  Summary of Risk Analysis Results for Case Study II  107  Table 6.3  Summary of Risk Analysis Results for Case Study III  110  Table 6.4  Summary of Average Closure Balance Results - Case Study IV  113  Table 6.5  Summary of Risk Analysis Results for Case Study V  117  viii  LIST OF FIGURES Page Number  Figure 1.1  Dam Staging Curve  5  Figure 2.1  Typical Embankment Dam Profile  12  Figure 2.2  Cross-valley Impoundment Site and Surface Water Diversions  13  Figure 2.3  Tailings Dam Profile Depicting Scheduled Lifts  15  Figure 3.1  Tailings Impoundment Water and Material Balance Schematic  36  Figure 3.2  Schematic Representation of Tailings Deposition Geometry  44  Figure 4.1  Visual Balance Model Levels Flow Chart  60  Figure 4.2  Data Input Form Example  68  Figure 5.1  Random Number Generation Using Cumulative Distribution Function . . . . 87  ix  LIST OF S Y M B O L S Symbol  Units 2  Description catchment area  A  nr  A„  m  2  tailings impoundment beach area  A  m  2  reservoir surface area  c  r  b  term used in the asymptotic expansion expression  C  units conversion constant = 5.12*10"  d  4  m  average water depth along the direction of wind  mm  snowpack depth  d,  m  depth to spillway  D  days  number of days in month  mm  runoff depth  s  m  E  clc  m  elevation of water "post spill"  m  elevation of dam crest  E„,  mm  monthly evaporation depth  E  r  mm  average monthly evaporation depth from reservoir  E  h  mm  average monthly evaporation depth from beaches  f  km  fetch or distance over which wind acts on the water  M  general distribution function  F(x)  cumulative distribution function  f  fraction of precipitation as snow in a given month  fill  fraction of snowmelt occurring in a given month  frd  fraction of catchment area diverted  fwrs  fraction of waste rock submerged in reservoir  fwri  fraction of waste rock sent to reservoir  fc  fraction of tailings cycloned out of reservoir X  Symbol  Units  Description  f, gl(Xp)  functions used in the asymptotic expansion expression  G  specific gravity  s  m  set-up height  m  3  volume of direct precipitation  m  3  surface water inflow volume  m  3  groundwater inflow volume  m  3  surface water inflow volume  m  3  minewater inflow volume  4-  m  3  groundwater recovery or treated water return inflow volume  Is  m  3  solids inflow volume  h  m  3  total tailings solids and voids inflow volume  I\vrt  m  3  total waste rock solids and voids inflow volume  h lr  w  IR  mm  M  tonnes  total mass  M  tonnes  mass of water  M  tonnes  mass of solids  w  s  runoff loss in a given month  sample size  n  volume of total evaporative loss  m  0  E  o  sw  o  v  m  3  groundwater outflow volume  m  3  total volume of water loss to solids voids  3  o  m  o„  m  rc  3  mine recycle or reclaim outflow volume spills and release volume (may include release to water treatment facility)  OD  m  days  operating days in month  xi  Symbol  Units  Description  o  m  3  re  volume of evaporative loss from reservoir pond  o  m  3  he  volume of evaporative loss from beaches  o  m  3  volume of water lost to tailings voids  0 wrv  m  3  volume of water lost to waste rock voids  o.  m  3  volume of tailings solids lost to waste rock voids  PR  mm  lv  sv  randomly generated precipitation random number between 0 and 1  P P,„  mm  average monthly precipitation depth i-th random number  mm  average monthly runoff depth  R,  m /hr  groundwater inflow rate  R  m /hr  slurry water inflow rate  n  m /hr  minewater inflow rate  g  3  3  xw  3  s  sample standard deviation degree of saturation  AS  m  3  t  change in storage volume Student's t statistic number of standard deviations from the mean  u  km/hr  V  m  3  wind speed (lon/hr) total volume  v  m  v  m  3  volume of solids  v  m  3  volume of voids  m  3  volume of water  r  s  v  v  w  3  volume of runoff  Symbol (V)  ps  Units m  Description total actual volume of solids and water in the impoundment  3  post spill V, (VJ  ps  m  3  volume of solids  m  3  volume of water in impoundment after a spill  w x  water content mm  mean total annual precipitation  x,  random variate  x  randomly generated number of standard deviations from  p  mean y  sample mean  z  term in x approximation  ju  population mean  e  void ratio  p  p  w  kg/m  density of water  3  e(p)  error term  p  tonnes/m  3  dry density  p  tonnes/m  3  bulk density  d  v  degree of freedom (n-2)  xiii  ACKNOWLEDGEMENTS  Funding for this research has been provided by the Science Council of British Columbia (SCBC) and A G R A Earth & Environmental Limited (AGRA), and scholarships from the Natural Science and Engineering Research Council (NSERC), Industrial Post-graduate Award and the Canadian Water Resource Association, Earl Peterson Memorial Award. The author is particularly grateful to Mr. Peter Lighthall, Vice-President, A G R A , for being instrumental in creating the opportunity to undertake this project and for his continued support.  M y sincere thanks also goes to Dr. Robert Millar, Assistant Professor, Department of Civil Engineering, University of British Columbia for his contribution to this thesis. His guidance and excellent technical assistance were instrumental in the completion of the research. Many of my colleagues at A G R A (namely Mr. Wes Dick, Mr. Todd Martin, and. Ms. Cindy Campbell) have also provided valuable assistance and technical input over the past two years.  I would also like to thank my family and friends for their unwavering encouragement throughout the duration of this thesis and their cheering words that helped see it through. In particular, the timely completion of this thesis was reliant on the countless hours of exceptional editorial work provided by my dad, Mr. David Estergaard.  xiv  C H A P T E R 1.0  1.1  INTRODUCTION  Background  , Tailings impoundments are widely used in the mining industry for the disposal and storage of mine wastes including tailings, waste rock and process water. Tailings is the term used for the fine grained residual solids generated at the "tail end" of many process industries, including ore processing. The impoundments designed to store mine waste material and water often require engineered embankment dams to facilitate containment. Embankment dams for these storage facilities are typically constructed using the coarser fraction of the tailings or waste rock from mining, or borrowed earth or rock fill.  Failure of large earth embankment dams can lead to serious effects downstream due to the release of significant amounts of water and solids. Environmental impacts resulting from failures can be particularly significant if hazardous constituents are included in either the water or solids being impounded. For example, process water may contain high suspended solids concentrations, heavy metals, or toxic residual chemicals such as cyanide. As well, mine tailings and waste rock can contain sulphide minerals with the potential for acid rock drainage.  The most significant causal factor of tailings impoundment failure is inadequate water management (UNEP, 1998). Insufficient freeboard, spillway capacity, or diversion capacity can lead to overtopping of the dam by flood discharge. Hydraulic failure in the form of overtopping  1  accounts for nearly 40% of all the earth dam disasters in the world (Murthy, 1991). Deficient water management at tailings impoundments can also lead to excessive seepage, uncontrolled effluent spills, or dam failure, which can impact the downstream environment.  Over the last two decades, the focus on the potential hazard created by mining waste disposal has increased due in part to the public awareness of failures causing death and severe environmental impacts. The need for better design of tailings impoundments was recognized by the International Committee on Large Dams (ICOLD) when they formed the Committee on Mine and Industrial Tailings Dams in 1976. Despite the regulatory emphasis on improved design methods and management, there have been several recorded failures of large tailings embankment dams in the last two decades. These catastrophic events have resulted in loss of life and widespread environmental and property damage.  Recently, the failure of a tailings impoundment at the Boliden A/S Los Frailes mine near Andalucia, Spain in July 1998 resulted in direct contamination of over 2,000 hectares of agricultural and undeveloped parkland. Reports suggest that Boliden will spend up to US $60 million in clean up and compensation costs. The Merriespruit tailings dam failure in South Africa in February 1994 resulted in the loss of seventeen lives, severe destruction of property, and widespread environmental damage. This failure involved the collapse of a thirty-one metre high tailings dam upslope of the suburb of Merriespruit and the release of 600,000 m of tailings 3  that flowed through the town. The mine tailings storage facility collapse near Stava, Italy in July 1985, resulted in 268 lives lost and considerable property damage.  2  The mining industry has additional reason to seek effective measures to control water and wastes because the lack of sound mine water management is a common cause of permit violations, an impediment to sustainable mine reclamation, and an expensive irritation to mine operators (Sawatsky et. a l , 1998).  The need to anticipate and control surface water during the initial impoundment planning and design is critical.  Because of failure to properly account for accumulated volumes of  precipitation and runoff water, many tailings impoundments, while initially sized to contain the anticipated tailings output, become full to design capacity long before the end of mine production (Vick, 1990). Tailings impoundments filled more rapidly than originally designed for can result in compromised freeboard and the increased potential for overtopping due to an extreme precipitation or flood event.  Tailings impoundment dam design involves estimating the site water and material balance to design appropriate impoundment structures and material management facilities. Water and material balance for these impoundments requires accounting of inflow of water and material in the form of precipitation, snow and glacier melt, effluent water, waste solids and slurries, and the outflow or loss of water via evapotranspiration, runoff, infiltration, process reclaim water, planned releases and water treatment withdrawals. The balances are usually conducted using monthly average hydrologic values. Safety provisions are added for the storage of a design flood volume and wave and safety freeboard. The output from the water and material balance is a dam staging curve showing the required dam crest elevations during the life of the mine (Figure 1.1). 3  At present, the "models" that are employed by industry and their consultants to complete these hydrologic budgets are simple and spreadsheet based. Many of these water balance spreadsheets are not transferable between projects and are regenerated on a project-by-project basis. The spreadsheets also contain "magic numbers": site specific variables set to unique values that can not be seen or understood by the user without detailed review of the spreadsheet set up. Although this is an inefficient use of resources, the large amount of time and associated expense needed to develop a flexible water and material balance application has not been afforded.  1.2  Research Objectives  The objective of this research was to develop a prototype computer software application for water and material balance that could be employed at single reservoir tailings impoundment sites, particularly in the mining industry. The study involved the following components as outlined in a research proposal to the Science Council of British Columbia: •  review available methods for tailings impoundment water and material balance;  •  assess the applicability of selected methods using hydrology data typically available from remote British Columbia mine sites;  •  develop and test a prototype methodology and computer software program for water and material balance at simple tailings impoundments; and  •  assess long term uncertainty and risk associated with current design standards and design practices.  4  1- - t -1 u _ j_ 1 1 1 i 1 1 i _ _ j — r4 - j - ~.r - 4 - - I —  H 1  .  i  t- —1 1__ j_ i i  i i i i — 1— 1 j - - r4- _ —I1 r~ 1 1 f-1 — 1 1 1 1 1 — 1 L_ i l  I i +-- H i i t--  6  -  5 ~ n_  o  8 z  I  1 1  I.  j__ i i r~ 1 4 - 4 . - -1 1 I 1 1 i I h - - t - - +-- H 1 I 1  3  _L._L_  1 ° a § Ci  -f - - t _i __j  T -4-  1 1  ~r  _  n  1- - 1 l_ _ 1 _  i i I I i i r r 4 - 4 _ —i1  i i  _  4 --4  (Ui) N0UVA3T3  ft!  ?  2  The results of the research will provide the mining industry with a better understanding of available methods for small-scale water and material balance at tailings impoundments and provide a needed tool for improving these balances. Both outcomes can be expected to increase . the efficiency of impoundment site assessment, enhance the efficacy of mine operation, and improve associated environmental and human health protection.  1.3  Thesis Outline  Development of a water and material balance model for tailings impoundments combines concepts from a number of different scientific and engineering disciplines. This research has involved integrating common design practices from the following areas: •  tailings disposal methods and impoundment design practices,  •  mine waste and mine pollution,  •  water balance and hydrology, and  •  risk analysis and uncertainty in water resource projects.  A review of technical issues relevant to tailings disposal and impoundment design are covered in Chapter 2.0. Water and material balance computational algorithms and risk analysis concepts are presented in Chapter 3.0. The structure and performance of the water and material balance software program, Visual Balance, developed aSypart of this research is outlined in Chapters 4.0 and 5.0.  The statistical approach and methods for conducting risk analysis at tailings  impoundments using the program are also detailed. Five recent tailings impoundment water and 6  material balance case studies were analyzed using the program and the results of expected impoundment performance are included in Chapter 6.0. Conclusions regarding applicability of the program and recommendations for further research are included in Chapter 7.0. Computer code for the software program is provided in Appendix C.  7  CHAPTER 2.0  TAILINGS DISPOSAL AND IMPOUNDMENT DESIGN  The issue of water and waste management in the mining industry is significant. Worldwide, the tonnage of mine waste handled on an annual basis exceeds that of any other industry, including non-mine construction (ICOLD, 1996). Mineral processing wastes can contain hazardous residual chemicals, heavy metals, and may produce additional hazardous reactions after disposal. In the following sections, mine waste characteristics, methods of tailings and waste disposal, impoundment design, and impoundment failure causes and case studies are discussed.  2.1  Mine Waste  Waste materials and wastewater from mining activities vary depending on the method of mining and mineral processing. Solid waste materials can include unprocessed waste rock, tailings, and waste surface soil material. The extraction of sulphide bearing rock, which is the predominant type of rock associated with metalliferous mining, can expose large volumes of potentially acid generating rock. Generation of acid from waste rock and tailings can lead to leaching of low pH water from the storage facility, which may also contain elevated heavy metals concentrations.  Water and wastewater sources from mining activities can include milling process water, water contained in a tailings slurry, treatment plant effluent water, and mine site runoff. Specific metals and hazardous chemical concentrations in the milling process water will depend on the metal extraction process employed. For example, cyanide is often a necessary reagent and 8  problematic constituent in process effluents from gold-silver milling. Cyanide is also sometimes used in concentration processes such as lead and tungsten flotation (Vick, 1990). Mine site runoff, although usually a much smaller volume of water than the process sources mentioned, could include contaminants associated with industrial site activities such as hydrocarbons and metals, and nitrate and ammonia residues from blasting practices using ammonium nitrate (Vick, 1990).  Mineral processing wastes may also produce additional hazardous chemical reactions after disposal, which may persist for many years or centuries after mine closure. For example, acid can be generated in mine wastes through the oxidation of iron sulfide minerals (pyrite). The extraction and milling operations of mining expose large volumes of sulphide rock, potentially increasing the rate of acid rock drainage (ARD).  Current methods of A R D reduction include minimization of contact between mine wastes and the primary A R D reaction constituents, water and oxygen. These methods include: •  permanent waste submergence under water in dammed reservoirs, natural lakes, or marine disposal,  •  prevention of waste contact with water through encapsulation or drainage, and  •  chemical treatment.  Based on the high potential for acid generation in many mine wastes and the difficulties in preventing this outcome, A R D has been described as the largest environmental problem facing 9  the mining industry in the United States (U.S. Forest Service 1993, Ferguson and Erickson 1988, Lapakko 1993). The success of A R D prevention through waste submergence or drainage is heavily dependent on the successful prediction of water management and impoundment water balance. Risk analysis of hydrologic variables may be an effective method of predicting the probability of submergence over the long term.  2.2  Tailings Disposal Methods  Waste from mining operations can be disposed by a number of methods which depend on local geography and hydrology, and on the nature of the waste to be stored. The main by-product of processing rock for the purpose of extracting minerals is a tailings slurry. Generally, the water content of the tailings slurry is high enough to transport the slurry along a channel or it may be pumped through pipelines to a disposal area. The common disposal methods include deposition in: •  storage reservoirs, either in existing pits and depressions or behind engineered embankments;  •  underground spaces, such as old mine works,  •  the environment, such as discharge to a river, lake, or ocean; and  •  dry waste dumps on land.  Tailings storage impoundments bound by engineered tailings dams are the most common form of disposal (ICOLD, 1996) and are the focus of this research and software product development. 10  2.3  Tailings Impoundment Design  Tailings impoundments typically include the construction of dams and the development of waste reservoirs behind the dams. The dams are commonly constructed of mill tailings, mine waste rock, or "borrow material" such as earth or rock fill.  The challenges of building effective tailings dams are significant when it is understood that, according to the World Register of Mine and Industrial Tailings Dams, tailings dams are amongst the largest dams in the world, with at least eight dams higher than 150 metres and over 130 dams higher than fifty metres. Also, six impoundments have a surface storage area greater than 100 km and a storage volume greater than 50,000,000 m 2  3  (ICOLD, 1996). However,  inadequate design of even small dams can have significant consequences on the downstream inhabitants and environment.  Tailings dams share common structural features and design standards with earth fill embankment dams (Figure 2.1). Tailings dams are earth fill construction dams typically consisting of a core of waste rock or borrow materials (soil or rock) and completed with raises of spigotted, cycloned tailings material (Figure 2.2). However, some notable differences in their use and construction require unique planning and design approaches. For example, in contrast to water conservation or flood-control dams, the major part of the stored volume behind tailings dams is comprised of the solid fraction of tailings (Cassidy and Hui, 1990). Also, tailings dams are designed to be abandoned within a relatively shorter period of time than water retention dams.  11  Tailings impoundments need to be designed with both active life and post-closure in mind. Particularly, the dam will be designed for safe abandonment, little or no long-term maintenance, and restoration to a suitable land use and vegetation cover. Dam construction is usually ongoing during mine operation. Tailings dam designs need to be made simple and robust to allow for less than perfect construction control by mine operators.  Tailings impoundments are typically located in a topographic depression where the number and size of impoundment dams can be minimized. Valley sites are often selected, which can result in the need for embankment of the tailings on only the downstream side (Figure 2.3). In some valley locations, both the upstream and downstream sides require embankment. Off-valley sites may require embankment around the full perimeter of the stored waste. Off-valley sites have the disadvantage of a lower storage volume to confining embankment volume, but the amount of natural runoff to be controlled may be significantly reduced. Existing pits, such as former open cast or underground workings, can also be used for tailings impoundment and may need to be supplemented with embankments.  Tailings dam design techniques involve a series of successive lifts or dam raises during operation of the mine (Figure 2.2). In the case of embankments constructed from tailings material, a procedure called hydrocycloning may be used to separate fine material and water from the somewhat larger diameter granular material to be used in dam construction. Dam lifts may occur continuously with the deposition of tailings, annually during optimum dryer construction seasons or on a more infrequent basis as required by the characteristics of the impoundment area.  14  Water and material balance is commonly calculated on a monthly basis to predict and schedule the dam height requirements. Methods such as the finite difference analysis performed by Consoli (1997) have been developed to estimate the reservoir filling and detailed sedimentation patterns of tailings behind dams. Consoli's numerical analysis successfully predicted the filling of a reservoir with bauxite mine tailings as well as the longitudinal underwater slope profile formed by the solids during the process. However, Consoli's model focuses solely on tailings deposition, whereas both water and other waste material inflows are significant in the overall filling of tailings impoundment reservoirs. Models related to water and material balance are presented in Section 3.3.  2.3.1  Design Floods  Tailings impoundment and dam design raises requires consideration of two separate hydrologic conditions: average inflows and extreme floods.  Impoundments are usually designed using  annual or monthly average hydrologic data combined with the capacity of the dam to hold a socalled Environmental Design Flood (EDF). Additional freeboard above the predicted EDF level is allowed for to account for wave action and to provide a margin of safety (Figure 2.1).  A common method of controlling large floods is through storage rather than periodic controlled releases. Storage avoids the recurring necessity of expensive and sometimes difficult treatment of contaminated water prior to release (Vick, 1990). Tailings impoundments can be designed and operated as "no release" systems that store all flood, precipitation and mine water inflows. 16  The only allowable loss in through evaporation and minimal seepage through the dam. This method of operation prevents release of contaminants to the environment. However, in some situations topographic constraints or material availability may restrict embankment height and impoundment volume and occasional controlled or scheduled release may be permitted. Also, large annual precipitation rates or high rates of mill water discharge may make storage of flood inflows unfeasible and occasional releases from the impoundment the only option. In addition, although an impoundment may be designed as a "no release" system that is capable of storing large floods, extreme events may be spilled via an emergency spillway.  The Canadian Dam Association (CDA) has developed Dam Safety Guidelines (DSG) for dam design in Canada (Canadian Dam Association, 1999).  The guidelines are intended to apply to  dams, including tailings dams, if they are at least 2.5 m high and have a minimum of 30,000 m  3  of reservoir capacity. The guidelines also apply to smaller dams where the consequence of failure is classified as "Low" or greater.  Such small dams may include dams retaining  contaminated fluids.  Previous versions of the DSG included a definition and use of the term "Environmental Design Flood" (EDF) for tailings or industrial dams impounding contaminated water or solids. The impoundment was to be designed to contain an EDF and pass an Inflow Design Flood (IDF). The EDF terminology was dropped in the 1999 version of the DSG and only the volume of the IDF referred to in the guidelines. However, this EDF terminology is quite useful in tailings impoundment design analysis to differentiate between that flood which must be passed without 17  failure of the dam and that flood which must be contained without spilling from the impoundment. The EDF terminolgy is adopted in the Visual Balance program.  The volume of the EDF which the impoundment must contain is often more critical in dam crest elevation determination and impoundment design than the IDF magnitude, which is relevant in the sizing of an emergency spillway. This EDF volume is dependent on the consequence of effluent release which, in turn, is dependent on downstream conditions, release quantity, and effluent quality. For instance, a water release from an impoundment to a downstream sensitive aquatic habitat during a critical ecological period, such as spawning periods, may have severe impacts. If the IDF volume is greater than the EDF volume, dam crest raises are dependent on the EDF and the IDF would determine other design factors, such as spillway capacity and surface water diversion capacity requirements.  Tailings impoundments are usually designed to pass and/or retain a design flood before and after closure. The operating structures associated with the life of the mine may be considered to have a finite life of a few decades. However, some structures will need to be designed or extended to account for the fact that they may be permanent structures. Many regions require essentially the same design flood and seismic criteria during operation as after closure (ICOLD, 1996).  Selection of the design flood typically depends upon the consequences associated with potential failure, such as loss of life, environmental impact and economic loss. Table 2.1 shows the C D A classification system for dams in terms of consequence of failure included in the DSG. This 18  classification is used to determine the appropriate flood and earthquake magnitudes to use in dam design. Table 2.1 Classification of Dams in Terms of Consequence of Dam Failure (CDA, 1999) Consequence Category  Potential Incremental Consequences of Failure Life Safety  (a)  Socioeconomic Financial & Environmental ' (b)  (c)  Very High  Large Number of Fatalities  Extreme damages  High  Some Fatalities  Large damages  Low  No fatalities anticipated  Moderate damages  Very Low  No fatalities  Minor damage beyond owner's property  (a)  Incremental to the impacts which would occur under the same natural conditions (flood, earthquake or other event) but without failure of the dam. The consequence (i.e. loss of life or economic losses) with the higher rating determines which category is assigned to the structure. In the case of tailings dams, consequence categories should be assigned for each stage in the life cycle of the dam.  (b)  The criteria which define the Consequence Categories should be established between the owner and regulatory authorities, consistent with societal expectations. Where regulatory authorities do not exist or do not provide guidance, the criteria should be set by the owner to be consistent with societal expectations. The criteria may be based on levels of risk which are acceptable or tolerable to society.  (c)  The owner may wish to establish separate corporate financial criteria which reflect their ability to absorb or otherwise manage the direct financial loss to their business and their liability for damage to others.  The C D A D S G state that large dams shall be evaluated for safety and include a spillway structure designed to pass an Inflow Design Flood (IDF). The magnitude of the IDF is based on the potential consequences of dam failure (Table 2.2). For new dams with "very high" or "high" consequences of failure, the C D A states that the maximum design floods at the dam site shall be evaluated by both "statistical analysis and deterministic methods".  19  Table 2.2 Usual Minimum Criteria for Inflow Design Floods (CDA, 1999) Consequence Category Very High High  Inflow Design Flood (IDF) Probable Maximum Flood ( P M F )  (a)  Annual Exceedance Probability (AEP) between 1/1000 and the P M F ( b )  Low (a)  (b)  (c)  AEP between 1/100 and 1/1000 (b)  (c)  An appropriate level of conservatism shall be applied to loads from this event, to reduce the risks of dam failure to tolerable values. Thus, the probability of dam failure could be much lower than the probability of extreme event loading. In the High Consequence category, the IDF is based on the consequences of failure. For example, if one incremental fatality would resultfromfailure, an AEP of 1/1000 could be acceptable, but for consequences approaching those of a Very High Consequence dam, design floods approaching the PMF would be required. If a Low Consequence structure cannot withstand the minimum criteria, the level of upgrading may be determined by economic risk analysis with consideration of environmental and social impacts.  Failure during an extreme flood event does not necessarily represent poor design. Acceptance of an IDF volume of less than the PMF implies acceptance of a finite possibility of failure. This tolerance of risk is an accepted practice if the consequence of failure are less than the C D A "very high" rating. Moreover, non-failure of such engineered features does not necessarily represent a successful design.  Over-design of hydrologic structures is costly and reduces the  competitiveness of the company paying for the structure. Therefore, effective methods are required that accurately predict water balance, such that hydrologic engineering features and design account for both safety and economy.  The C D A suggests two methods for the derivation of the IDF. The first method is based on the Probable Maximum Flood (PMF) hydrograph and the second on a flood hydrograph with a  20  specified Annual Exceedance Probability (AEP). After an appropriate IDF peak flow rate and volume are determined for the project, the next task is to review or develop the corresponding hydrograph. This hydrograph is used to assess the freeboard and spillway capacity.  The C D A provides guidelines for the derivation of the PMF which should be the most severe "reasonably possible" combination of rain, snow, snowmelt, and antecedent conditions. Antecedent conditions include impoundment water levels and preceding storms.  It should be noted that recent advances in earth fill dam design and construction have enhanced the possibility of overtopping an earth fill embankment without a resulting breach. Protection methods for the crest and downstream slopes of the dams have increased the feasibility of such a solution in certain situations, particularly where it is not physically or economically feasible to increase the spillway capacity (Murthy, 1991). Nevertheless, the outstanding issue with industrial tailings storage impoundments is that uncontrolled release of effluents may not be desirable or permissible due to potential deleterious downstream impact. In such cases, appropriate water management and embankment design are the remaining options for increased protection of the impoundment.  2.3.2  Design Freeboard  For safety and stability reasons, embanlanent dams are designed with freeboard. Freeboard is meant to ensure the safety of the dam against overtopping in the event of the EDF, an extreme 21  wave event caused by winds or seismic activity, or a combination of such conditions. Freeboard is the vertical distance between the referenced water surface elevation and the crest of the dam (Figure 2.1). In this study the term minimumfreeboardis used to describe the distance between the water surface and the dam crest when the water level is at the design flood elevation or EDF (Figure 2.1). Visual Balance computes all freeboards similar to minimum freeboard.  Normal freeboard is defined as the difference in elevation between the crest of the dam and the normal reservoir water level as fixed by design requirements (Figure 2.1). Normal freeboard may be equal to the minimum freeboard in the design of small dams less than 15 metres high where a gated spillway is in place to pass large floods and the surcharge during an IDF is 1  minimal (USBR, 1987). In such a case, the scenario of average water levels combined with extreme wave action, may be the limiting condition for determination of normal freeboard.  The freeboard requirement for tailings dams is often a somewhat subjective estimate made by a knowledgable engineer based on consideration of the following four factors. •  height of wind tide or wind set up,  •  height of waves induced by wind shear,  •  wave run-up on sloping embankments, and  •  additional minimum freeboard for contingencies.  In the case of uncontrolled spillways, there is always a surcharge head created during a large flood (USBR, 1987).  22  Similar to the selection of a design flood frequency, the wind event frequency to be used in the freeboard estimation is typically determined by the dam consequence rating.  Wind exerting a horizontal stress on the free water surface produces a set up effect which raises the water level on the leeward shore and lowers it on the windward side. Wind induced waves and the concept of significant wave height are also a consideration in freeboard selection. Wave run-up is the vertical height a wave will flow up a sloping surface after the wave breaks near or on the embankment. Wave run-up might range from one to three times the wave height for smooth surfaces and approximately one half the wave height for very rough surface such as riprap (Davis, 1969).  Additional freeboard contingencies on the order of 0.3 m to 1.5 m could be provided at dams to account for errors in estimates (Eichert et. al, 1982), although this is not a common practice for tailings dams in British Columbia. This contingency will depend on the quality of the data and data analysis, risk and height of the embankment, and type of embankment construction used. International Standards Code: 10635-1983 "Freeboard Requirements in Embankment Dams," stipulates that freeboard should be determined based on wind set-up and wave run-up. In cases where such information is not available, the code indicates that the normal and minimum freeboard should not be less than 2 metres (Murthy, 1991). It is interesting to note that an observation of design practices for British Columbia tailings impoundments reveals that these dams often operate with a minimum freeboard less than this ISO recommendation. Many  23  tailings dam design practitioners believe the C D A - D S G and associated guidelines to be too conservative for short term tailings impoundment operations. However, long-term closure scenarios must include adequate freeboard provisions.  2.3.3  Surface Water Management  Control of water is essential to the safety of dams constructed using the upstream construction method. The majority of failures of these dams has been due to water causing erosion of the dam face or undesirable pore pressures within the dam (ICOLD, 1996). The design of suitable drainage during construction is required to ensure an effective system. Surface water diversion around the impoundment is one method of reducing water volumes in the reservoir. Diversion efforts may include directing major watercourses around the tailings impoundment (Figure 2.3).  Diversion of natural runoff is often a significant factor in the design and eventual success of a tailings impoundment operation. The diversions may be necessary to maintain design freeboard, to avoid generating contaminated surface runoff, or to reduce the volume of water requiring treatment. As well, in some jurisdictions, runoff diversion is a requirement of impoundment operation (ICOLD, 1996). Failure of the diversion system may lead to overtopping or total failure of the embankment. Water balance at the impoundment site can be used to determine the fraction of surface water requiring diversion and the associated capacity of the diversion systems.  24  2.3.4  Regulatory Requirements and Guidelines in British Columbia  In Canada, mining activities are regulated primarily by provincial legislation and some federal legislation. In British Columbia, the Mines Act (1989) and the Mine Development Assessment Act (1990) govern mining activities and comprehensive environmental assessment of proposed mine developments. A revision to the Mines Act (1992) included an expanded Health, Safety and Reclamation Code for mines in the province. One of the specifications regarding A R D and secure underwater disposal of tailings or waste rock is that the proponent must show that the water balance ensures that all potentially acid-generating waste will be continuously covered by water and that there will be no significant impacts as a result of wave action, ice, avalanches, flooding, earthquakes, thermal overturn and other natural factors. Effective water balance methods and predictive, risk analysis models are necessary tools for the assurance of underwater disposal and safety.  Water management and environmental performance of tailings impoundments in British Columbia also fall under a variety of related federal and provincial regulations. The federal Metal Mining Liquid Effluent Regulations (1977) include authorized limits for metals and suspended solids in, and the radioactivity and pH of, effluent discharge from all base metal, iron ore, and uranium mines in Canada which commenced operation after February 25, 1977. The federal Fisheries Act prohibits the discharge of substances harmful to fish and their habitat in all Canadian fish bearing water except as authorized by federal regulations (Fisheries Act, 1996).  25  The provincial Water Act requires proponents to obtain licences to conduct any work involving, among other water related issues, changes in and about a stream. These changes may include modification of a stream by diversion or improvement, or any act or construction within, or has the potential to impact, a stream (BC Water Act, 1996). Activities involved in mine site development and operation, such as controlled water releases and stream diversion works, are governed by these Acts and Regulations.  The Canadian Dam Association (CDA) has developed guidelines for dam design in Canada. However, the C D A has no regulatory capabilities. The guidelines are intended to apply to dams if they are at least 2.5 m high and have at least 30,000 m of reservoir capacity, and also apply 3  to smaller dams where the consequence of failure is classified as "Low" or greater. Such small dams may include dams retaining contaminated fluids. The C D A classification system is included in Section 2.3.1  The Mining Association of Canada has also produced " A Guide to the Management of Tailings Facilities" (1998). This Guide includes: •  .  a framework of management principles, policies and objectives;  •  checklists for implementing the framework through the life of a tailings facility; and  •  lists of technical considerations.  The Guide is an extension of The Mining Association of Canada (MAC) Environmental Policy and the M A C Environmental Management Framework specifically applied to tailings 26  management. It is designed to help companies practice due diligence and define the requirements to achieve due diligence by managing their tailings facilities responsibly and safely, and to demonstrate this to regulators and the public. Rather than detailed design guidelines or requirements, this Guide presents a framework to manage tailings facilities in a safe and environmentally responsible manner through the full life cycle of a tailings facility: from site selection and design, through construction and operation, to eventual decommissioning and closure. It is meant to be adapted to specific sites, individual company policies, and local regulatory and community requirements (MAC, 1998).  2.4  Tailings Impoundment Failures and Accidents  Many tailings impoundment failures have received wide public attention due to resulting loss of life or environmental damage. The failures of Aberfan coal waste dump in Wales (1966) and Buffalo Creek coal waste tailings dam in West Virginia, U S A (1972) each caused over 100 deaths. These failures were followed by Stava, Italy (1985) which caused over 200 deaths. Numerous more recent accidents and failures concerning water management and tailings dams, including Los Frailes, Spain (1998), E l Porco, Bolivia (1996), Omai, Guyana (1995), and Merriespruit, South Africa (1994) have raised public concern about the safety and potential environmental impact of these structures (see Section 2.4.1 for Case Studies). On behalf of UNEP, the Mining Journal Research Services (MJRS) conducted a survey and produced a report entitled Environmental and Safety Incidents Concerning Tailings Dams at Mines (MRJS. 1998). The International Commission on Large Dams (ICOLD) also contributed to the survey. The 27  MRJS study included the results of a survey for the years 1980-1996. The objectives were to identify: •  common types of environmental and safety impacts,  •  the actual frequency of such incidents,  •  the environmental and human consequences of such incidents.  The survey collected details from 52 separate incidents in numerous countries between 1980 and 1996. Five incidents involved loss of life, the remainder caused primarily environmental damage and property loss. Most incidents reported were associated with a failure in the dam wall but seepage and discharge of effluent, hazardous dust, damage to habitats, and wildlife poisoning were also recorded.  It should be noted that the survey was unable to give a complete picture of the extent of the problem as it found that few countries collect systematic statistics on tailings dam incident and there is no common format for reporting. Moreover, many countries did not respond to the questionnaire. Some examples of recent impoundment failures, particularly those with water management issues identified as causal factors, are provided in the following section.  2.4.1  Failure Case Studies  In the last decade, a number of tailings dam failures have received widespread public attention due to the loss of life and environmental impact caused by the incidents. The following includes 28  selected examples where water management and hydraulic failure as the likely or suspected cause of the failure.  The Merriespruit, South Africa tailings dam failure in February 1994 resulted in the loss of 17 lives, severe destruction of property, and widespread environmental damage. In the inquest that followed the disaster, the judge called the tailings dam a "time-bomb waiting to explode" (Wagener et. al., 1998). The failure involved the collapse of a 31-metre high tailings dam upslope of the suburb of Merriespruit and the release of 600,000 m of tailings which flowed 3  through the town. The dam failed a few hours after approximately 50 mm of rain fell in 30 minutes during a thunderstorm.  Tailings management, surface water management and dam construction problems have been identified as the main causes of the Merriespruit failure (Wagener et. al, 1998). The proximity of the water table to the northern embankment crest over a number of years, and the rapid deposition rate of tailings in the impoundment, led to a poorly consolidated tailings dam and increased seepage through the embankment. Moreover, only 300 mm of vertical freeboard between the tailings solids and dam crest was maintained in the period preceding the failure. In some places in the impoundment, the freeboard was only 150 mm. It was established that overtopping, as a result of inadequate freeboard, was the primary cause of failure.  The Merriespruit disaster may have been avoided had the mine not been exempt from the Safety of Dams regulation (South African Water Act No. 54, promulgated in 1986), which states the 29  impoundment must maintain capacity for the containment of a 1-in-100 year 24 hour storm event (EDF) and a minimum 0.5 metre freeboard above that EDF.  Boliden's 1998 disaster at their Los Frailes mine in southern Spain is another recent example of a tailings impoundment failure. This failure caused serious environmental damage and public alarm. The tailings solids and contaminated water release was diverted from Donana National Park by quickly built dykes and sent to Guadalquivir River which empties into the Atlantic Ocean. Estimates indicate that over 2,000 hectares of agricultural and undeveloped land were contaminated directly by the spill.  Reports suggest that Boliden will spend up to US$34 to US $60 million in clean up and compensation costs (MacKenzie, 1998 and Anthony, 1999). The new Los Frailes operation, scheduled to reopen in early 1999, will use an abandoned mine pit with a depth of 270 metres for the disposal of tailings (Anthony, 1999). This pit had previously been used for the disposal of waste rock. Some early indications suggest four months of greater than average precipitation preceding the failure may have resulted in the dam breach (Mining Environmental Management, 1998). Three studies have been carried out to investigate the cause of the disaster.  GEOCISA, the company that originally designed and built the tailings impoundment, was retained by Boliden as consultants to advise on the stability of the existing dam and design requirements for extensions to the tailings impoundment. The last investigation was carried out on April 14, 1998 to establish the stability of the structure in the light of very high levels of 30  precipitation that had been experienced over the winter. The company submitted its report five days before the failure happened and, according to Boliden, declared the embankment to be stable.  The mine tailings storage facility collapse near Stava, Italy in July 1985, resulted in 268 lives lost and caused considerable property damage. In this case, it was concluded that the dams were constructed with an unacceptably low factor of safety and circumstantial evidence supports the conclusion that the failure was triggered by a blocked decant pipe located within the tailings (Chandler and Tosatti, 1995).  One of the most devastating tailings disasters in the last century was the Aberfan, Wales disaster in 1966 that resulted in more than 100 lives lost and extensive property damage. The coal tip was located on a steep slope and failed due to a flow slide of oversaturated coal waste. Inadequate water management was the cause of the slide: the coal waste was deposited without underdrainage or attention to precipitation and runoff control (Williamson, 1990).  2.4.2  Failure Causes  The JvlJRS study conducted on behalf of UNEP indicated that inadequate water management and hydraulic design were the cause of the majority of the accidents or failures recorded at mine tailings impoundments. While deficient design and maintenance standards are typically the cause of failures, the trigger of the failure is often a natural event such as heavy rain or an 31  earthquake (ICOLD, 1996). Hydraulic failure in the form of overtopping by flood discharge accounts for nearly 40% of all the earth dam disasters in the world (Murthy, 1991).  Control of the location of the phreatic surface, which is the internal water level within the embankment, is a critical factor in the behaviour and overall stability of an earth filled dam (Figure 2.1).  The phreatic level governs the susceptibility of the embankment to  seepage-induced failure and the performance of the dam under static and seismic loading conditions (Vick, 1990). The phreatic level should be kept as low as possible and is dependent in part on the material deposition practices, dam construction methods, and water levels maintained in the reservoir. A n effective water management plan at a site can assist in the maintenance of a low internal phreatic surface.  The MJRS (1998) report suggests that much progress in dam safety has been made in recent years, but that additional effort is needed by mining companies and the authorities to minimize the risk of incidents. The report advocates widespread adoption of improved design, construction and operational practices for tailings impoundments, and the stipulation of safer practices through legislation.  32  CHAPTER 3.0  WATER AND MATERIAL BALANCE  A water and material balance is used to predict the monthly and annual progression of solids and water levels in the tailings impoundment throughout a life of the mine. The results of the water and material balance are used to determine critical impoundment design elements, including dam crest elevations, spillway invert elevations and capacity, surface water diversion capacities, and closure scenarios. These water management features perform a significant role in the protection of the hydraulic integrity of tailings dams at impoundment sites. The following sections introduce the concept of water balance, the algorithms used in tailings impoundment water and material balance, models available for conducting impoundment balance, and risk and uncertainty concepts associated with such balances.  3.1  Introduction  The concept of water balance has different meanings for the various specialists involved in water resource problems.  On a small scale in the natural sciences, climatic water balance is  understood to be the balance between the income of water in the form of precipitation and snow melt, and the outflow of water in the form of evaporation and runoff. Methods for estimating water balance have existed in the literature since at least 1944, with the Thornthwaite Climatic Water Balance method (Thornthwaite, 1955). Larger scale water balance may refer to a regional or global scale water budget.  33  Although climatic water balances are useful for predicting runoff rates or streamflow, additional components must be considered for monitoring industrial waste storage reservoirs. In this thesis, water balance refers to water inflows and outflows to a reservoir, similar to climatic water balance, but will also include anthropogenic sources (slurries and effluent) and reservoir storage concepts.  Water and material balance at industrial waste storage reservoirs requires accounting for waste solids and slurries, as well as inflow of water in the form of precipitation, snow and glacier melt, effluent water. The outflow or loss of water via evaporation, runoff, infiltration, process reclaim water, planned releases and water treatment withdrawals must also be included in the balance.  The volumetric balance for water and solids in an impoundment is commonly conducted on a monthly basis and can be expressed by a modified water balance equation, accounting for solids inflow, as follows in Equation 3.1.  7 + 7 + 7 p  r  gw  +I  sw  +I  mw  +I  gr  +I - O s  E  - O  gw  where, I  p  =  direct precipitation (m )  I  r  =  catchment runoff inflow (m )  I  gw  =  groundwater inflow (m )  I  sw  =  slurry water inflow (m )  3  3  3  3  34  - O - O v  rc  - O  sr  = AS  \  n\) '  /  mine water inflow (m ) 3  kr  groundwater recovery or treated water return (m ) 3  =  solids inflow (m ) 3  Is o  E  total evaporation from impoundment pond and beaches (m ) 3  =  groundwater seepage outflow (m ) 3  o  v  o o  r c  sr  -  loss to solids voids, which may include water and solids loss to voids (m )  =  recycle or reclaim water outflow (m )  =  spills or release water that may include release to a water treatment facility (m )  3  3  3  change in storage volume (m )  AS  3  Figure 3.1 shows a schematic representation of water and material inflows and outflows at a mine tailings impoundment.  Because of the potential environmental damage associated with release of untreated water, it is nearly always preferable to operate a tailings impoundment as a closed system, without water releases, O . However, confident closure of the water balance equation in practice will be a sr  problem dependent on the inherent errors involved in the parameters of the equation (Ferguson and Znamensky, 1981). The error could be represented by the addition of an error term in the equation to represent the net effect of all errors of the estimate. Alternatively, uncertainty in the equation parameters can be addressed through risk analysis. This second approach has been adopted in the current study (Chapter 5).  35  •s a 03 O  M | w  C <u  .  <u A Vi u o  « is  TS  c s o u  o A  V  s  o o o  E JC o  <0 o o c _ro  CD is •+-•  re 13 C  re i_ o +J re  -  V4  E  T3 C 3 O Q.  E  tn  o _c "re  co  3.2  Water and Material Balance Calculations  The following sections present the equations used to calculate the inflow and outflow parameters included in the general water and material balance equation (Equation 3.1). A number of these algorithms, particularly the solids inflow volumes and "loss to voids" calculations, are based on parameters and equations routinely used by practitioners of mining engineering in British Columbia. Some of these equations could be simplified and the loss to tailings voids term is essentially redundant. However, since the Visual Balance program was intended to be a tool for local mining engineers, these standard equations were used in the program to increase user understanding and comfort. Further explanation of calculation conventions is included in the individual sections describing each inflow and outflow parameter.  Visual Balance data input forms and files are referred to briefly in the sections that follow, however data input and saving procedures within the software program are discussed in detail in Section 4.0.  3.2.1  Water Inflow Calculations  Direct Precipitation. I  p  Direct total precipitation depth values for each month are input by the user into a standard Excel hydrological data input file as averages in units of mm/month. Visual Balance estimates the volume of direct precipitation from the average monthly values using Equation 3.2. 37  I = p  p in 1,000  (3.2)  • A • 10,000  where, monthly direct precipitation volume (m ) 3  P,  average monthly precipitation depth (mm)  A,.  impoundment reservoir surface area (beginning of the month reservoir surface area used in program calculations (ha))  Catchment Runoff. I  r  The user inputs, R , average monthly runoff depth estimates. d  The monthly runoff is then  calculated using Equation 3.3. The total reservoir catchment area, A , is input by the user. The tc  actual catchment area, A , contributing the runoff is equal to the total catchment area minus the c  reservoir surface area. The reservoir surface area is adjusted based on the water level in the impoundment. There is a provision that accounts for the "fraction of runoff diverted", input through the Reservoir Information form, which is then factored into the runoff estimation. This results in the contributing catchment area being considered in the calculation of runoff as follows:  1,000  • A • 10,000 • (1 c  (3.3)  fj  where, monthly runoff volume inflow (m ) 3  38  monthly catchment runoff depth (mm) total reservoir catchment area (ha), fraction of runoff diverted  The risk analysis employs a similar approach to Equation 3.3 for estimating stochastic runoff values. Section 5.3 includes details of the statistical approach used for random runoff volume generation.  Groundwater Seepage. I „, g  Groundwater seepage into the reservoir from the catchment area is input by the user as a constant rate through the Reservoir Information form. This rate is not changed for the risk analysis and is calculated on a monthly basis using Equation 3.4. =R  I  gi  •D  in  -24  (3.4)  where, I gw  monthly groundwater inflow volume (m ) 3  groundwater inflow seepage rate (m /hr) 3  D  m  days in month  TaiHngs Slurry Water Inflow. 1^ Mine tailings are typically pumped to the impoundment in a slurry. The rate of slurry water inflow, not including solids in the slurry, is input as a constant rate by the user and the volume  of slurry water flowing into the tailings impoundment is calculated in the code as follows: I  =R sw  • OD sw  • 24  (3 5)  m  V-^'-V  where, I  sw  R  sw  OD  m  =  monthly slurry water inflow volume (m )  =  slurry water inflow rate (m /hr)  =  operating days in a given month (days)  3  3  Minewater Inflow. I„,  v  Water inputs from the mine site can include minewater that is collected drainage from pits or underground operations. Monthly volumes of minewater are computed using the constant minewater inflow rate input by the user as follows: /  =R mw  • OD • 24 mw m  (3.6) V-^ v ,v  where, I  mw  R  m w  =  monthly minewater inflow volume (m )  =  minewater inflow rate (m /hr)  3  3  Groundwater Recovery or Treated Water Return. I  gr  Lastly, water management at some tailings facilities includes groundwater seepage recovery or the return of treated water to the impoundment. Miscellaneous sources of inflow water have been included in the groundwater recovery term, I  gr  the user and I is determined as follows: gr  40  A constant rate of return, R , is input by gr  I  =R  gr  •D  gr  m  • 24  (3 7) \  u  • ' J  where, I  gr  R  gr  3.2.2  =  monthly groundwater return inflow volume (m )  =  groundwater or treated water return inflow rate (m /hr)  3  3  Solids Inflow Calculations  The inflow volume of total solids and voids to the impoundment can include waste rock, tailings, and solids voids is expressed as: =  't,  +  (3-8)  ^  where, I  Tl  I  Twr  =  total tailings and voids volume (m )  =  total waste rock volume, including voids (m )  3  3  It is necessary to account for the void volume in order to continuously simulate the elevation of the solids. This is especially important where tailings require permanent submergence to minimize acid generation.  The equations used to estimate the total volume inflow of tailings and waste rock are provided separately below. The properties of the input solids are input through the Mine Production form  41  is Visual Balance. The variables used to describe the basic, physical phase components of the solids are as follows : 1  M  =  Total Mass of solids and water (tonnes)  V .  =  Total volume of solids, water and air filled voids (m )  M  =  Mass of solids (tonnes)  =  Volume of solids (m )  =  Mass of water (tonnes)  T  x  V  s  s  M  w  3  3  V  w  =  Volume of water (m )  V  v  =  Volume of voids (m )  3  3  Total Tailings Inflow Volume. I  tt  The principal physical input parameters for the tailings solids are as follows: Tonnes of tailings solids produced per month  Ms,  Coarse fraction cycloned out  /;,(o<f <i)  Degree of Saturation, S  V  Tailings dry density, p  c  r  dt  /V  v t  (3.9)  M /V  T t  (3.10)  w t  S t  Tailings in situ void ratio, e  V /V  t  v t  s t  (3.11)  The degree of saturation, S , can range between the limits of zero for a completely dry soil and r  one for a fully saturated soil (Craig, 1989). A fully saturated soil is a two-phase composition,  i  Subscripts oft" and "wr" denote the parameters relating to tailings and waste rock respectively.  42  consisting of solid soil particles and pore water only. However, the solid waste in a tailings impoundment has the potential to be exposed on beaches, which would imply a three-phase composition of solids soil particles, pore water and pore air (Figure 3.2). The model assumes a level surface of solids deposition. However, if the tailings are expected to be exposed, the degree of saturation can be set to some number less than 1 by the user.  The inflow volume of tailings solids and voids to the reservoir can be expressed as:  s, = — M  ' ( 1 ~fc >  (3-12)  Total Waste Rock Inflow Volume. I  1Trt  The input parameters characterizing the waste rock are: Mass of waste rock solids produced (tonnes)  M  S w r  Total mass of waste rock (tonnes)  M  T w r  Total volume of waste rock, including voids  V  T w r  Bulk Density, p^, (tonnes/m )  M  T w  2  3  Waste rock insitu void ratio, e  v  wr  v  / V  T w r  (3.14)  vVc vwr  v  (3.13)  Swr  Fraction of total waste rock generated that is deposited in the impoundment and submerged  2  Lri , (0 < fwri * 1)  Mass of waste rock solids, M , is equal to the total mass of the waste rock, M , if the waste rock is dry. Typically, waste rock is assumed to be dry when deposited in the tailings impoundment. S w r  Twr  43  The total volume inflow of the waste rock per month, including voids, I  I.Twr  M  3.2.3  is given by:  (3.15)  wri  P,wr  wrt  Water Outflow/Loss Calculations  Water is lost from the tailings impoundment primarily due to evaporative loss from the reservoir and the embankment beaches, and groundwater seepage through the dam. It is common practice in mining engineering in British Columbia to also view water as "lost" to the tailings voids. The volume of water "lost" to solids voids affects only the volume of free pond water, above the elevation of the solids, that is readily available for recycle. However, the total volume of material in the impoundment is not affected by this water "loss" to voids. Moreover, the elevation of the water table in the impoundment is not affected by the volume of water retained in solids voids.  Evaporation. Q  E  The monthly average depth of evaporative loss from the impoundment and its beaches is input by the user through the Excel hydrologic data file. The total evaporative loss can be expressed as: 0^ = 0 E  re  + o be  (3.16)  45  where, 0  E  O  re  =  total evaporative loss (m )  =  evaporation from reservoir pond  3  (3.17)  E — • A • 10,000 1,000 O  hll  =  evaporation from dam beaches b  1,000  (3.18)  . a b  where, E  r  =  monthly depth of evaporation from the pond surface (mm)  A  r  =  reservoir pond water surface area (beginning of the month A used in program calculations (ha)  E  b  =  monthly depth of evaporation from beaches (mm)  A  b  =  embankment beach area (m ) 2  The reservoir pond water surface area at the beginning of each month is used in Equation 3.17 to calculated the volume of loss due to evaporation for the subsequent month.  Groundwater Seepage Out of Reservoir, Q„  1V  Outflow of water from the impoundment also occurs due to groundwater seepage, mine recycle or reclaim, and controlled spills and releases. Each of these outflows is input by the user as a 46  rate in cubic metres per hour. The balance simply calculates the volume of loss by multiplying the rate by 24 hrs/day and the number of days in the month or operating days in the month as the case may be.  Water "Lost" to Voids. O  r  Water is also considered to be "lost" in the balance to the voids in tailings, waste rock, tailings dams, and any other waste solids that are deposited in the impoundment. The properties of the solids are input through the Mine Production form and include degree of saturation, specific gravity, bulk density and void ratio (Section 3.4.2). Total loss to solids voids can be expressed as follows:  0 = 0 + 0 v  (v  (3 \9) wrv  Vy •  1  y  !  where, O  v  O  lv  O  wrv  =  total volume of water lost to solids voids (m )  =  volume of water loss to tailings voids (m )  =  loss to waste rock voids (m )  3  3  3  Loss to the tailings voids is then calculated using production in tonnes per day (tpd) and a specified number of operating days per month (dpm) as follows:  47  (3.20)  e +1 (  where, S  =  rt  in situ degree of saturation, V ^ / V y ,  Some fraction of waste rock voids may become filled with tailings in the impoundment. This fraction of voids filled with tailings is input as "fraction of waste rock voids filled with tailings", f, input through the Reservoir Information form. The loss of water to waste rock voids t  can be calculated using the total waste rock volume and the void ratio of the waste rock as calculated by the following expression:  O  = J_ 1 wr  wrv  1 +e  (3.21)  (1 - / , )  where,  <9  =  monthly loss of water to waste rock voids (m )  I  -  inflow volume of waste rock (solids and voids), (m /month)  f  =  fraction of waste rock voids filled with tailings solids  e  =  void ratio  wrv  Twr  3  3  48  These equations can easily become fraught with errors in spreadsheet applications where the units of production and the phase relationship properties being used are hidden in the spreadsheet. Visual Balance, on the other hand, provides a transparent way of entering solids parameters and estimating the losses with greater confidence.  3.2.4  Solids Loss Calculations  Tailings in Waste Rock Voids. O  sv  Generally, solids are not removed from the tailings impoundment once they have been deposited. However, it is customary within local mining engineering to consider a volume of tailings "lost" to the waste rock voids. The pore spaces within the waste rock will likely be filled with a combination of fine solids (tailings) and water. The user is able to specify the fraction of waste rock pores which are occupied by solids. Thus, lowering and more accurately predicting the elevation of tailings solids in the reservoir.  The loss of tailings solids to waste rock voids can be calculated using the total waste rock volume and the void ratio of the waste rock as calculated by the following expression:  O  = I,Twr  e 1 +e  (3.22)  where, O,  monthly loss of tailings to waste rock voids (m ) 3  49  inflow volume of waste rock (solids and voids), (mVmonth) fraction of waste voids filled with tailings solids void ratio  3.3  Existing Related Water and Material Balance Models  Water and material balance studies during mine feasibility, operation, and closure represent a important component of mine related engineering consulting activities in Vancouver. There, are several firms that undertake this type of work. An informal telephone survey, conducted by the author, of six large Vancouver based engineering consulting firms working in the field of tailings impoundment design indicated that detailed spreadsheet "models" were most commonly used to estimate the water and material balance in mine tailings impoundments. These spreadsheets are highly dependent on the applicability of the default equations and parameters embedded in the spreadsheet and on the accuracy of the input data used. Input data can be generated outside the actual impoundment balance using software programs such as Q U A L H Y M O (Rowney and Macrae, 1992) or HEC-5 and HEC-RAS (USACE, 1998) for parameters such as runoff volumes. These hydrologic parameter generating methods are not currently directly incorporated in the Visual Balance software program created as part of this research study, but the runoff values generated can be used as input to Visual Balance.  On a project specific basis, consultants have created water balance programs and programs to predict water quality at mine tailings impoundments. However, these programs are often written 50  for complicated or special site scenarios. The broad application of these programs to other sites is limited by the specific project operation conditions and practices that are coded into the model.  A number of computer applications have been developed strictly for water balance modelling and runoff modelling. The water balance models typically refer to climatic water balance. Climatic water balances are useful for predicting available water for agricultural activities and runoff rate or streamflow estimates. Although these outcomes of climatic water balance are a component of the overall mine tailings impoundment water and material balance, there is no provision in climatic water balance software for storage in a reservoir, alternate anthropogenic sources of water, or volumes of inflow solids. Selected methods of climatic water balance and their applicability to tailings impoundment applications are reviewed in the following section. The concept of climatic water balance was introduced in literature by Thornthwaite in 1944 (Cho, 1986). Other climatic and runoff predicting water balance methods include the PenmanMonteith, Thornthwaite-Mather, and Evapoclimatonomy III (Lettau and Hopkins, 1991). The Thornthwaite climatic water balance is computed using mean monthly air temperatures, mean monthly precipitation, latitude of the site, information on the water holding capacity of the depth of soil for which the balance is to be computed, and information about snow melt pattern. Water, a Turbo Pascal Version 3.00 computer program, was developed to perform the Thornthwaite Climatic Water Balance calculations (Cho, 1986). Although this program computes the climatic water balance for a given site, no specific provision is made for the concept of reservoirs, water retention, water reclaim, or solids balance.  51  Computer programs designed to simulate the precipitation runoff process have existed for decades. The streamflow simulation models and reservoir system analysis models from the US Army Corps of Engineers, Hydrologic Engineering Centre (HEC) have existed since the mid1970's and is a popular model for runoff estimation and river system analyses (USACE, 1998). The original model was named HEC, and its subsequent versions and developments include HEC-3, HEC-5 and HEC-RAS. S W M M (Huber, 1977), and the USGS Rainfall/Runoff Model for Peak Flow Synthesis (Dawdy, 1972) are two other commonly used streamflow models. H E C models have evolved into MS-Windows based applications that can be used to undertake advanced hydrologic and hydraulic analyses, to predict streamflows, and to model single and multiple reservoir systems.  These programs are particularly useful for creating the input  hydrologic data for a tailings impoundment water balance. However, the actual accounting and modelling of inflow and outflow in the impoundment must still be performed outside these models.  Another significant hydrologic concern associated with tailings disposal is the amount and quality of infiltration and seepage through the impoundment. Seepage flow from the tailings depend on the moisture retention characteristics and the layering of the tailings. The driving force causing water to move through the impoundment is the vertical hydraulic gradient (Schmidt-Petersen et. al., 1999). Estimation of surface water volume and phreatic surface of the impoundment are critical factors in the simulation of this hydraulic gradient. In addition, in the absence of any knowledge of tailings or dam foundation permeability, an upper bound on the  52  estimate of maximum possible average seepage quantity out of the impoundment can be made from the residual of the impoundment water balance (Vick, 1990).  The Hydrologic Evaluation of Landfill Performance (HELP) Model has been used to estimate infiltration and percolation of water through tailings impoundments for the assessment of metals loading and acid affects on the groundwater system (Davis et. al., 1999 and Patton et. al. 1999). HELP was developed for the US Army Corp of Engineers, Waterways Experimental Station for determining the potential for leachate generation at landfill sites and has been adopted by several government agencies, including US E P A and British Columbia Environment, as an acceptable method of leachate estimation.  The HELP model is a quasi-two-dimensional hydrologic model of water movement across, into, through and out of landfills. The results are reported by the program as Average Annual Leachate Generation (percentage of annual precipitation). Although using the H E L P model to undertake seepage analysis at tailings impoundments may have some limited application, HELP does not model the staging of a waste landfill or assist with impoundment sizing and design scheduling. H E L P does not model landfill progression nor operation but could be used to supplement a tailings impoundment volume balance by modelling the potential seepage rate from the impoundment.  However, there are computer programs specifically and more suitably  designed to model groundwater seepage through an earth fill dam which would be more appropriate to employ for such a modelling task such as SEEP/W (Geo-Slope International Ltd.,  53  1994). HELP has been reported to produce unrealistic model results when balancing the water at impoundment systems (Patton, 1999).  One of the distinct requirements of a waste impoundment balance model is an ability to model water balance throughout the operational life of the impoundment. The monthly and annual progression of solids and water levels in the impoundment and the resultant required dam crest elevations are critical outputs of the water balance. The models examined as part of this research did not include these critical elements nor did not incorporate robust features to enable broad application.  3.4  Risk Analysis and Uncertainty  The concept of employing risk analysis methods at tailings impoundments has become more common in the last decade (Kautsky, 1999, and Niccoli and Finley, 1999), particularly with the increased public and regulatory interest in the potential impacts from impoundments. Risk in engineering design is defined qualitatively as probability of occurrence multiplied by the consequence associated with that occurrence. The term uncertainty is associated with an absence of information, particularly data regarding prior probabilities or the likelihood of future outcomes (Kautsky, 1999).  Risk is associated with water management facilities at tailings impoundment facilities due, in part, to the uncertainty in hydrologic parameters used for planning and design. Risk assessment 54  has been employed in tailings impoundment projects to assess site options, compare closure scenarios, and estimate appropriate design floods.  Uncertainty related to water resource issues has been defined and classified in a number of different ways. Plate and Duckstein (1987) distinguished between hydrologic and hydraulic uncertainty, and this work has particular usefulness to tailings impoundment application. The distinction between hydrologic and hydraulic uncertainty has been made as follows. Uncertainty in hydrologic variables can arise from data uncertainties or measurement error, sample uncertainties due to a low number of data, and model uncertainty. Hydraulic uncertainties in the process of transformation of hydrologic data include parameter uncertainties in hydraulic equations such as Manning's n, model uncertainty due to the use of empirical equations, and scaling laws used in physical models (Kundzewicz, 1990). In general, the operational influence and losses through hydraulic workings at a tailings impoundment are negligible or zero. Some hydraulic uncertainty may occur due to parameters in hydraulic equations or model uncertainty. However, the uncertainty associated with water management issues at tailings impoundments is associated primarily with hydrologic variables themselves.  The hydrologic water balance in a tailings impoundment is heavily influenced by the volumes of direct precipitation and runoff. In arid climates, evaporation can also be a volumetrically significant hydrologic variable. Tailings impoundments are commonly designed using some average annual hydrologic variable scenario. However, the error limits of hydrologic variable estimation can be large, particularly i f generated from small data sets. Climatic factors in the 55  water balance may undergo extreme departures from average conditions, both seasonally and from year to year (Vick, 1990).  Due to the uncertainty in the hydrologic parameters, water balance procedures using averages may only provide a crude estimate of the expected water accumulation in the impoundment. This uncertainty results in increased risk to the environment and human health if necessary safety factors are not employed.  Methods for risk analysis of impoundment balances conducted using spreadsheets are limited to models provided within the spreadsheet packages or statistical models developed on a project specific basis. Statistical methods included with current spreadsheet packages such as Microsoft Excel do not include distribution functions that are suited to analyzing hydrologic data, and are particularly unsuited for use with data from small sample sets. To address this need for effective risk analysis methods in water balance, a risk analysis approach based on sound statistical principles was developed and incorporated into the Visual Balance software program to assess the effects of uncertainty in hydrologic variables associated with water and material balance.  56  CHAPTER 4.0  VISUAL BALANCE - PROGRAM DEVELOPMENT  In this chapter, the approach used to develop the Visual Balance water and material balance program is outlined. The program structure is summarized in Section 4.2 and program data requirements and equations used for water and material balance are explained in Section 4.3. Detailed computer code for the program is included in Appendix C.  4.1  Program Language  Due to the predominant use of IBM® compatible personal computers within the natural science and engineering community, computer software for such applications is typically developed for Microsoft® (MS) Windows™ and MS-DOS platforms. One of the principal goals of the software development conducted as part of this research was to increase ease of use, speed, and user comfort when conducting water and material balance assessments. Given current available technology, such a program would best be developed as a Windows based application. The graphical user interface of the Windows platform increases the ease of use and transparency of the application. The optimization of the speed of the program language is discussed below.  The two most widely used programming languages for MS-Windows based applications are Visual C++ and Visual Basic (MSDN, 1999). There are other languages in the MS-Visual Studio including Visual FoxPro, and Visual Java Plus. The benefits of using Visual Basic language versus Visual C++ language were assessed and Visual Basic was selected as the 57  language of choice for this particular application. A professionally developed Visual Basic application runs as fast or faster than its counterpart written in Visual C++ (Franklin, 1998). Moreover, the Basic language is easier to use and understand than the less English-like C++.  Visual Basic has evolved from QuickBASIC which, in turn, had evolved out of the BASIC language. QuickBASIC included features such as programming without line numbers which set it apart from the traditional BASIC language.  The Visual Basic programming system enables the creation of applications which fully exploit the Microsoft® Windows™ graphical user interface (GUI). Data can be input through forms created by the software program, or through linked software such as MS-Access databases, M S Excel spreadsheets, and MS-Word text documents. This flexibility in data sources makes Visual Basic a good candidate for programs that are likely to involve moderate to large amounts of data management.  4.2  Program Structure  The first step in the development of Visual Balance was to clearly identify the problem which the software was intended to solve. For tailings impoundment volume balance applications, a model is required to account for inflows and outflows of water and solids, and provide elevation of water and materials and require dam crest elevations based on the characteristics of the reservoir. Because the water balance simulations are usually run over the operational life of an 58  impoundment, calculations are usually performed on a monthly basis. The software could be used to assess the likelihood of spills or exposed tailings, and to assess dry and wet year water levels and their effects on impoundment performance. A module to assess water quality could also be included . 1  The software must handle input data from Excel files and the graphical user interface, and provide output in the form of monthly water, solids, EDF and dam crest elevations.  Visual Balance is constructed with three model levels. Figure 4.1 shows a flow chart of the three program levels and are as follows:  Main Menu Access to project type and directory selection forms Data Editing Menu Access to data editing forms and files Output Menu Run Visual Balance Procedures View Input Data Summaries via Excel View Output via Excel  A good outline of the use of data from water balances for computing the balance of natural substances and pollutants in water bodies is given by Ferguson and Znamensky (1981).  59  Visual Balance needed to be designed to accept user input data, manage that input data, run a water and material balance for the reservoir over the entire life of the mine, and provide output data in the form of relevant elevations and volumes. The code structure of Visual Balance has four major components: •  User Data Input Forms accessed through the Data Edit Menu,  •  Visual Balance Water and Material Balance Procedure,  •  Visual Balance Risk Analysis Procedure,  •  Average Visual Balance Closure Procedure,  •  Visual Balance Closure Risk Analysis, and  •  Data Output File Creation accessed through the Output Menu.  The water and material balance portion of the program involves the following general steps:  1.  Read user input data such as start up month and year, and initial water and material volumes and elevations to begin balance.  2.  Calculate the total inflow of solids and water on a monthly basis.  3.  Calculate the total loss of water, including water lost to solid voids on a monthly basis.  4.  Sum up the total additional (positive or negative) volume and calculate the new total elevation of solids and water in the impoundment.  5.  Add the EDF volume to the end-of-month total volume of solids and water, and calculate the elevation of the EDF.  6.  Add the minimum freeboard to EDF elevation to get the design dam crest elevation for 61  the end of the month. The addition of this EDF volume assumes the solids elevation is level.  The monthly generated balance output data are saved in array type variables and include: •  end of month solids volume, solids and voids volume, and solids elevation,  •  end of month water volume, free water volume, free water depth and water elevation,  •  end of month EDF elevation, and  •  design dam crest elevations accounting for minimum freeboard.  In general, the program simply sums up the inflows and outflows and calculates dam crest elevation requirements. However, two restrictions in dam elevation and operation are coded into the average balance portion of the program, so that dam crest elevations and water consumption are not completely unlimited.  Firstly, the program allows the user to restrict the monthly dam crest elevation lifts. Emergency spill will occur instead of exceeding this dam lift restriction. A large number for Maximum Dam Lift can be input to avoid simulating an emergency spill during dam elevation design determination.  Secondly, to ensure that water consumption is not unlimited during dam embankment elevation determination, the reclaim rate to the mine will be set to zero if the free pond water depth is less than some user specified depth required for reclaim. The program checks to see that at the end 62  of the previous month, there was enough pond water for reclaim, or else the reclaim is shut off for the forthcoming month. To avoid Visual Balance setting reclaim to zero during dam elevation design determination, a very low value of "free pond water required" or a negative value, can be input by the user. However, this low level input is not recommended as the typical methods for water reclaim (barge and pump) are not conducive to a low free pond water level.  After a Visual Balance run, the most recently generated values in the arrays of "end-of-month" variables are persistent in the program until the program is exited. These end-of-month values generated using average monthly conditions need to be accessed by the Risk Analysis Procedure. Therefore, Visual Balance requires that a water and material balance run be performed prior to a risk analysis run, for any new set of input data. The monthly design dam crests and solids volumes are set by the "average" balance run, and only the critical, random hydrologic inputs are varied (See Section IV re: Risk Analysis) during the risk analysis. The risk analysis then conducts the following general steps: 1.  Each year in the operation series , a random annual precipitation value is generated 2  using the mean annual precipitation and the standard deviation of the precipitation distribution (for Statistical Methods, see Section 4.5). 2.  A random monthly precipitation value is calculated using the temporal distribution of precipitation provided by the user.  3.  New direct precipitation values are calculated using the pond area.  2  The term operation series is used to describe one "mine life" series. For example, if the life of the mine spans 12 complete years, then the operation series will include 144 months.  63  4.  Random runoff values are estimated using the random monthly precipitation, temporal distribution, monthly depth loss, percent snow and percent snowmelt. Snow is assumed to accumulate over the period specified by the user, and runoff according to the fractional distribution input by the user. Contrary to the water balance where runoff depths for each month are input directly by the user, this method must back calculate the runoff depths.  5.  A new end of month total volume is calculated based on the random direct precipitation and runoff values. Monthly evaporation volumes are also adjusted to account for change in pond area: the pond area at the beginning of each month is used to calculate the volume of evaporation in the subsequent month of the balance.  6.  The dam elevations each month are fixed according to the Visual Balance water and material balance run. This approach may seem rigid, but some "yard stick" was needed to assess the potential performance of the impoundment. The risk generated end-ofmonth water elevation and potential EDF elevation is compared to the design dam crest elevation. Four parameters of interest are summed up during the risk simulation as follows: Tailings Exposed (solids elevation greater than actual water elevation) Low Pond Level (not enough free pond water for reclaim) Low Freeboard (EDF elevation would be within some "risk" freeboard value specified by the user. Spill Required (EDF elevation exceeds the dam crest elevation. No freeboard remaining. Spill required to create some freeboard). 64  7.  The number of operation series to be run in a risk simulation is specified by the user, but can not exceed 1,000. The results would then provide the user summary statistical information such as "What is the average number of months of spill required in Year 4 of operation?" or "What is the probability that the tailings will be exposed in Year 10 of operation?"  The program then provides data output options for the user, including viewing and printing the critical input data for a given balance run, and resulting elevations and volumes of solids, free water, and dam crests.  4.2.1  Detailed Design and Coding  The overall design of the procedures and what they were required to do was written in English, drawn in flow charts, and then the Program Design Language (English) was used to create code. Figure 4.1 shows a flow chart of the program structure. The code for Visual Balance is provided in Appendix C.  The Visual Basic coding standards recommend by Microsoft were used in the program wherever possible. The tag naming conventions for variable types was also followed which provides variables with a tag and a base name. The tags are always in lower case so that the reader's eye goes past them to the first upper case letter where the actual base variable name begins. The  65  variables were given names that indicate what they represented (e.g. the rate of seepage outflow was called sngSeepOutRate).  Visual Basic Objects such as Forms, CheckBoxes, Command Buttons, Labels and O L E Objects also have tag conventions of frm, chk, cmd, lbl and ole, respectively. Examples of tags and base names for variables used in the program are presented in Table 4.1.  Table 4.1 Variable Naming Standards for Visual Basic Variable Type  Tag  Example  Description  Boolean  bin  blnRiskRun  Represents whether a risk analysis has been run for this input data. Certain menu options will be disabled if the user has not run a risk analysis.  Single  sng  sngSeepOutRate  A l l non-integer variables in the Visual Balance program are "singles", which use less memory than "doubles".  Object  obj  objHydroFile  Excel workbook object containing hydrological data.  String  str  strSiteName  Strings of text (such as the site name)  Long Integer  lng  IngSimSpillMonths  Number of months requiring spill in a given simulation.  Excel Worksheet  wks  wksRiskData  Excel worksheet created to hold risk data inputs.  66  4.3  Program Data Input  Visual Basic uses a system of "forms" to create Windows environment programs. The user inputs data through seven active data input forms that are accessed through the Visual Balance Data Edit Menu.  The forms created for the Visual Balance program are displayed in  Appendix B. A n example of a typical data input form in Visual Balance is shown in Figure 4.2. The Visual Balance data input forms are entitled: •  General Project Information  •  Production and Material Information  •  Site Hydrologic Data  •  Reservoir Information  •  Water Quality Information  •  Dam Design and Safety Information  •  Risk Analysis Data  The water quality information is not currently "balanced" by the program, but is included so that a water quality procedure can be added in the future as required.  4.3.1  General Project Data  The General Project Information form is used to input the following data: •  Project Name, 67  * Mine Resefvoif Infoimahon File  Goto  fjelp  General and Start-up Information  'WT  Reservoir Operation  •oirName . I-. Main Taiings Impoundment]  ReclaimflateFrom Reservoir <eg.,MTI)  v'Pepfhof Free "Pond" Water:™™*!!" .Requiied for Reclaim ' Fa^lu^WaterirputRate ; Mine Water Input Rate  j Initial SurfaeeArea ofReservoir  |3^P^V/atei Volume in  Reservoir  |  J  • InJialWasteSofrds Volume irtRes  (ha) ' (cubic meters)  fraction erf Waste Rock Sent to sHeservof Click HeretoEdit the Spa Rate per month file  Release/Spill Rate  (cubic meters)'  Maximum Water Level in Reservoir J~  (cubic m Way)  Mrimum Water Level n Reservon f  .Oefsutt., set to rail *( bove s J) ma  i • "'iii'JiiM'raft tmLiimii"Jii>iiii»irM i * * ' ' " ' "  "3'Seepage Into Reservoir:  ( above sj.) m  -  nam Elevation Dependant Data • Select one of the fototwng two options for (Jam dependant data (dam seeoao^.beacfievaporalkm.and^tatetodamsi  |S£9'*  ,ues  »«- Bam Crest Elevation  .Number of records (rows) in data file > IWJ Ml HlMWffljnBll• l l l l ll'il liliirIIMIMIB  '  lllll  i JIUIIIIMI T  pick Here to Eat the Data vs. Dam Elevation Excel File  Cll ' ~  jPf  ' ' ' ^C "*) ,!  3  0  Dam Beach Area  (square metres)  jHStall j  £  £ j $  Water Voln- ti Dam  (cubtcmetres)  Fraction of Runoff Diverted -Seepage Return Rale • (Back to reservoir)  _  _  I  fiSKfradion) (cubic mAfay)  _  _ _ -rmme.  -Reservoir Volume vs. Elevation Data ----- r  Click button to edit reservoir geometry fie. Enter the number of rows (records! in the file in the space provided below.  Number of records (rows) in VES fie  {  Ock Hereto.Edit the ; Votume-Efevatiori-Area" Excel File ,  .j  i ; Q Visual Balance Editing Menu  Figure 4.2 Sample Visual Balance Data Input Form - Reservoir Information Form  68  •  Project Description,  •  Starter Dam Elevation, and  •  Number of Reservoirs in the System.  A text file (mine.txt) is created by Visual Balance to save this general information about the project. The variable "number of reservoirs in the system" is not actually used in code, but is intended as a reference for the user to recall whether a system was a single or multiple reservoir system.  4.3.2  Mine Production and Material Data  Data regarding mine production operations and mined material (tailings and waste rock) physical parameters are input on the Form named Mine Production and Material Data. Some of the critical parameters input through this form include: •  Month of Production Start Up and Closure  •  Start Up Year and Year of Closure  •  Production Information Total tonnes Mined Per Day Tonnes Concentrate Per Day Tonnes Waste Rock Tonnes Tailings Per Day  69  •  Waste Rock.Information  3  Bulk Density Void Ratio •  Tailings Information In situ Degree of Saturation Coarse Fraction Cycloned Out Dry Density Void Ratio  Rather than simply applying an efficiency factor to the entire production year, some flexibility was provided within the user input options for productivity and efficiency by specifying the number of "operating days per month" on an annual basis.  4.3.3  Hydrological Data Inputs  Hydrologic variables are input through the Site Hydrology form and its linked standard Excel files. The two primary hydrologic data inputs for the water and material balance are average monthly direct precipitation depths and average monthly runoff depths.  Evaporation, and  seepage into, or out of, the reservoir are typically proportionally minor components of the water  The equations used to define solids parameters such as degree of saturation, are included in Chapter 3. 70  balance. Direct total precipitation values (snow and rain) are input by the user into a standard Excel hydrological data input file as averages (units: mm/month).  The monthly runoff values are also input by the user in the standard Excel hydrological data file. These runoff values could be estimated from streamflow data from local gauging stations, or from estimation methods such as the rationale formula using average monthly precipitation values, a rational coefficient, and the area of the catchment. This runoff depth should include snowmelt, direct runoff and baseflow. The user inputs average monthly runoff estimates (units: mm/month). There is also a provision that accounts for the "fraction of runoff diverted" as input through the Reservoir Information form.  Evaporation depths per month are also input by the user directly into the Excel data input file. Seepage rates into the reservoir and seepage return rates back to the reservoir, as might be found from a treatment pond, are input by the user through the Reservoir Information form. Seepage out of the reservoir can be input by the user either as a constant value through the Reservoir Information form or a variable dependent on water level and dam crest elevation through the Dam Dependant Data standard Excel data input file.  4.3.4  Reservoir Characteristics  The Reservoir Information form allows the user to input information about the reservoir and its operation directly into the form. 71  Reservoir and operational information input through this page includes: •  Reservoir Name  •  Reservoir Catchment Area  •  Start Up Water and Solids Elevation, Water and Solids Volume, and Reservoir Surface Area  •  Seepage Rate In (m /day)  •  Seepage Rate Out (mVday) - either a constant rate or varied depending on dam crest  3  elevation. •  Operation Data  •  Reclaim Rate (m /hr)  •  Pond Depth Required for Reclaim (m)  •  Slurry Input Rate (m /hr)  •  Mine Water Input Rate (m /hr)  •  Fraction of Waste Rock to Reservoir  •  Fraction Runoff Diverted  •  Seepage Return Rate (m /day)  3  3  3  3  The Reservoir Information form also includes three Microsoft OLE (Object Linked Embedded) links to Excel spreadsheet files, namely: •  Reservoir Volume and Surface Area versus Elevation file (Volume.xls),  •  Dam Elevation dependent data (DamInfo.xls), and  •  Planned release rates (SpillVolumes.xls). 72  4.3.5  Dam Safety and Design Information  A Dam Safety Information form was created to record design freeboard and maximum monthly dam elevation lifts. The data input requirements on form page include: •  freeboard, period 1  •  freeboard, period 2  •  maximum monthly dam lift height  •  vertical distance between spillway invert and dam crest (used in risk analysis)  •  number of years over which to evaluate abandonment scenario (maximum 100 years)  The user is given the option of varying the minimum freeboard during the life of the mine, which may be useful when, during start up years, the potential for damage and the consequence of such damage may not warrant high freeboards. A discussion of minimum freeboard requirements is included in Section 2.3.3.  The "maximum monthly dam elevation lift" input is used in the Visual Balance determination of dam crests elevations. If the monthly solids, water and EDF elevation require the dam crest to be increased beyond this maximum lift, a controlled spill will occur. If the user prefers to ensure that no spill will occur during the water and material balance, the maximum dam crest lift can be set at a high value. The spillway invert elevation is determined during the risk analysis based on the vertical distance between the design dam crest elevation and the invert provided by the user. Although it is  73  difficult, and rarely done in practice, the spillway invert elevation changes on a monthly basis in the risk analysis portion of the program. Since the risk analysis is intended for impoundment operation assessment rather than detailed design, this spillway invert condition does not diminish the usefulness of the risk analysis results.  4.3.6  Risk Analysis Information  The risk analysis procedure of the software program requires a number of specific data inputs in order to operate. A Risk Analysis Information form was created for user input data as follows:  •  average annual precipitation (units: mm),  •  standard deviation of average annual precipitation,  •  number of years of record,  •  critical risk freeboard,  •  vertical distance between spillway invert and dam crest, and  •  number of operation series to generate in the simulation (100 or 1,000).  The risk analysis procedure also requires the following specific hydrological data, which are input through an Excel spreadsheet entitled HydroData.xls:  •  average temporal distribution of precipitation,  74  •  fraction of monthly precipitation as snow, and  •  fraction of snowpack running off per month.  Lastly, the risk analysis requires the following information input through the Site Hydrology form:  •  first and last month of snow melt accumulation (defining the snowpack accumulation period).  When running a Closure Scenario risk analysis, the following additional variables are required by Visual Balance, which are also input through the Risk Analysis Information form:  •  number of years in a closure series (maximum 100), and  •  number of closure series to be run in simulation (maximum 1,000).  The number of years in the closure series is similar to the number of years in an operation series, but is generally much longer. Although the persistence of an abandoned tailings impoundment may continue for hundreds of years, the impoundment typically reaches some state of equilibrium after a short number of years. The results of the Closure Scenario risk analysis will be provided on an annual basis for each year in the closure series, so that the development of this equilibrium can be observed.  75  4.3.7  Visual Balance Data Files  There are a number of Excel spreadsheet data files and text files that Visual Balance "reads" data from when running the water balance or risk analysis. The three standardized Excel files that are required for running the balance are shown in Table 4.2. Examples of the Excel data files are included in Appendix C. Table 4.2 Required Standardized Excel Data Input Files File Name  Editing Access Through...  Includes Data Re:  HydroData.xls  Site Hydrologic Data Form  Monthly hydrologic data in depths (mm) or fractions: precipitation, temporal distribution, fraction as snow, fraction of snowmelt, runoff, pond evaporation, and beach evaporation.  Volume.xls  Reservoir Information Form  Reservoir geometry: volume and surface area vs. elevation.  OperatingDays.xls  Production and Material Information Form  Number of operating days in a given month (similar to efficiency, but input on a monthly basis).  SpillVolumes.xls  Reservoir Information Form  Monthly varying spill volumes: allows for controlled discharge on a monthly basis as may be required by permits etcetera.  The optional Excel spreadsheet files that can be used to customize data input to a more flexible operation scenario, rather than entering constant values for such parameters as the tailings beach surface area and the volume of water retained within the dam structure, are shown in Table 4.3.  76  Table 4.3 Optional Standardized Excel Data Input Files File Name  Editing Access Through...  Includes Data Re:  Production.xls  Production and Material Information form  Annually varying deposition rates: tailings and waste rock deposition rates to the tailings impoundment (tonnes per day).  DamInfo.xls  Reservoir Information form  Additional parameters dependent on dam crest elevations: volume of water lost to dam, beach area, and the rate of seepage out of the impoundment.  The text files created by the program, which save constant values and text data input by users directly into the forms, are as follows in Table 4.4.  Table 4.4 Required Input Text Files (Created by Visual Balance) File Name  Editing Access Through...  Includes Data Re:  mine.txt  General Project Data  General project information.  extremes.txt  Site Hydrologic Data  Seasonally varied environmental design flood (EDF) is entered and saved through this form.  reservoir.txt  Reservoir Information  Physical and operational reservoir information.  production.txt  Production and Material Information  Form for entering constant, rather than annually varied, production data and solid material data.  Safety.txt  Dam Safety Information  Freeboard and maximum dam lift information.  RiskData.txt  Risk Analysis Data  Statistical and risk data required by risk analysis.  77  4.4  Program Calculations  Visual Balance uses the equations presented in Section 2.4.1 to compute the tailings impoundment water and solids inflows and outflows on a monthly basis. There are four calculation procedures that are accessed through the output menu in Visual Balance. These procedures are as follows: 1.  Average Visual Balance Run  2.  Visual Balance Risk Analysis  3.  Visual Balance Average Closure Balance  4.  Visual Balance Closure Risk Analysis  Procedures 1 is run using average input values for the duration of mine life. For instance, if mine life is expected to be 12 years, Visual Balance will compute 144 months of output elevation data. Procedure 2 , the risk analysis, will simulate 100 or 1,000 12 year operation series and calculate probabilities of emergency spill, low freeboard, low pond water levels, or exposed tailings in any year of the operation series.  Procedures 3 and 4 assess the performance of the impoundment after closure of the mine and abandonment of the impoundment. In Procedure 3, the final solids, spillway invert and dam crest elevation are set by Procedure 1, therefore an Average Visual Balance must be run prior to conducting Closure Balance. The Closure Balance accounts for hydrologic inflows and outflows from the reservoir, and allows for spill to take place i f the water level in the 78  impoundment exceeds the spillway invert elevation. The user specifies the duration over which to run the Closure Balance, for a maximum of 50 years. Typically, the impoundment reaches a state of equilibrium within a few years. Closure Balance recognizes low freeboard and exposed tailings conditions.  The Closure Risk Analysis calculations included in Procedure 4 are performed similar to the Risk Analysis in Procedure 2, except that the dam crest elevation is fixed and only hydrologic parameters are varied. The Closure Balance records output values, average spill volumes and annual probabilities similar to those included in Procedure 2.  Each of the four computation procedures within Visual Balance use unique variables to describe beginning- and end-of-month solids and water volumes to ensure that procedure specific variables are not persistent between procedure calls.  4.5  Program Output  The program provides data output options for the user, including viewing and printing the critical input data for a given balance run. The program also outputs elevations and volumes of solids, free water, and dam crests. The data output viewing options include viewing and printing:  •  Critical input data for a given balance or risk analysis run,  •  Average Visual Balance solids, free water, design flood and dam crest elevation, and 79  solids volumes (tabular, extended tabular, or graphical), and •  Risk Analysis outcomes (table).  •  Average Closure Balance (table)  •  Closure Risk Analysis (table)  4.6  Debugging and Testing  During the debugging stage of the program development, design-time, compilation, and obvious errors were solved through adding error handlers, increasing program robustness and flexibility, and recoding program modules accordingly.  The errors which still may occur while running Visual Balance can be subdivided into the following four categories:  1.  Data Restriction Errors  2.  Standardized File Errors  3.  Code and Mathematical Errors  4.  Fatal Errors  A number of "errors" potentially occur when running Visual Balance that are the result of restrictions imposed by user input variables or files. For example, the user creates a reservoir geometry Excel spreadsheet containing Volume and Surface Area versus Elevation data. This 80  spreadsheet will have a given number of rows and reservoir geometry data up to a given elevation. If the water, EDF or dam crest elevation passed to the "Calculate Volume" module exceeds the maximum elevation in the spreadsheet, an error will occur.  Visual Balance requires standardized text and Excel files in order to run a water and material balance. In particular, Visual Balance requires that Names'" are Defined in the Excel spreadsheets that refer to a specific subset of rows and columns (table) from which to retrieve data. If these tables are not properly defined in the Excel spreadsheet, the Visual Basic MS Jet Engine will not be able to retrieve data and the program will discontinue.  Standardized, Read-Only protected files are provided with the Visual Balance software package for these Excel data files that must be readable with the MS Jet Engine.  Five case studies were run through the program to test the software. Additional robustness features, such as data input flexibility, and debugging were conducted during this stage of the research.  The maintenance of a software program involves reacting to user feedback and continuous testing. This step will be post research work to maintain the program for A G R A and other users.  "Name" and "Define" are terminology used in MS Excel to specify a table of data.  81  CHAPTER 5.0  RISK ANALYSIS  Currently in British Columbia, tailings impoundment design is based only on "average" precipitation and runoff values, together with an extreme event runoff volume, such as a P M F . In this thesis, a risk analysis procedure has been developed that allows the performance and design of a tailings impoundment to be assessed under a stochastically generated wet and dry sequence. A unique and useful feature of the risk analysis approach is that it requires limited precipitation data, which is often all that is available for remote impoundment sites.  5.1  Critical Risk Parameters  Variables in the water and material balance were qualitatively assessed for their potential to impact the overall conclusions of the impoundment balance. Aside from embankment design and construction methods, the hydrologic variables of precipitation and runoff were deemed to have the greatest potential to increase long-term risk associated with a tailings impoundments. Moreover, hydrologic variables were considered to have the highest associated degree of uncertainty. Although volumes of tailings, slurry water, and mine reclaim water are typically the largest estimated volumes in the balance, these variables are associated with relatively low uncertainty since they are controlled by mine operation activities.  The sensitivity of a water and material balance to particular parameters varies widely depending on general climatic conditions, length of the balance period, season of the year, physiographic 82  factors, and nature and degree of consumptive uses and controls. For example, in temperate and coastal regions such as British Columbia, the second largest variables, by volume, in the balance are direct precipitation and surface water runoff. However, in arid climates, water volume lost due to evaporation may exceed the volume of hydrologic inflow. The risk analysis included in Visual Balance simulates random series of precipitation and runoff. However, a risk analysis involving alternate water balance components could be adopted into the software program depending on local conditions.  The level of risk associated with a tailings impoundment is dependent on the associated consequence of failure (hazard) and probability of failure. The concept of uncertainty is incorporated into risk analysis as part of the probability of failure. The more uncertainty associated with failure actuation, the more uncertain the actual risk associated with a given project.  5.2  Risk Analysis Approach  The following additional hydrologic parameters are input by the user for use in the risk analysis:  •  Average annual precipitation (mm)  •  Standard Deviation of average annual precipitation (mm)  83  •  Average temporal distribution of precipitation  •  Fraction of monthly precipitation as snowmelt  •  Fraction of snowpack running off per month  •  First and last month of snow melt accumulation (defining the snowpack accumulation  1  period) •  Number of years of record  •  Critical Freeboard (m)  •  Spillway invert elevation below dam crest (m)  •  Number of operation series to generate in the simulation (100 to 1,000)  The steps which Visual Balance conducts to complete the risk analysis are as follows: Step 1.  Conduct a Monte Carlo simulation, generating random annual precipitation values using statistics (Section 5.3).  Step 2.  Estimate random monthly precipitation values using the defined temporal distribution.  Step 3.  Estimate stochastic runoff values using the following equation taking into account the fraction of precipitation that is accumulated in the snowpack, the fraction of snowpack that runs off in a given month, and the runoff loss (units: mm). The runoff loss is similar to a runoff coefficient, accounting for infiltration and evaporation losses in the catchment area.  i  The average temporal distribution of precipitation, fraction of monthly precipitation as snowmelt and fraction of snowmelt running off in a given month are input through the standard Excel hydrological data input sheet (Appendix B).  84  Random runoff values are estimated using the random monthly precipitation, temporal distribution, monthly depth loss, percent snow and percent snowmelt. Snow is assumed to accumulate over the period specified by the user and runoff according to the fractional distribution input by the user. In contrast to the Visual Balance average value balance, where runoff depths for each month are input directly by the user, this method must back-calculate the runoff depths as shown in Equation 5.1.  where, d  =  Runoff Depth (mm)  P  =  randomly generated precipitation (mm)  f  =  fraction of precipitation as snow in a given month  =  runoff loss in a given month (mm)  d  =  snowpack depth (mm)  f  =  Fraction of snowmelt occurring in a given month  r  r  l  R  sp  m  The user inputs a fixed runoff loss depth per month, 1 , that is subtracted from the randomly R  generated runoff depth. The groundwater seepage rate into the reservoir remains constant. Although in practice it is likely that precipitation volumes in excess of average volumes would increase the groundwater seepage rate due to an increase in runoff loss depth, the increased precipitation volume is likely going to reach the reservoir. By using a constant runoff loss depth,  85  Visual Balance assumes that all excess precipitation, greater than average precipitation volumes in the catchment area, reaches the reservoir. This may be a conservative estimate.  The snowpack depth is updated on a monthly basis within the program. The user specifies the month in which snowpack begins accumulation, and the month in which snowpack accumulation ends and depletion begins. The snowpack is updated using Equation 5.2.  (d )  = (d )  sp cm  v  J  K  + (P • f )  sp'pm  r  K  J  (5.2)  s '  where, current month  cm  previous month  The runoff volume is then calculated as shown in Equation 5.3.  V = d - A - (1 r  r  c  v  -/.) J  (5.3)  rd '  where, volume of runoff (m ) 3  catchment area (m ) 2  rd  fraction of catchment area diverted  86  5.3  Statistical Theory  Typically, historical data represented by real sequences of past data are insufficient for a long simulation run and, in general, are not as flexible as a sampled sequence (Davies et. al., 1972). Monte Carlo uncertainty analysis techniques are used for probabilistic prediction, which can be a component of risk analysis for stochastic variables. The hydrologic variability of the mean annual precipitation is considered to be stochastic, meaning the values are random and can take on an infinite number of values within a specified range.  Monte Carlo simulation involves the representation of the actual data by a probability distribution from which a sequence can be sampled randomly. A method of obtaining a random variate x, from the general distribution f(x) is required. If the cumulative distribution function F(x) is known, a random number, r is generated between 0 and 1, and the value x; for which i}  F(X|) = r, can be found by inverting the cumulative distribution function (CDF). The approach is illustrated in Figure 5.1.  1 F(x)  -^-^  r  {  0 0  - ^ " " ^ ^  1 Xj  x—->  Where Xj represents the random variate (for example annual precipitation corresponding to a randomly generated r . ;  F i g u r e 5.1 - R a n d o m V a r i a t e Generation Using the C u m u l a t i v e D i s t r i b u t i o n F u n c t i o n .  87  Annual precipitation data are usually observed to exhibit a normal distribution (Ferguson and Znamensky, 1981). However, the sample size in remote areas is typically limited, which in turn limits the applicability of a normal distribution. The normal distribution assumes an infinite sample size. A more suitable and robust distribution is required for the risk analysis of data from small sample sizes.  In 1908, William Sealy Gosset published a paper under the pseudonym "Student" in which he observed that if random samples of size less than 30 are taken from a normal distribution and the samples used to estimate the variance, then the statistic represented by t is not normally distributed.  (5.4)  where, y  =  sample point estimate of the mean  fj.  =  population mean  s  =  sample standard deviation  n  =  sample size  The sample distributions Gosset studied are called Student's ^-distributions where t is equal to the statistic in Equation 5.4. The shape of the /-distribution is less peaked than the normal distribution, with a greater proportion of the values situation at the tails of the distribution. The  88  /-distribution approaches the shape of the normal distribution for sample sizes greater than 30. Therefore, the /-distribution adequately represents both small and large sample sets from normally distributed populations. The Student's /-distribution can also be used to estimate probabilities when the population distribution is not normal, as long as the distribution is at least symmetrical, unimodal, and with a variance that is not inordinately large. In such cases, the /-distribution is a good estimate of the actual sampling distribution (Dowdy and Wearden, 1983).  The /-distribution was thus used to represent the mean annual precipitation data. Once the sample size, mean, and standard deviation are estimated, the /-distribution can be used to generate a set of random mean annual precipitation data from the sample distribution. Random numbers generated by computers are typically generated from a uniform distribution between 0 and 1. Visual Basic includes a function call RndQ that will automatically generate random numbers less than 1 but greater than or equal to zero.  For any given initial seed in a computerized random number generator, the same number sequence is generated because each successive call to the Rnd function uses the previous number as a seed for the next number in the sequence. The randomize statement is used in the Visual Balance code to initialize the random-number generator with a seed based on the system timer. The uniform random number generated, p, can be converted to a normally distributed random variate, x , using the following equations (Abramowitz and Stegun, 1966, p.933). p  89  Rational Approximations for x where Q(x J = p p  t  0 <p <0.5 a +a z  =  X P  ~  z  ~  \+bz+bz  +  e(P)  (5.5)  2  z~-  N  ln—  (5.6)  3  P  where, p  =  | c(p) | =  random number' ' between 0 and 1 2  error term < 3 x 10"  3  x  p  =  number of standard deviations from sample mean  ao  =  2.30753  a,  =  0.27061  b  0  =  0.99229  b,  =  0.04481  In Equation 5.5, the variable x represents a random, normally distributed variate. p  The  corresponding t-statistic for the Student t-distribution can then be generated using an asymtotic expansion for the inverse function and is a function of degrees of freedom, v (Abramowitz and Stegen, 1966, p.949).  2  It should be noted that the above set of equations is valid when the variable p is less than 0.5. When the computer generates random valuep > 0.5, p is set to 1-p and x = -x . p  90  p  +  t  ~  S (x ) x  g (x )  p  +  2  +  p  g (xp  g (x )  3  +  4  p  X  p  (5.7)  p  where, v  =  degrees of freedom = n - 2  n  =  sample size (# of years of record)  SM )  = j (*/  P  V  +  (5-8)  96  S^ )  =  g (x )  =  p  4  (3x1  +  — 79x 92,160 (  P  19X  9 p  +  P  11X  ~ V>  (5-10)  1 5  + 776*/ + 1482x/ - 1920*,, - 945x ) 3  (5.11)  The randomly generated mean annual precipitation values (x ) are generated from the random (  /-statistics as follows in Equation 5.12. x. = x + t x s  (5.12)  p  where, Xj  =  randomly generated annual precipitation (mm)  x  =  mean annual precipitation (mm)  /  =  random t-statistic previously defined in Equation 5.6, equal to the number of 91  standard deviations corresponding to random number p. s  =  standard deviation of annual precipitation (mm)  Depending on the number of "series per simulation" selected by the user, 100 or 1,000 random annual precipitation values are generated using Equations 5.1 through 5.12. The steps for generating the random operation series are as follows: Step 1.  The average-case total production series is run using Visual Balance based on the mean annual precipitation. From this average-case, the design dam heights are saved in the program code.  Step 2.  A water and materials balance is re-run using random annual precipitation values in each year. A different random annual precipitation value was used for each year of the operation series. That is, if the total production duration was 15 years and the number of series requested to be run in the simulation was 100,1500 randomly generated precipitation values would be used in Step 2 (i.e., 100 15-year sequences).  Step 3.  5.4  Risk analysis output operation assessment counters are generated.  Risk Analysis Module Performance  The risk analysis module code includes counters to keep track of the following reservoir performance parameters:  92  •  the number of months reclaim was required to be shut off,  •  the number of months the tailings were exposed,  •  the number of months with "low freeboard", and  •  the number of months requiring spill.  The user specifies a depth of water required in the pond in order for reclaim to occur, which is entered through the Reservoir Information form. If the depth of free water elevation at the beginning of the month is less than the depth required for reclaim, then reclaim will be shut off for the subsequent month in the series. The depth of free water is equal to the actual free water elevation minus the actual solids elevation. Although shutting off reclaim for a whole month may be a somewhat unrealistic action, the risk analysis operates on a monthly basis, therefore, the critical counters are summed up on a monthly basis. These records of how often reclaim is required to be shut off could be significant to the feasibility of a mine operation i f sources of additional fresh make up water for processing are remote and potentially expensive.  Monthly solids elevations in the balance are set by the average balance run and the risk generated water elevations are calculated by Visual Balance using the randomly generated hydrologic inflows. At the end of the month, if the elevation of the solids in the pond is greater than the elevation of the new free water surface, then the risk module records a month with "tailings exposed". A counter variable sglMonthsDryTail is increased by 1 in the case of tailings exposure at the end of any given month. Such an occurrence could be significant in situations where tailings are potentially acid generating and are meant to be permanently submerged. 93  As part of the risk analysis data input, the user specifies a critical risk freeboard value that may be equal to or less than the design minimum freeboard. The program checks to see if the actual freeboard in a given month of the random operation series is less than the risk freeboard. The "Actual Freeboard" in the risk analysis is defined as the dam crest elevation (fixed from average run of water balance) minus the EDF elevation. Months with freeboard lower than the specified risk freeboard could be an indicator of an impoundment that is going to operate quite full. Such an operating scenario may indicate that greater dam raises are required, which could lead to the need for additional saddle dams at increased elevations, or that there is additional water available for fresh water make up, or that increased surface water diversion is needed.  It is recommended that the user select a risk freeboard somewhat less than the minimum design freeboard or erroneously negative results are likely to come from the risk analysis. This is a consequence of having fixed dam crest elevations in each month based on the results of the "average value" Visual Balance run. Since it is not unreasonable that some fluctuation will occur in the randomly generated water elevation and subsequent EDF elevation, the risk freeboard should be selected with care. In some jurisdictions, a minimum 0.5 metre freeboard maintained at all times above the EDF is recommended (Williamson, 1990). This may be a suitable risk freeboard in cases where the minimum design freeboard is greater than one metre, providing the user with representative, but not overly conservative, risk analysis results.  If the Actual Freeboard is less than the risk freeboard, then the program recognizes the month as a Low Freeboard Month. If the Actual Freeboard is less than the risk freeboard and is less 94  than zero, indicating that an EDF event would overtop the dam, then a month with spill required is recognized by the risk module.  The volume of the emergency spill in the risk analysis is dependent on the vertical distance between the dam crest and the spillway invert provided by the user. Essentially, spill occurs until the actual water elevation is equal to that of the dam crest minus the vertical distance to the spillway invert. The spillway invert elevation is set within the program on a monthly basis dependent on the dam crest elevation. It should be noted that spillway inverts are not typically adjusted on a monthly basis during actual impoundment construction and operation. The new water elevation at the end of the month is recalculated as:  (X  =E  - d  (EJ  =  elevation of water "post spill"  E  =  elevation of dam crest  4,;  =  depth to spillway invert from dam crest elevation  £  dc  (5.13)  si  where, ps  clc  The new "total" volume in the reservoir is calculated based on the post-spill water volume and the solids volume as follows in Equation 5.14. The EDF elevation is then adjusted based on the new actual water elevation in the impoundment.  (V)  ps  = V  s  +  (V)  (5.14) 95  where, total actual volume of solids and water in the impoundment after a spill  (V)  ps  volume of solids volume of water in impoundment after a spill  5.5  Risk Analysis Module Outputs  The risk analysis results can be viewed through the Output Menu Form under the menu option View —• Results —• Risk Analysis —• Tabular or Graphical. A sample of the risk analysis tabular output are provided in Appendix E. The output table generated presents the following Risk Analysis parameters:  •  Average Annual Precipitation - mean, standard deviation, and number of years of record,  •  Risk Freeboard  •  Number of months in a complete operation series (=No. of Years Operation 12),  •  Number of Series requested simulation (100 or 1,000).  •  % Series with at least one month of no reclaim, dry tailings, emergency spill required, or low freeboard.  Table 5.1 displays a truncated version of the risk analysis module tabular output. Typically, the output displays the number of months with a critical event in each series simulated.  96  T a b l e 5.1  S a m p l e R i s k A n a l y s i s Results  Risk Analysis Parameters Mean Annual Precipitation Standard Deviation Number of Years of Record Freeboard Required (above EDF) Risk Freeboard (above EDF) Spillway Invert (below Dam Crest)  2,006 mm  Operation Parameters  200 15 2m 1.5 m 1 m  Number of Years in Operation Series Operation Series in Simulation Number of Months in Series Number of Months in Simulation  14 1,000 167 167000  R i s k A n a l y s i s S u m m a r y Statistics S p i l l Results Year in Series  A v g . # Months with Spill  A v g . Annual Prob. of S p i l l (%)  Avg. Spill Volume (m )  M a x i m u m Spill Volume (m )  3  3  1  0  0  0  0  2  0.23  16.0  235,498  964,457  j  3.79  54.0  121,429  1,081,157  4  7.17  95.0  185,246  1,139,024.  F r e e b o a r d Results Year in Series  A v g . # Months with Low Freeboard  Avg. Annual Prob. of L o w F r e e b o a r d (%)  Avg. Value of " L o w Freeboards" (m)  1  0  0  0  2  4.35  100  -0.23  3  11.82  100  -0.5  4  11.77  100  -0.6 R e c l a i m Results  Year in Series  A v g . # Months with R e c l a i m Off  Avg. Annual Prob. of R e c l a i m Off (%)  Avg. Makeup Volume Requ.  1  0.0  0.0  0.0  2  0.0  0.0  0.0  j  0.0  0.0  0.0  4  0.0  0.0  0.0  T a i l i n g s E x p o s u r e Results Year in Series  Avg. # Months with Solids E x p o s e d  A v g . D e p t h o f W a t e r A b o v e Solids (m)  Avg. Annual Prob. Solids E x p o s u r e (%)  1  0.0  0.0  4.35  2  0.0  0.0  6.47  3  0.0  0.0  5.58  4  0.0  0.0  4.43  97  For example, the results would be displayed for 1,000 series i f the user requested that 1,000 series be run in the total simulation. Only the first 4 years are shown for brevity. A complete version of the risk analysis summary statistic output is provided in Appendix E.  The results of the sample simulation provided on the following page indicate that the impoundment is likely to operate "wetter" than might have been predicted by the average water and material balance. For instance, in Year 4 spill will occur on average 7 months out of the year, with a 95% probability of spill in any given year. The dam will be operating almost continuously with freeboard less than the "risk freeboard" input by the user.  98  CHAPTER  6.0  C A S E STUDIES  A risk analysis approach was incorporated into Visual Balance to assess the expected operating conditions at an impoundment. The statistical methods used in the risk analysis are based on sound statistical principles well suited for small hydrologic data sets.  To test Visual Balance and assess the usefulness of the risk analysis module, five case studies were developed based on past tailings impoundment design or feasibility projects and available data. A l l case names, meteorological data station names, and identifying details have been omitted or altered in the interest of client privacy. The case studies have been identified as follows:  Case I  North Coast British Columbia, Canada  Case II  North East British Columbia, Canada  Case III  Central Interior British Columbia, Canada  Case IV  Northern Ontario, Canada  Case V  Southern Bolivia  These case studies were selected based on the diversity of site conditions (physical, operational and hydrologic) and regulatory requirements represented. Because Visual Balance does not currently have reservoir linking and routing capabilities, the case studies also needed to be single reservoir systems. The following sections outline each case study's regional characteristics, 99  hydrologic data available for statistical analysis, and general tailings impoundment operating requirements.  The five case studies were run through the average water and material balance module of Visual Balance. Four of the case studies (I, II, III, and V) were run through the risk analysis module of the program. Precipitation data was not available to conduct the risk analysis for Case Study IV, in Northern Ontario. Instead, an average Closure Balance was run for Case Study IV.  The dam crest elevation outcomes from the average Visual Balance run for each case study were compared to the dam crests previously predicted by consultants who used spreadsheet based water balance methods.  The results corresponded well to the previous project outcomes,  indicating that the average water and material balance model was performing suitably.  For case studies that involved operating mines, risk analysis results were qualitatively compared to the actual operating conditions experienced at the mines. For example, during operation at Case Study II, mine personnel have found that actual operating water volumes in the impoundment were less than volumes predicted by an average spreadsheet-based hydrologic balance. The Visual Balance risk analysis was able to predict the probability of such a scenario. If probable operating conditions can be predicted, undesirable circumstances could be anticipated and accounted for in water management facility design and construction, avoiding the need for costly production shut downs due to permit violations or expensive retrofits.  100  It should be noted that the rigorous assessment of site details and hydrologic complexities typically involved with a detailed tailings impoundment design was not afforded as part of the Case Study analysis. Site specific details that were not readily available in the project design reports and water balance spreadsheets were not able to be included in the Visual Balance runs. The results of these Case Studies should be viewed in that light.  6.1  Case Study I - North Coast British Columbia, Canada  As part of a mine site feasibility study, a water and material balance was conducted for a proposed tailings impoundment site in the Coast Mountains, North Coast Region, British Columbia, Canada. At the time of this research, the mine was not yet operating.  The site was located near the confluence of two major rivers. Both rivers which were habitat for anadromous fish species. Management of the impoundment as a closed system was an objective of the overall design. The main impoundment area was to be situated in a site with favourable topographical features and with an advantageous ratio of dam volume to storage volume. However, the major challenge with the site was the relatively high inflow volumes from two creeks entering the basin and the difficulty of diverting these flows around the steep slopes of the tailings basin.  Based on the CDSA DSG classification system for the potential Environmental Impact from dam failure, the impoundment at Case Study I was considered to have "High" potential incremental 101  consequence of failure. Water management requirements at the site involved the following: •  containing a 24-hr PMF flood volume  •  maintaining an additional 1.5 m of freeboard above this EDF.  In addition to the storage of the tailings and waste rock, the tailings dams were to be constructed to heights that allow for the storage of at least 1,000,000 m of available process recycle water. 3  Surface water diversion works were designed to carry a 24 hour, 200 year A E P flood volume. Available water in the tailings pond would originate from the following main sources: •  slurry water with tailings inflow;  •  direct precipitation; and  •  surface water runoff not intercepted by the diversion channels.  The hydrologic data available for Case Study 1 consisted of site precipitation, temperature, and stream gauging data for ten years from a private weather station nearby. Regional analysis, using the two nearest Atmospheric Environment Service (AES) stations, was employed to extend the data for a frequency analysis. The data indicated that precipitation falls predominantly as rain in April through October and predominantly as snow in January and February; the rest of the year receives mixed rain and snow.  The mine was planned to be an open pit, with a low estimated waste to ore ratio of about 0.4. Milling 12,000 tonnes per day (tpd) of ore was expected to produce 120 tpd of concentrate. The major portion of the tailings were expected to be non-acid generating tailings constituting 11,400 102  tpd (95% of 12,000 tpd) or 4,104,000 tonnes per year. Potentially acid generating tailings constituted the remaining 5 percent of the solids (600 tpd). The tailings stream would be approximately 5%wt solids, with about 12,695 mVday water in this tailings stream. The tailings in situ dry density in the impoundment was expected to be 1.3 tonnes/m after one year and 1.4 3  tonnes/m over the long term. 3  The original water and material balance conducted for Case Study I was performed as part of a mine site feasibility study. Because this mine is not currently operating, direct comparisons to operating scenarios are not possible. The operation scenario simulated include 167 months. During the average Visual Balance water and material balance run, neither emergency spills due to "maximum dam lift per month" nor reclaim shut off due to low pond water depths were required in any of the months simulated. The risk analysis results for Case Study I indicate that the mine is likely to run within the freeboard and reclaim requirements specified by the design (Table 6.1).  The risk analysis results are not surprising as the site was located in a topographically favourable location, and much of the catchment runoff is to be diverted which reduces the fluctuations in water elevations due to randomly generated runoff values. Results of the risk analysis may indicate that less water requires diversion from the impoundment and construction costs for future water management features could be decreased. In addition, such positive risk analysis results could be used to support and speed environmental permit applications.  103  T a b l e 6.1 S u m m a r y R i s k A n a l y s i s Results - C a s e S t u d y I Y e a r in Series  Avg. Ann. P r o b . of Spill  Avg. A n n . Prob. of L o w  Avg. A n n . Prob. of N o R e c l a i m  of Solids E x p o s e d  Avg. A n n . Prob.  (%)  Freeboard  (%)  (%)  (%)  A v g . Depth of Water Above Solids (m)  1  0  0  0  0  2.77  2  0  0  0  0  2.32  j->  0  0  0  0  3.04  4  0  0  0  0  4.03  5  0  0  0  0  5.05  6  0  0  0  0  6.09  7  0  0  0  0  7.1  8  0  0  0  0  8.07  9  0  0  0  0  9.04  10  0  0  0  0  9.95  11  0  0  0  0  11.11  12  0  0  0  0  14.51  13  0  0  0  0  16.17  14  0  0  0  0  16.27  6.2  Case Study II - West-Central British Columbia, Canada  A water and material balance was conducted for Case Study II as part of a detailed tailings impoundment design project. The site is located in west central British Columbia, Canada between the Coast Mountains and the Interior Plateau. The mine is currently operating. The tailings impoundment was designed to provide disposal and permanent submergence of the potentially acid generating (PAG) tailings and waste rock.  104  Based on the CDSA DSG classification system for the potential Environmental Impact from dam failure, the impoundment at Case Study II was considered to have "low" to "high" potential incremental consequence of failure, or the impacts perceived by the public were expected to be moderate with no expected fatalities. Water management requirements at the site involved the following:  •  containing an EDF volume of a 1 -in-200 year wet year pond elevation in early operation years, and a PMF after year 3, and  •  maintaining at least a i m freeboard above the EDF.  Hydrologic data available for Case II consisted of long term data from two AES stations and three years of data from the site itself. Since the site was located in between the Coast Mountains and the Interior Plateau, the average annual precipitation rate for the site was estimated from the average of the nearest Coast AES station and the nearest Interior AES station.  The copper-molybdenum ore deposit is being mined by conventional, open pit operations, with an estimated 90.7 million tonnes of mineable reserves being obtained over the predicted 16 year life of the mine. A tailings pipeline and a reclaim barge and pipeline circuit provide tailings discharge and process water recycling capabilities. The embankment was being raised by the centerline construction method over the life of the mine, with planned annual crest raises in the order of three to ten metres in elevation.  105  Case Study II involves a mine and impoundment that has been operating for several years. Current operation reports from this active case study indicate that the tailings impoundment is generally running dryer than expected and that reclaim during winter months using a floating barge has been difficult. When conducting the average Visual Balance water and material balance, the reclaim was shut off due to low pond depths in 10 months out of total of 183 months simulated.  A risk analysis was run for Case II using a risk freeboard above the EDF of 0.75 metre, and 1 metre of pond water required for reclaim. The risk analysis generated by Visual Balance predicted the operating conditions presented in Appendix E and a summary of the annual probabilities is presented in Table 6.2.  The results suggest that there is a strong probability that reclaim from the impoundment using a floating barge may be difficult, with a 100% probability that reclaim will need to be shut off in at least 1 month in each of Years 1 through 5 of operation. In addition, the results indicated that the average number of months with freeboard less than the risk freeboard ranged between 1 and 5.5 in the first five years of impoundment operation. It should be noted that some variability in freeboard is expected in the Visual Balance risk analysis due to the "fixed" dam crest elevations used from the average balance run.  106  Table 6.2 Summary Risk Analysis Results - Case Study II Year in Series  Avg. Ann. Prob. of Spill (%)  Avg. Ann. Prob. of Low Freeboard (%)  Avg. Ann. Prob. of No Reclaim (%)  Avg. Ann. Prob. of Solids Exposed (%)  1  0  1.0  100  0.0  2  0  100.0  100  0.0  -i  0  100.0  100  0.0  4  0  100.0  100  0.0  5  0  80.0  100  0.0  6  0  54.0  100  0.0  7  0  40.0  100  0.0  8  0  35.0  100  0.0  9  0  31.0  98.0  0.0  10  0  29.0  97.0  0.0  11  0  26.0  100.0  0.0  12  0  24.0  92.0  0.0  13  0  31.0  92.0  0.0  14  0  11.0  85.0  0.0  15  0  36.0  83.0  0.0  6.3  Case Study III - North Central British Columbia, Canada  The site used for Case Study III has been in operation for a number of years at the time of the study. The data used for the case study analysis was derived from a project that involved the revision of water and material. The balance revisions were required due to actual operating condition problems and site issues with excess water storage.  107  The site is located in north-central British Columbia, and involves open pit mining of a total of approximately 220 million tonnes of copper and gold ore. The mine life will continue for at least 13 more years, at a nominal production rate of 45,400 tpd. Tailings from the milling process are pumped in slurry form to the tailings impoundment, where they are discharged. Process water is recycled from the tailings pond via a floating pump barge and reclaim pipelines. Seepage through the dam is intercepted in a downstream seepage recovery pond.  Diversion structures are in place up-gradient of the tailings facility to intercept and divert up-gradient surface runoff water flows around the tailings impoundment. To date, the dam raising has at times only just kept pace with tailings and flood storage and freeboard requirements. Winter construction has been necessitated, which is often not ideal working conditions due to construction with wetter materials and the difficulties associated with working at colder temperatures.  Based on the CDSA DSG classification system for the potential environmental impact from dam failure, the impoundment at Case Study III was considered to have "very high" potential incremental consequence of failure by regulators. Water management at the impoundment site involved the following requirements: •  containing an EDF of l-in-200 year return period, 24-hour duration storm event;  •  design for the passing of an IDF equal to the PMF estimation ; 1  Seasonally adjusted storm depths for this event were used in the water balance.  108  •  maintaining equipment and materials for the construction of an emergency spillway at all time, should a longer duration IDF occur; and  •  maintaining at least a 2 m. freeboard above the IDF.  During the average Visual Balance run, the reclaim was sh*ut off due to low pond depths in 2 out of 149 months simulated. The mine at Case Study III is currently operating. Operation reports indicate that the mine is having difficulty maintaining required freeboard and flood handling capacity, which may result in a temporary production shutdown enforced by regulators if the situation does not improve.  A Visual Balance risk analysis was run using a risk freeboard of 1 metre and a pond depth required for reclaim of 0.5 metre. The results of the risk analysis indicate that the impoundment is likely to run "wet", with the probability of low freeboard (below the "risk freeboard" of 0.8 m) being greater than 80% in operation years 4 through 11. The annual probability of emergency spill being required increases to a maximum of 71% in year 10. The results of the Visual Balance risk analysis are presented in Appendix E and a summary is provided in Table 6.3.  6.4  Case Study IV - Northern Ontario, Canada  Case Study IV represents an active mine in Northern Ontario. The existing tailings disposal facility at the site was designed in the early 1980's to store over 10 million tonnes of tailings solids. 109  T a b l e 6.3 S u m m a r y R i s k A n a l y s i s Results - C a s e S t u d y III Y e a r in Series  A v g . A n n . P r o b . of Spill  A v g . A n n . Prob. of L o w Freeboard  (%)  (%)  Avg. A n n . Prob. of N o R e c l a i m (%)  Avg. A n n . Prob. of Solids E x p o s e d (%)  1  0.0  0.0  0.0  1.0  2  0.0  0.0  7.0  1.0  3  0.0  5.0  7.0  0.0  4  1.0  80.0  2.0  0.0  5  56.0  96.0  2.0  0.0  6  46.0  98.0  2.0  1.0  7  20.0  93.0  3.0  0.0  8  23.0  93.0  4.0  1.0  9  39.0  91.0  4.0  0.0  10  71.0  93.0  6.0  0.0  11  40.0  92.0  7.0  0.0  Total tailings production over the life of the mine has been recently re-estimated at approximately 20 million tonnes. In this case study, a water and material balance assessment was conducted as part of the evaluation of options for tailings impoundment expansion. Visual Balance and its average Closure Balance were run on the impoundment expansion scenario ultimately selected by the project consultants.  Based on the CDSA DSG classification system for the potential environmental impact from dam failure, the impoundment at Case Study IV was considered to have "High" potential incremental consequence of failure. The mine operates under a permit which requires, among other provisions, that the water quality in two downstream aquatic habitats be protected.  110  During operations, and in the event of a design storm, the following water management criteria were to apply to the impoundment: •  storing, without release, the runoff resulting from the PMP event, in addition to the two month spring runoff that would be generated during a l-in-10 (wet) year return period runoff event.  •  maintain minimum freeboard of 1 m above the resulting pond elevation.  •  an emergency spillway is to be constructed to provide for emergency release capacity and additional protection against overtopping of the dams.  Upon closure, the spillway is to continue to serve as the emergency spillway and under normal climatic conditions, the following water management design criteria were to apply: •  a minimum water cover of 0.3 m is to be maintained over the tailings surface for the 1 in 100 year return period dry year,  •  a minimum water cover of 1 m is to be maintained over the tailings surface, for normal runoff conditions.  •  an additional emergency spillway is to be constructed to provide additional release capacity in the event of a blockage of the overflow spillway.  •  a minimum freeboard of 1.5 m below the crest of the dams is to be maintained, after closure, under normal runoff conditions.  The mine in Case Study IV involves a number of active tailings impoundments. Visual Balance was used to model an impoundment that is planned to be constructed at the site, but has not yet 111  been built. A risk analysis of this impoundment was not run due to the lack of statistical data regarding precipitation at the project site.  However, some interesting results were provided by the average water and material balance run. During the average water and material balance run, reclaim water was required to be turned off in 32 of the 116 operating months. The depth of free pond water required for reclaim used in the balance was conservatively input as 0.5 metres. If the free pond water depth goes below this value during the Visual Balance average, reclaim is shut off for one month. This result, on only the average run, indicates that Case Study IV may operate much more dry than expected.  The closure plan for this impoundment indicates that tailings are to remain submerged under at least one metre of water. A n average Visual Balance closure assessment was run and the results for Years 1 through 10 following closure are presented in Table 6.4. The average closure balance results indicate that the impoundment spills one or two months out of every year. The steady-state pattern which appears to emerge reflects the fact that the spillway and final dam crest elevations are fixed and that inflow and outflow volumes each year are constant in the "average" closure balance. Closure analysis results indicated that the tailings would remain submerged after impoundment abandonment under average hydrologic Conditions.  The  impoundment appeared to reach a somewhat "steady state" after approximately five years of closure, with the solids submerged under approximately an average of 0.85 m of water.  112  Table 6.4 Summary of Average Closure Balance Results - Case Study I V Y e a r in Series  A v g . A n n . P r o b . of Spill  A v g . A n n . Prob. of L o w Freeboard  Avg. A n n . Prob. of  (%)  (%)  (%)  Solids E x p o s u r e  A v g . W a t e r Depth A b o v e Solids (m)  1  0.0  0.0  0.0  0.05  2  1.0  8.33  0.0  0.79  3  1.0  8.33  0.0  0.87  4  2.0  16.67  0.0  0.96  5  1.0  8.33  0.0  0.88  6  1.0  8.33  0.0  0.92  7  2.0  16.67  0.0  0.97  8  1.0  8.33  0.0  0.89  9  1.0  8.33  0.0  0.89  10  2.0  16.67  0.0  0.95  6.5  Case Study V - Southern Bolivia  A case study from Andean mining region is South America was selected based on the unique characteristics of the projects located in this region. The increased involvement of consultants from British Columbia in mining activities in this region makes Case Study V particularly relevant. Typically, these projects involve limited or unreliable hydrologic data, and a climate that is in sharp contrast with the climate in coastal British Columbia.  A lack of hydrologic data can lead to increased risk in tailings dam design, which in turn leads to increased liability on the part of consultants working in the region. The climate in the western parts of South America is arid and often exhibits evaporation rates exceeding precipitation on 113  {  an annual basis. However, extreme rainfall conditions can dramatically exceed average arid conditions. These challenging hydrologic design conditions have significant implications for British Columbia consultants working in the region.  The Southern Bolivia case study involved a mine and mineral processing centre in the Potosi mining region and is located in the Altiplano of the Andean Mountains. Its elevation is approximately 4,000 m above sea level. The proposed dam site was located in a broad, shallow sloping valley and the reservoir would be located in a basin with a grade of approximately two percent.  The client wanted to construct a new tailings storage facility for tailings produced by a new concentrator. The concentrator was used for the production of lead and zinc concentrates and was commissioned in 1992. The capacity of the concentrator is 1,400 tpd. Previous tailings storage facilities had been constructed at the site, however, the failure of one of the dams led to a temporary facility being used for tailings storage until a new tailings facility could be built.  Hydrological records have been maintained at the site for temperature and rainfall since 1984. The climate data from the nearby town of Potosi dates back to 1958 and was used to supplement the site data record for the purposes of estimating site hydrologic conditions. Annual average total precipitation at Potosi is approximately 400 mm. Eighty-five percent of the precipitation occurs between November and March. The remaining months of the year, particularly May through August, are very dry. For all months of the year, except January, average evaporation 114  rates exceed precipitation. Annual average evaporation recorded at Potosi is approximately 1,400 mm.  Based on the C D S A DSG classification system for the potential Environmental Impact from dam failure, the impoundment at Case Study V was considered to have "High" potential incremental consequence of failure in that the impacts perceived by the public may be severe. Water management requirements at the site involved the following:  •  containing a 1-in-100 year 24 hr storm event, and  •  maintaining a i m freeboard above the EDF.  In Case Study V , controlled release at varied annual release rates, would be required for water management. A pump barge was to be used to reclaim water to the mill from the tailings pond. The pump barge was also to be used to remove excess water from the impoundment. For the purposes of the water balance, it was assumed that no runoff would occur during the dry season. Due to a lack of streamflow data, this flow estimation was made based on professional judgement.  The mine in Case Study V is currently operating, although the particular tailings impoundment considered in the case study has not yet been constructed. No direct comparison between actual operating conditions and risk analysis results could be made as part of this study.  115  During the average balance run, the reclaim had to be turned off in 60 out of 155 months of the mine life. A depth of 0.25 m was input as the required free pond depth and none of the catchment area was diverted. In addition, the actual impoundment design was based on an assumed controlled release rate of 20 to 60 m /hr depending on the operating year, but was set 3  to zero for the Visual Balance run to increase the possibility of reclaim water availability. In proportion to the tailings slurry water inflow rates, this discharge rate is very low.  A Visual Balance risk analysis was conducted for Case Study V and indicates that the impoundment may require controlled spills from Years 1 through 7. In subsequent years, the tailings may be exposed and additional freshwater make up would likely be required at the mine. A summary of the risk analysis results are presented in Table 6.5. Detailed results are presented in Appendix E.  The closure plan for Case Study V indicated that abandonment of the site included permanent submergence of the tailings material. An average Visual Balance closure analysis indicates that the tailings are likely to be exposed, with the water elevation being up to 10 metres below the surface of the solids. This water elevation is calculated is the same manner as average monthly water elevations: the volume of water at the end of the month is converted to an elevation based on the reservoir geometry. However, for the closure risk analysis the solids elevation in the impoundment is fixed based on the solids elevation in the last month of the average Visual Balance run.  116  Table 6.5 Summary Risk Analysis Results - Case Study V Year in Series  Avg. Ann. Prob. of Spill (%)  Avg. Ann. Prob. of Low Freeboard (%)  Avg. Ann. Prob. of No Reclaim (%)  Avg. Ann. Prob. of Solids Exposed (%)  1  17.0  41.0  0.0  0.0  2  21.0  52.0  0.0  0.0  J  19.0  40.0  0.0  0.0  4  18.0  43.0  0.0  0.0  5  25.0  44.0  6.0  1.0  6  23.0  43.0  23.0  9.0  7  19.0  47.0  100.0  71.0  8  0.0  20.0  100.0  100.0  9  0.0  21.0  100.0  100.0  10  7.0  22.0  100.0  100.0  11  9.0  32.0  100.0  100.0  It should be noted that for a site located in an arid area, such as Case Study V , a risk analysis involving randomly generated evaporation values may be more significant than the Visual Balance randomly generated precipitation values.  117  C H A P T E R 7.0  7.1  VISUAL B A L A N C E UTILITY  Program Applications and Advantages  Visual Balance is a useful planning tool for practitioners of tailings impoundment siting and design. Water and material balance for various impoundment sites or different projects can be run quickly and easily. The program represents an improvement over current methods available for water and material balance in British Columbia, which are limited to simple spreadsheets that are not easily transferable between project sites.  During the impoundment siting process, topography, hydrology and location with respect to the mill are the three main optimization considerations (Vick, 1990). Water and material balance may serve to identify certain unsuitable sites where, even with complete diversion of tributary runoff, precipitation far exceeds outflows. Employing Visual Balance to conduct such water and material balances would be a quick and effective component of impoundment site optimization.  Visual Balance is also a useful tool for impoundment design. The risk analysis module using Monte Carlo statistical simulations of critical hydrologic parameters allows the user to evaluate the probability of the impoundment operating under design conditions and subsequent sensitivity to varied hydrologic parameters. Design conditions that may be affected by varying hydrologic conditions include the impoundment operating as a closed system with no release required, or the need to keep tailings submerged at all times. 118  The risk analysis component of Visual Balance can assist in the design stage by assessing likely operating scenarios based on a Monte Carlo simulation of expected precipitation and surface runoff values. Results of case study analysis indicate that it is reasonable to expect the risk analysis module to predict probable water management problems in the tailings impoundment.  Water management problems identified by Visual Balance include insufficient free pond water available for reclaim, inadequate freeboard, uncontrolled release requirements, or tailings solids exposure. Knowledge and anticipation of these challenges could influence tailings impoundment site selection, design, or mine operating conditions.  Planning for these  conditions in  impoundment and facility design could save companies considerable cost and aggravation.  Visual Balance also has direct potential application to the assessment of closure scenarios for tailings impoundments. Closure and reclamation planning for mine tailings impoundments is becoming a more significant factor in the approval process of proposed mine site. In addition, failure to incorporate sound reclamation practices in impoundment planning may lead to expensive retrofits later in the operation. In general, the long-term priorities considered for impoundment closure are as follows (Vick, 1990): •  mass stability of the impoundment,  •  erosion stability,  •  prevention of environmental contamination, and  •  eventual return of the disturbed area to productive use.  119  The concern with water balance estimates for closure scenarios is significant and associated primarily with the mass stability of the impoundment. Hydrologically induced failures due to overtopping or excessive seepage are the major cause of mass instability of abandoned tailings deposits (Vick, 1990).  Risk analysis methods may be useful in the estimation of probable  performance of the abandoned impoundment.  A risk analysis approach to water balance could be used to predict the probable hydrologic scenarios following closure in the impoundment. Closure scenarios are usually evaluated using average hydrologic conditions and extreme flood events. However, it may be useful to assess closure performance during hydrologic circumstances under other than "average" scenarios. For example, if the method of A R D reduction is to keep tailings wet, the risk analysis module can be used to assess the probability of tailings remaining submerged over the long term.  The results of the Case Studies emphasize the predictive capabilities of Visual Balance. In Case Study II where insufficient free water was available in the pond for mine water reclaim, alternate water reclaim methods other than a floating barge could have been designed, or additional fresh water source requirements would have been anticipated. In Case Study III where excess water was predicted to be a probable issue, engineered methods could have been put in place to manage the excess water. In Case Study V , the need for a water treatment facility may have been eliminated by the anticipation of the lack of a need for regular spills.  120  Visual Balance includes robust features so that users can tailor the balance to some project specific operating requirements. Examples of these flexible features include: •  varying annual mining production rates in each year of operation;  •  varying groundwater seepage rate, tailings beach area, and the volume lost to the dam embankment versus the dam crest elevation; and  •  specification of monthly release rates.  Operation parameters can be changed quickly and easily by the program user, and a new water and material balances can be run, in order to evaluate various operation scenarios. Reservoir characteristics, including fraction of runoff diverted, fraction of waste rock submerged, EDF, and hydrologic variables can also be changed in a similar fashion.  7.2  Program Limitations  The objective of this study was to develop a software program which could conduct water and material balance on a monthly basis, similar to water and material balance currently conducted by mining practitioners in British Columbia. These objective were met in the study, however, some additional modules and routines could be added to the program which would increase its utility. These limitations, or potential improvements include: •  1  Visual Balance was not designed to be used at operating mines. Inflow and outflow volumes of hydrologic and mine production variables at an operating mine sites vary from month to month during operation. 121  Currently, the program is only able to  accommodate annual changes in production and is not robust enough to accommodate unique monthly values for inflow and outflow volumes.  The program was written to handle single reservoir systems, which may be a limitation for sites where flow is routed through treatment ponds or secondary reservoirs. A user could accommodate outflows to a secondary reservoir by incorporating these flows into the "spills and release outflow volume" if the outflow was a constant rate.  The reservoir geometry inputs for Visual Balance must be expressed as incremental increases in volume for corresponding increases in elevation. Visual Balance can not be adjusted to take into account unusual physical features of an impoundment site or dam layout. One potential case study was rejected based on the complex reservoir geometry and impoundment configuration that could not be accommodated by Visual Balance.  Visual Balance does not allow any parameters to vary on a daily basis. Monthly parameters are adjusted for the number of mine operation days in a given month, but this in the only "daily" consideration in the program. If daily hydrologic variables are available, the Visual Balance user could manipulate daily hydrologic data to generate monthly mean hydrologic input variables for the program.  The Visual Balance graphical output shows the required dam crest elevations for each month, which results in an unrealistically smooth line representing dam staging. Dam 122  construction is usually only conducted in summer months and dam lifts are shown as annual steps on the dam staging curve (Figure 1.1). In some cases, the dam crest elevation may be fixed for many years, until dam construction commences for another large dam lift. Visual Balance users would need to manually make these adjustments to the Visual Balance graphical output.  Each of these limitations could be resolved through further development of the program. However, the accommodation of unusual impoundment geometries or layouts would require time and commitment that may be in excess of the value of the outcome. A reasonable solution for these sites would be to continue using spreadsheet-based balances.  7.3  Suggestions for Further Development  The format of Visual Balance is such that additional flexibility features, data input and management means, and calculations modules could be added on a case specific basis. Some additional features and modules might include: •  a mass balance water quality module to model the quality of water in the impoundment and in potential releases;  •  a mechanism for reservoir routing and reservoir linkage for the case of multiple tailings impoundments or treatment ponds;  •  improved graphical output, including dam staging curve options; and  •  data input flexibility to alter production rates and water levels as the mine operates. 123  The addition of a water quality module to the software program could be readily added as necessary in the future. The concentration of substances in a water body, such as a tailings impoundment, is dependent on the variation of three dominant factors. A mass balance of these dominant factors could be performed by Visual Balance. These dominant factors are: •  net water input,  •  mixing over the depth and area of the water body, and  •  transformation of the substance via routes such as decomposition, deposition, interaction or consumption by biological organisms.  This research and software development focused on mine tailings impoundment applications. However, tailings are generated by other industries including: •  the chemical industry (potash mining or salt deposits),  •  aggregate industry (washing out of sand and fines from crushed rock aggregate),  •  agriculture (soil from vegetable cleaning), and  •  domestic sewage or industrial effluent solids (ICOLD, 1996).  Visual Balance need not be limited to applications in the mining industry. Landfill design projects in these industry sectors also involve conducting site water and material balances for solid waste impoundment. The model could easily be adapted to conduct water and material balance assessments at industrial tailings storage sites for any industry.  124  8.0  CONCLUSIONS  Current methods available for water and material balance at tailings impoundments in British Columbia are generally limited to simple spreadsheets. The lack of flexibility and transparency associated with these spreadsheets has been identified as a problem within the industry. In addition, the spreadsheet balances are conducted using average hydrologic values and commonly do not include risk analysis. Methods for risk analysis of spreadsheet-based impoundment balances are limited to statistical distributions provided within spreadsheet packages or developed on a project specific basis.  The Visual Balance software program developed as part of this research is a fast, simple method of modelling the water and material balance in a single impoundment tailings disposal system. It is reasonable to conclude that given the appropriate level of design detail and hydrologic data, Visual Balance is an effective tool for predicting required dam crest elevations over the operating life of a tailings impoundment. Moreover, the risk analysis module is useful in aiding in the anticipation of probable water management problems, and in assessing the likelihood of success for closure scenarios.  125  BIBLIOGRAPHY  Abramowitz, M . , and I. A. Stegun. 1966. Handbook of Mathematical Functions with Formulas, Graphs and Mathematical Tables. National Bureau of Standards Applied Mathematic Series 55. U.S. Government Printing Office, Washington, D.C.  American Society of Civil Engineers. Task Committee on Spillway Design Flood Selection. 1988. Evaluation Procedures for Hydrologic Safety of Dams. New York. 95 p.  American Society of Civil Engineers.  1995. Hydraulic Design of Spillways - Technical  Engineering and Design Guides as Adapted from the US Army Corps of Engineers, No. 12. New York. 120 p.  Anthony, L . 20 February 1999. Mine that caused Spanish toxic spill to be reopen soon. Available HTTP: http://interactive.cfra.eom/l999/02/20/94956.html  Blakeman, W.B., Finlay, P.G., and C.G. Dumaresq. 1999. A Multistakeholder Approach to Update Canadian Mine Effluent Regulations. IN: Tailings and Mine Waste 1999 - Proceedings of the Sixth International Conference on Tailings and Mine Waste 1999. A . A . Balkema. Rotterdam, p. 601 - 609.  Bruce, I. G., Logue, C , and L . Wilchek. 1997. Trends in Tailing Dam Safety. Canadian Institute of Mining. 1997 Annual Meeting CD Rom Proceedings. Vancouver.  Bruce, J.F. and R.H. Clark. 1966. Introduction to Hydrometeorology. Pergamon. Toronto.  Canadian Dam Association. 1999. Dam Safety Guidelines. Canadian Dam Association. Edmonton, Alberta.  126  Canadian Dam Association. 1996. Dam Safety Guidelines - Proposed Revisions. Canadian Dam Safety Association. Edmonton, Alberta.  Cassidy, J. J., and S. L . Hui. 1990. Flood Criteria and the Safety of Tailings Dams. IN: International Commission on Large Dams (ICOLD - CIGB) - Australian National Committee on Large Dams. International Symposium on Safety and Rehabilitation of Large Dams. 1990. Sydney, Australia, p. 137 - 145.  Chandler, R.J. and G. Tosatti. April 1995. Stava tailings dams failure, Italy, July 1985. Proceedings of the Institution of Civil Engineers - Geotchnical Engineering, v 113, n2, p. 67 -79.  Cho, H . 1986. W A T E R - Thornthwaite Climatic Water Balance Program. Department of Geography, The University of British Columbia, Vancouver, Canada. 21 p.  Commission Internationale des Grands Barrages (CIGB - ICOLD) and United Nations Environment Programme (UNEP). 1996. A Guide to Tailings Dams and Impoundments Design, Construction, Use and Rehabilitation: Bulletin 106. CIGB, Paris. 239 p.  Committee for International Commission on Large Dams, India and Central Board of Irrigation andPower. 1992. Research Needs in Dam Safety, First Conference. 3-6 December 1991. A . A . Balkema, Rotterdam.  Committee on Safety Criteria for Dams, Water Science and Technology Board, Commission on Engineering and Technical Systems, and National Research Council. 1985. Safety of Dams Flood and Earth quake Criteria. National Academy Press. Washington, D.C. 276 p.  Consoli, N.C. July 1997. Comparison of the measured and predicted performance of tailings sedimentation. Proceedings of the Institution of Civil Engineers - Geotechnical Engineering, v. 125 n 3 p. 179 - 187. 127  Craig, R. F., 1989. Soil Mechanics - Fourth Edition. T.J. Press (Padstow) Ltd., Cornwall, p. 410.  Davis, C.V. and K. Sorensen.1969. Handbook of Applied Hydrology. McGraw-Hill. New York.  Davies, O. L . , and P. L . Goldsmith. 1972. Statistical Methods in Research and Production: Fourth Revised Edition. Oliver and Boyd, Edinburgh.  Davis, G. S., Foulk, C. L , and B. V . Close. 1999. A Groundwater Mass Loading Balance for the Apache Tailings Area, Leadville, Colorado.  IN: Tailings and Mine Waste 1999 -  Proceedings of the Sixth International Conference on Tailings and Mine Waste 1999. A . A . Balkema. Rotterdam, p. 67 - 76.  Dowdy, S., and S. Wearden. 1983. Statistics for Research. John Wiley & Sons, Toronto.  Eichert, B.S., Kindler, J., Schultz, G.A., and A . A . Sokolov. 1982. Methods of hydrological computation for water projects.  United Nations Educational, Scientific and Cultural  Organization (UNESCO). Imprimerie de las Manutention, Mayeene, France. 122 p.  Ferguson. H.L. and V . A . Znamensky. 1981. Methods of Computation of the Water Balance of Large Lakes and Reservoirs - Volume I Methodology. United Nations Educational, Scientific and Cultural Organization (UNESCO). Imprimerie de las Manutention, Mayeene, France. 120 p.  Ferguson, K.D., and K . A . Morin, 1988. Pre-Mine Prediction of Acid Mine Drainage. In: Dredged Material and Mine Tailings. Edited by Dr. Willen Salomons and Professor Dr. Ulrich Forstner. copyright by Springer-Verlag Berlin Heidelberg 1988.  Fisheries Act, The. Revised Statues of Canada. 1996. Chapter F-14. Queen's Printers. Ottawa.  Franklin, C. 1998. Why Visual Basic. Available at H T M L : http://www.cgvb.com/whyvb.boa. 128  GEO-SLOPE International Ltd. 1994.  SEEP/W for Finite Element Seepage Analysis -  Version 3. Calgary, Canada.  Henderson, F . M . 1966. Open Channel Flow. Macmillan Publishing, New York. 522 p.  Hogg, R. V . , and E. A . Tanis. 1983. Probability and Statistical Inference: Second Edition. Macmillan Publishing Co., Inc., New York.  Holzner, S. 1998. Visual Basic 6 - Black Book. The Coriolis Group Inc. Toronto. 1095 p.  International Commission on Large Dams (ICOLD) - Spanish National Committee.  1992.  International Symposium on Dams and Extreme Floods. Granada, Spain. 409 p.  Kautsky, M . 1999. Hydrogeologic Uncertainty and the Design of a Remedial Well Field. IN: Tailings and Mine Waste 1999 - Proceedings of the Sixth International Conference on Tailings and Mine Waste 1999. A . A . Balkema. Rotterdam, p. 525 - 534.  Kempthorne, O., and L. Folks. 1971. Probability, Statistics, and Data Analysis. The Iowa State University Press, Ames, Iowa.  Kite, G.W. 1978. Frequency and Risk Analyses in Hydrology. Water Resources Publications. Fort Collins, Colorado. 224 p.  Kundzewicz, Z. W., ed. 1995. New Uncertainty Concepts in Hydrology and Water Resources. International Hydrology Series. Cambridge University Press. Cambridge, Great Britain. 322 p.  Lappako, K. 1993. Mine Waste Drainage Quality Prediction: A Literature Review. Draft Paper. Minnesota Department of Natural Resources, Division of Minerals, St. Paul, Minnesota.  129  Laws, E. A. 1993. Aquatic Pollution, A n Introductory Text - Second Edition. A n Interscience Publication. John Wiley & Sons, Inc. Toronto. 611 p.  Lettau, H.H. and E.J. Hopkins. 1991. Evapoclimatonomy III: the reconciliation of monthly runoff and evaporation in the climatic balance of evaporable water on land areas. Journal of Applied Meteorology. 30(6), p. 776 - 792.  MacKenzie, D. New Scientist Planet Science: Donana dammed Archive 2 May 1998, http://madcow.newscientist.com/ns/980502/nsludge.html  McBean, E. A., and F. A . Rovers. 1998. Statistical Procedures for Analysis of environmental Monitoring Data and Risk Assessment. Prentice Hall PTR, Upper Saddle River, New Jersey.  Microsoft Corporation. 1998. Microsoft Visual Basic 6.0 Reference Library, Volume 1 Microsoft Visual Basic 6.0 Language Guide. Microsoft Press. Redmond, W A . 1192 p.  Microsoft Corporation. 1998. Microsoft Visual Basic 6.0 Reference Library, Volume 2 Microsoft Visual Basic 6.0 Controls Reference. Microsoft Press. Redmond, W A . 1130 p.  Microsoft Corporation. 1998. Microsoft Visual Basic 6.0 Reference Library, Volume 3 Microsoft Visual Basic 6.0 Component Tools Guide. Microsoft Press. Redmond, W A . 962 p.  Microsoft Corporation. 1993. Microsoft Visual Basic. Programming System for Windows Programmer's Guide. Microsoft Press. Redmond, Washington. 713 p.  The Mining Association of Canada. September 1998. A Guide of the Management of Tailings Facilities. Ottawa, Ontario.  Mining Journal Research Services. May 1996. Environmental and Safety Incidents Concerning  130  Tailings Dams at Mines. Results of a Survey for the years 1980 - 1996 for United Nations Environet Programme, Industry and Environment, Paris, France. 129 p.  Mudder, T. and K . Harvey. November 1998. Closure Concepts. Mining Environmental Management.  Murthy, Y . K . 1991. Research Needs for Safety of Earth Dams in India. In: Research Needs in Dam Safety, First Conference. Sponsored by: Committee for International Commission on Large Dams, India and Central Board of Irrigation and Power. 1992.  A.A. B A L K E M A ,  Rotterdam.  Niccoli, W. L., and J. B. Finley. 1999. Uncertainty: Geochemical Water Quality Predictions of An Open Pit Mine. IN: Tailings and Mine Waste 1999 - Proceedings of the Sixth International Conference on Tailings and Mine Waste 1999. A . A . Balkema. Rotterdam, p. 591 - 599  Patton, S.B., Gerbrandt, H., and C. Wassmami. 1999. Closure of a cyanide tailings pond. IN: Tailings and Mine Waste 1999 - Proceedings of the Sixth International Conference on Tailings and Mine Waste 1999. A . A . Balkema. Rotterdam, p. 785 - 790.  Plate, E.J. and L. Duckstein. 1987. Reliability in Hydraulic Design. In: Duckstein, L. and Plate E.J. (Eds.) Engineering Reliability and Risk in Water Resources. N A T O ASI Series E: Applied Science. No. 124. Nijhoff, Dordrecht.  Rowney, A. Charles and Craig R. Macrae. 1992. Qualhymo User Manual, Release 2.1. Department of Civil Engineering, Royal Military College of Canada, Kingston, Ontario.  Rowney, A . Charles and Craig R. Macrae. 1992. Qualhymo Technical Reference Manual, Release 2.1. Department of Civil Engineering, Royal Military College of Canada, Kingston, Ontario.  131  Sawatsky, L . F . , Beckstead, G., Long, D., Gould, G., and R. Nutbrown. Nov/Dec 1997. Optimizing Water Management at Gregg River Coal Mine. C I M Bulletin. Vol. 90. No 1015. Calgary.  Schmidt-Petersen, R., Newcomer, R., and K . Johnejack. 1998. Seepage from older tailings ponds, Chino Mines Company, New Mexico: Part II. IN: Tailings and Mine Waste 1998 Proceedings of the Fifth International Conference on Tailings and Mine Waste 1998. A . A . Balkema. Rotterdam, p. 471 - 480.  Schroeder et al., U.S. Army Engineer Waterways Experiment Station (WES). 1988a and 1988b. Hydrologic Evaluation of Landfill Performance (HELP) ModekVersion 2. Vicksburg,MS.  Sokolov, A . A . and T.G. Chapman. 1974. Methods for Water Balance Computations - A n international guide for research and practice. The UNESCO Press. Paris.  Thornthwaite, C.W., 1955. The Water Balance. IN: Climatology, Laboratory of Climatology, Centerton, N.J., Vol. VIII, N o . l , p. 104.  U.S. Army Corps of Engineers, Hydrologic Engineering Centre. 1998. HEC-5 Simulation of Flood Control and Conservation Systems, User's Manual, Version 8.0. U S A C E , Davis.  U.S. Bureau of Reclamation, Department of the Interior. 1987. Design of Small Dams - Third Edition. A Water Resource Technical Publication, p.255-258.  USD A Forest Service 1993. Acid Mine Drainage From Mines on the National Forests, A Management Challenge. Program Aid 1505, 12 p.  U.S. Environmental Protection Agency, Office of Solid Waste, Special Waste Branch. 1994. Technical Document - Acid Mine Drainage Prediction - Draft. Washington, DC. 49 p. 132  U.S. Environmental Protection Agency, Office of Water and Wastewater  Management.  September 1997. Technical Document - Appendix B - Potential Environmental Impacts of Hardrock Mining. Available H T M L : http:// www.epa.gov/owmitnet/appb.pdf  Vick, S. G., 1997. Tailings Dam Failures: Effects and Consequences. Canadian Institute of Mining, 1997 Annual Meeting. Vancouver.  Vick, S. G., 1990. Planning, Design and Analysis of Tailings Dams. BiTech Publishers. Vancouver, Canada. 369 p.  Viessman, W. Jr., and G. L . Lewis, 1996. Introduction to Hydrology; fourth edition. HarperCollins College Publishers, New York. 760 p.  Wagener, E. M . , Craig, H.J., Blight, G., McPhail, G., Williams, A . A . B . , and J.H. Strydom. 1998. The Merriespruit Tailings Dam Failure - A Review. 1998. IN: Tailings and Mine Waste 1998 - Proceedings of the Fifth International Conference on Tailings and Mine Waste 1998. A . A . Balkema. Rotterdam, p. 925 - 952.  Water Act, The. Revised Statues of British Columbia. 1996. Chapter 483. Queen Printers. Victoria, Canada.  Williamson, J.R.G. 1990. South African Tailings Dam Safety. IN: International Commission on Large Dams (ICOLD - CIGB) - Australian National Committee on Large Dams. International Symposium on Safety and Rehabilitation of Large Dams. 1990. Sydney, Australia, p.235-244.  World Bank, The. February 1997. Environmental Assessment of Mining Projects - Draft. Environmental Assessment Sourcebook UPDATE Environment Department, The World Bank. Available H T M L :  http://www.worldbank.org/html/fpd/technet/decade/assess.htm  133  Appendix A  Visual Balance Menu and Data Input Forms  134  Welcome to  Visual Balance The Water end.Matenals Balance Model '.creaJedifortailmgsjimpoundment applications-  Click here to start Visual IJalanrp \  i ,  Produced by Andrea Estergaard * \witb the support of  arjih and Environmental ENGINEERING GLOBAL SOLUTIONS The Science Council of British Columbia  The University of British Columbia 38 Start  £  3j  &5  §  ,  ft  Welcome  9 08 A M  135  •[.Visual B a l a n c e M a i n Edit  Goto  £ i e w Proiect Existing P r o t e c t  E»t  Menu  Help  liisis^SI^^MIiiliBiiiBii  Siliil Visual Balance Main Menu To Proceed, select a project option from the File menu above  1MB  at.. Starting a New Visual Balance Data File File  belt  He  Sti  1  -  •3S«to'thc'^pe'^ application for  i  thisfile.  C Solid Watte Lai^iAppiicaliori r  :  : !33£§  .Other UndfBAppfcaiion  • •-> Step 2  :  • •: • Entej the name of the directory where Visual Balance " yourharddriyp.  Proceed to the Data Editing Menu th ihrr seciwi through the'fie''menu  Start)  $  * £ , S3  ' ". L  f  137  '• •  :  -  - - . . . .... -. ...... .,. T  ;Mitre I aUngilrnpoijridm^nl A^Jk atiort  f" Other l_arwJfiilA^ 1  •  .  - Select the lower tn which your ptoject data files are SAved:. ". • " • .1 •J-MS5ETUP.T • AofofiaQ  Steps  - -  - ••  Proceed to ltel.>*3 tdhvg M*:,u to «M project data o. go dierfiy to ' *eOutput Menu to run Visual Balance.  aBStartj .  0  <J.j ^  $  |C5 Select  Exiting  Data .  138  * file  Visual B a l a n c e Lditmg M e n u  GoTo Help  MM  »J5Sf.'3??  General project Information : Production and Mateii.il Irfoimafion . • Site Hydrologic Data Reservoir Information fic-.eivoii Li'.k iVater Q uajty Information • Dam Design and Safety Data Bisk Analysis Data  'Balance Data Edit Menu ni^ucti  Select project data forms through the menu above.  afrStartpglgj-jgj'  JO Visual Balance Eoffin..  139  . General Project £ile  Edit  60T0  mm  Data  Help  Read in existing file data of save changes through the file mem* SrteName:  Site Description:  .'.  ••iiiijjiMiiiMiir"  Starter Dam Elevation (mat.!)  'Number of Reservoirs, Ponds or Irnpoundments in the Mine Site System "r—'•- • '•  You must enter a value! If there is no . starter dam. or the elevation is unknown andyou wouldfroVisual f Balance to compute the required dam elevation, enter 0  140  •—  General Operation Information  i  Month of Mine Start Up -  Yeai of Mine Start Up  Month of Mine Closure "-Year of Mine Cfostre  i  I  Note: -Mawmum 50 ywrsol operation for Visual Balance Model.  Production  ^  Note: Input Month* EfoiMayl. Input Ye Integer {e.gSOCl}  erteg.  ..  lnf«iw#wiir,-™ j^ ,  Mffi^iMWiMiMin  Select artrually varying or constant (*" AmuaBu varying ptoduction irrforniafaon  IS  <~ Constant production values Total Tonnes Mined  Ii iK.i  "Tonnes Mined AsMetal (Concentrate] r "  (tories/m 31 A  Click Here to edit AnnualV Varying Production .  Waste Rock In Situ Void Ratio p ..FradionofWasteRockS.iimerg,  Tonnes of Taring  Fraction of Woste Rock Void: Containing Tail  Tonnes Mined As Waste Hock  •Check Sum of Metal Concentrate, Waste ft ock and Tailings should equal total tonnes mined. , Number of.Operaling Days per Month.,  Click Here to Edit Operating Days File  T a i l i n g s Information  TaingsTn SituPegree of Saturation  f^rse Fraction Cycloned Out '  in Situ Tarings Void Ratio  |"  f  Taiings Slurry fraction As Water W  [fraction!  Tailings Dry Density :-^*S§  "5 •  Specific Gravity of TaJings Particles (tonnes/m :3) •  \HM?^mm^ 9 26 AM  141  , H y d r o l u g i c a l D a t a Input  HH^  Edit Hydrologic Data File  ^ ^ j i ^ ,  I  .,  «-  *» *t  - S e l e c t the Environmental D e s i g n Flood (IDFJ magnitude lot the tailings impoundment.  Input the volume at the EDF.  C PiobableHa»mumFlood [PMFJ  WinterfJan • Mar|  r  1 in 10,000 year return pin,  Spring (Apr-Jun]  C  T i n y e a r return periodflood  : ^Summer (Jul - Sep)  - C • 1 in 2 0 0 ye,* return period flood 1  cubic metres  Fall (Oct: Dec)  ,1 in 100 year return period flood  ;  cubic metfe* •• cubic rncties cubic rnel.es.  'button  Ttie Visual Balancefirs*.Analysis opijon uses snowpad. a c u u T « J a i n and siuvrmel drstriiutari value, to calujltfe stochastic runofl yafues Please enter (tie month m which srovvpack assumufatjoh starts, the month wtiich it endj and Itie total number of months the mow pack accumulates. Snowpack Start Month  Snowpack End Month  |  Total Snowpack Accumulation Months  forMayJ  142  '  ™ — ' —  143  fc. Wd'el Quality Infomiation •,F>  SgjM  ME  ficTotlelp  • W a t e r Quality/ ChcaattryInformation Numbef d Water Quality Parameters  Parameter fl1 Chemical Name  parameter in Abbteviation  Coric*r*af(bn of Pafairtetei '81 in I ailinys .Slurry  Degradation / Decay Rare tor Parameter tt 1  Parameter 82 Diemical Name  <  '  Parameter 82 Abbreviation  forK^ntration of Parameter 82rnTaffirigsSI>jrty  Degradation /Decay Rate tor Parameter 82  144  » , Dam Satcty and Design Inlormatu  Sfxi  Design Freeboard 81  ind 2010 n i b  mi- ; !  s provide  ' TlkrW  Design Freeboard 1*2  Tor Yea,  I  • * • -  1 - Emergency sp*oceuis «i 8ie "average" water : and material bafariee when the legmred dam til; : *> «.fliwn'monlh'»(pii(l eweed this itiawrcrum " ' dam lift height  i^BCamLiftHe }f^» l 9  In  emergency ipj occur; in the rr> analysis who .the actual water elevation in the 4he elevation of (lie spillway invert. iffiliRHifl'fwisiliii^ Errceigency sp* occursthe closure balance . r^ttecfottire its*, anafcsis when the actual  Additional Notes: '. For higher list, dams and site! ckreure s c e n a r i o s may be w a i i a M over 5ffl years. F o r bwirsk sites, the closure scenario' > imaybedesrgjiedtbiastioiterperiod. VnruafBalarKewiflrunupto The use of , ii 500 years in a seneswasnot alowed based on todelsr^da^ performance. : . .:..:.: ' rciw InrffiliS^JiffliiMf^^ « ^ S S O e s i g n Freeboard", according to the Canadian Dam Safety Gudcfirros 1999. is the vertical distance between the j»' dam erf st elevation ond the water level that would be eKperienoed during the Inflow Design Flood elevation : The Starter 0am crest elevation is entered through the General Project Data input form  iia Start j . 0  « j  ' §  :  ! Q Visual Balance Editing Menu!  145  * Risk Analysis Data Input  H P "  H d p  Input Mean Annual Precipitation J  mrr  No'e The temporal d r t t i f c u t K i n •of precipilalion data, will be, • •u*ed«,tJ, d,oloB,c,, k . - anatyas to your reservoir/ •••• '., Temporal distributor data car, " be edited through the Site j _ Hyoroicgy Data in the Edit """"HaSESMenu etK  S  :  Input tte number of yeats ofrecordtor •«ecfc,labori.data. Step 6 Input a "ml. Ireeboatd" value This value can be the earns as your design heebaord. howevei you may want lo select a lower freeboard to assess how often the water tevd exceeds some critical threshold (ottia than spiling), j, — ^  Step? Numbei of years lor which closure scenario was designer Wawnurn 100 Years).:  .  .(<•>,  iNJirV^H*^  146  '9:31AM  147  Appendix B  Visual Balance Data Input Excel Tables  148  CO  o  o w o  5  ~*—•  CO CO  CO CO CO  CO  in  CD o co  LO  CO  en  CD CO  CD  LO CO  CO CO  CO CO  CO  cb CO  cb CO  CO  CO  CM  CM  CO  d  CO T—  CO  CO CM  CM CM  •sr o  CD 00  o E  i  LU —  O -* = -i-t  o  CM  o o CO CM  CO  CD  o  CD CD  CO  cb LO  CO T—  co  CO  LO  CO  CO  CN  cd  o  LO CM  00 00  CD  LO  cb  ?o o 2 t|  5  rlO co  E  LU — CD  o o o CM  d  cb  cb LO  C ra d> ra  £  ? <D  3  ro ro CD  Q>  -3  O  Q .  Q  O  « -5  -  !5 * £ O1  ra  c  - 5 °  o c  !»=  <  •!2  E E  ?  E  o T3 >O.  c c X — rororo Q ro  co ro 3  T3  c  > -5 <  cr OJ  L O L O L O L O L O L O L O L O L O L O L O L O  CD CD  cr: 2 > <  E = .2  CD  o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o  o is 2  CO  5  o o o o o o o o o o o o o o o o o o o o o o o o 5 f o o o o o o o o o o o o  1 O  ?  O  2 w**— 2  •i  c « .2  C M T - T - O C M C O L O r - ~ C D L O C N C N O O O O O T C M C M T O O O  •p  o o o o o o o o o o o o  O 3 .2  E i 5 Q  u ^  D) > <  CD  r~~  CM  T -  CD  LO  LO  CM  i-  CO  CO  LO  CO  CD  CO CM  O CO  CO CD  CD  CM  ^ ioCM  E  CD  o_  ro  < 2  3  <  > CD  CO  O  O  o  O CD  z a  Visual Balance Required Data Input File Volume Surface Area vs. Elevation Data  Volume-Area-Elevation Data Elevation Interval Start (m) 4,011.00 4,012.00 4,013.00 4,014.00 4,015.00 4,016.00 4,017.00 4,018.00 4,019.00 4,020.00 4,021.00 4,022.00 4,023.00 4,024.00 4,025.00 4,026.00 4,027.00 4,028.00 4,029.00 4,030.00 4,031.00 4,032.00 4,033.00  Surface Area (At End of Interval)  Volume End (m) 4,012.00 4,013.00 4,014.00 4,015.00 4,016.00 4,017.00 4,018.00 4,019.00 4,020.00 4,021.00 4,022.00 4,023.00 4,024.00 4,025.00 4,026.00 4,027.00 4,028.00 4,029.00 4,030.00 4,031.00 4,032.00 4,033.00 4,034.00  Incremental (m3) 0.00 1,245.00 7,220.00 34,535.00 63,392.00 86,297.00 113,699.00 128,579.00 156,828.00 177,125.00 210,931.00 241,229.00 283,752.00 308,715.00 347,710.00 375,699.00 413,126.00 438,224.00 480,239.00 507,154.00 543,540.00 571,901.00 611,764.00  Cumulative (m3) 0.00 1,245.00 8,465.00 43,000.00 106,392.00 192,689.00 306,388.00 434,967.00 591,795.00 768,920.00 979,851.00 1,221,080.00 1,504,832.00 1,813,547.00 2,161,257.00 2,536,956.00 2,950,082.00 3,388,306.00 3,868,545.00 4,375,699.00 4,919,239.00 5,491,140.00 6,102,904.00  150  (ha) 0.00 base elevation this row 0.42 start data in this row 2.09 4.90 7.48 10.00 12.11 14.27 16.70 19.40 22.61 26.25 29.62 32.82 36.17 39.44 42.57 45.92 49.37 52.53 55.77 59.18 30.59 •  Visual Balance Required Data Input File Operating Days per Month  Month January February March April May June July August September October November December Operating Days In Year  Total Days In Month (Fixed)  Operating Days In Month (User Input)  31 28 31 30 31 30 31 31 30 31 30 31  30 27 30 29 30 29 30 30 29 30 29 30  353  151  Visual Balance Required Data Input File Spill / Release Volumes  Month January February March April May June July August September October November December  Annual Spill Volume  Spill Rate (cubic metres per month) 0 0 0 0 0 0 0 0 0 0 0 0  0  152  Visual Balance Optional Data Input File Annually Varying Waste Production Rates  Year 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  Total Tonnes Mined (tonnes/day) 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 1020  Tailings to Reservoir (tonnes/day) 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 16438 1020  153  Waste Rock to Reservoir (tonnes/day) 2018.63 3161.64 3287.67 7179.18 11651.78 14794.52 13972.60 0 0 0 0 0 0 0 0 0  E  2 ^ (D  Si  LO  OJ  =  G)  O  ra a. Q- F u—  co  in ° O  §  Q  o  c ra LU  >  LU  c  r5 ra ra CO  j> LU  LO  Appendix C  Visual Balance Computer Code  155  'Visual Balance - Visual Basic Procedure Code,  'Main Menu' Code Private Sub Form_Load() 'Centre Form on Screen and set up title.' Top = (Screen.Height - Height) / 2 Left = (Screen.Width - Width) / 2 'Create Control Array for the Number of Reservoirs Buttons to Create." 'If Index < intNumReservoirs Then 'Load CmdReservoir(Index) 'CmdReservoir(Index).Move 0, 0 'CmdReservoir(Index). Visible = True 'Index = Index + 1 'End If FrmMainMenu.mnuSaveChanges.Enabled = False FrmMainMenu.mnuSaveChangesAs.Enabled = False FrmMainMenu.mnuGeneralData.Enabled = False FrmMainMenu.mnuMineProductionlnfo.Enabled = False FrmMainMenu.mnuSiteHydrology.Enabled = False FrmMainMenu.mnuReservoirlnfo.Enabled = False FrmMainMenu.mnuReservoirLinks.Enabled = False FrmMainMenu.mnuWaterQuality.Enabled = False FrmMainMenu.mnuDamSafetyStandards.Enabled = False FrmMainMenu.mnuRiskAnalysisData.Enabled = False FrmMainMenu.mnuGoToEditMenu.Enabled = False FrmMainMenu.mnuGoToOutput.Enabled = False FrmMainMenu. Show End Sub Private Sub mnuExistingProject_Click() txtClickExisting.Text = "Yes" Load FrmExistingFile FrmExistingFile.Show End Sub Private Sub mnuGoToOutput_Click() Load FrmRunNumber FrmRunNumber.Visible = True 156  FrmRunNumber. SetFocus FrmRunNumber. Refresh End Sub Private Sub mnuNewProject_Click() StrMsg = "Would you like to view the 'site map' and general instructions for using the Visual Balance program?" Select Case MsgBox(StrMsg, vbYesNoCancel) Case Is = vbYes Load Frmlnstruct Frmlnstruct. Show Case Is = vbNo Load FrmNewFile FrmNewFile. Show Case Is = vbCancel Me. Show Exit Sub End Select End Sub Private Sub mnuReadMe_Click() Load FrmReadMe FrmReadMe .Show End Sub  Private Sub mnuSaveProject_Click() ' Clicking the Save command button causes the Save As dialog to appear. On Error GoTo Save_Error With dlgDialog ' Setting CancelError to True causes a trappable error to ocBeg if the user hits Cancel .CancelError = True ' The Filter is now set to specify those groups of files that our users will be most ' interested in using the dialog to locate .Filter = "Text Files (*.txt)|*.txt" ' Filterlndex is set to 1, meaning that the first part of the filter will be used as the ' default, in this case *.txt 157  .Filterlndex = 1  .DialogTitle = "Select a name to save data as" ' A n action code of 2 triggers the save as dialog to appear. .ShowSave End With MsgBox "You selected " & dlgDialog.FileName Exit Sub Save_Error: ' Cancel the error trapping On Error GoTo 0  (  MsgBox "You hit cancel, so no file was selected and in an application no data would be saved" Exit Sub End Sub  158  'Existing File' Code Option Explicit Dim strProjectDirectory As String * 25 Dim strpath, strWhereSaved As String Dim blnChecked As Boolean Private Sub LblTipFile_Click() End Sub . Private Sub mnuCancelToMain_Click() Unload Me Load FrmMainMenu FrmMainMenu.Refresh FrmMainMenu. ShowEnd Sub Public Sub mnuGoToEditMenu_Click() IfDirProject = "C:\"Then Beep MsgBox "Please select the existing project folder," & _ "or return to the Main Menu." GoTo ProcNoFile: End If If DirProject = "C:\VisualBalance" Then Beep MsgBox "You cannot select the main program directory to save your project files.' vbExclamation GoTo ProcNoFile: End If strpath = FrmExistingFile.DirProject If OptMine Then Me.Hide Load FrmEditMenu FrmEditMenu. Show Elself OptSolidWaste Then Me.Hide Load FrmSolidWastelnfo 159  FrmSolidWastelnfo. Show ElselfOptOtherThen. Me. Hide Load FrmOtherLandfill FrmOtherLandfill.Show Else MsgBox "You must select a project type to proceed.", vbOKOnly End If ProcNoFile: End Sub Public Sub mnuGoToOutput_Click() IfDirProject = "C:\" Then Beep MsgBox "Please select the existing project folder," & _ "or return to the Main Menu." GoTo ProcNoFile: End If If DirProject = "C:\VisualBalance" Then Beep MsgBox "You cannot select the main program directory to save your project files.' vbExclamation GoTo ProcNoFile: End If strpath = FrmExistingFile.DirProject If OptMine Then Me.Hide Load FrmRunNumber FrmRunNumber. Visible = True FrmRunNumber. SetFocus FrmRunNumber.Refresh Elself OptSolidWaste Then Me.Hide Load FrmSolidWastelnfo FrmSolidWastelnfo. Show Elself OptOther Then Me.Hide 160  Load FrmOtherLandfill FrmOtherLandfill.Show Else MsgBox "You must select a project type to proceed.", vbOKOnly End If ProcNoFile: End Sub Private Sub mnuExit_Click(Index As Integer) Dim StrMsg As String Beep StrMsg = "Are you sure you want to close Visual Balance?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then End Else End If End Sub Public Sub Form_Load() Unload FrmLogo Load FrmBlank FrmBlank. Show 'Centre Form on Screen' Top = (Screen.Height - Height) / 2 Left = (Screen. Width - Width) / 2 DirProject.Path = "C:\" blnChecked = False FrmEditMenu.mnuGeneralData.Checked = blnChecked FrmEditMenu.mnuMineProduction.Checked = blnChecked FrmEditMenu.mnuDamSafety.Checked = blnChecked End Sub Private Sub ReadMe_Click() Load FrmReadMe FrmReadMe.Show End Sub  161  'New File' Code Option Explicit Dim strpath, strWhereSaved As String Dim strMsgBox As String Private Sub mnuEditMenu_Click() On Error GoTo CheckError: If OptMine Or OptSolidWaste Or OptOther Then If TxtNewDir.Text = "" Then GoTo ProcNoFile: MsgBox "You must enter a directory in which to save Visual Balance data files for this project.", vbOKOnly Elself TxtNewDir.Text = "VisualBalance" Then MsgBox "You are not permitted to use the program drive to save project files.", vbExclamation, vbOKOnly GoTo ProcNoFile: Else strpath = TxtNewDir.Text Dim fso, f As Object Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.CreateFolder("c:\" & strpath) End If Else MsgBox "You must select a project type to proceed.", vbOKOnly End If If OptMine Then Me.Hide FrmEditMenu.mnuGeneralData.Enabled = True FrmEditMenu.mnuMineProduction.Enabled = True FrmEditMenu.mnuSiteHydrology.Enabled = True FrmEditMenu.mnuReservoirlnfo.Enabled = True FrmEditMenu.mnuReservoirLinks.Enabled = True FrmEditMenu.mnuWaterQual.Enabled = True FrmEditMenu.mnuDamSafety.Enabled = True FrmEditMenu.mnuRiskData.Enabled = True FrmEditMenu.mnuGoToOutput.Enabled = True FrmEditMenu. Show Elself OptSolidWaste Then Me.Hide 162  Load FrmSolidWastelnfo FrmSolidWastelnfo.Show Else Me.Hide Load FrmOtherLandfill FrmOtherLandfill.Show End If CheckError: Dim intFileExists As Integer intFileExists = 58 If Err = intFileExists Then Me. Show strMsgBox = "This folder already exists. Please enter a new folder name, or return to the main menu and choose 'Existing Project' from the file menu." Beep MsgBox strMsgBox, vbQuestion Unload FrmMainMenu GoTo ProcNoFile: ElseIfErr = OThen Exit Sub Else MsgBox "Unexpected Error # " & Err & "! " & Err.Description, vbExclamation Exit Sub End If ProcNoFile: MsgBox "You must enter a new directory name for your new project.", vbExclamation End Sub Private Sub Exit_Click() Dim StrMsg As String Beep StrMsg = "Are you sure you want to close Visual Balance?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then End Else End If End Sub Private Sub Form_Load() 163  Unload FrmLogo Load FrmBlank FrmBlank.Show 'Centre Form on Screen' Top = (Screen.Height - Height) / 2 Left = (Screen. Width - Width) / 2 mnuGoToOutput.Enabled = False End Sub Private Sub Label4_Click() LblTipNewFile.Caption = "The new project folder you select must not already exist. Visual Balance " & _ "will use this new project folder to save data files," & _ "and output tables and graphs." LblTipNewFile. Refresh LblTipNewFile.Visible = True End Sub Private Sub ReadMe_Click() Load FrmReadMe FrmReadMe.Show End Sub Private Sub ReturnMainMenu_Click() Unload Me FrmMainMenu.mnuSaveChanges.Enabled = False FrmMainMenu.mnuSaveChangesAs.Enabled = False FrmMainMenu.mnuGeneralData.Enabled = False FrmMainMenu.mnuMineProductionlnfo.Enabled = False FrmMainMenu.mnuSiteHydrology.Enabled = False FrmMainMenu.mnuReservoirlnfo.Enabled = False FrmMainMenu.mnuReservoirLinks.Enabled = False FrmMainMenu.mnuWaterQuality.Enabled = False FrmMainMenu.mnuDamSafetyStandards.Enabled = False FrmMainMenu.mnuRiskAnalysisData.Enabled = False FrmMainMenu.mnuGoToOutput.Enabled = False FrmMainMenu.mnuGoToEditMenu.Enabled = False FrmMainMenu.Refresh FrmMainMenu. Show End Sub  164  'Editing Menu Code Option Explicit Dim strProjectDirectory As String * 25 Dim strpath, StrMsg, strWhereSaved As String Dim strSiteName As String Dim blnChecked As Boolean Private Sub mnuExit_Click() Dim StrMsg As String Beep StrMsg = "Are you sure you want to close Visual Balance?" If MsgBox(StrMsg, vbQuestion & vbYesNo) = vbYes Then End Else End If End Sub Private Sub Form_Load() 'Centre Form on Screen and set up title.' Top = (Screen.Height - Height) / 2 Left = (Screen.Width - Width) / 2 mnuExistingProject.Enabled = False mnuNewProject.Enabled = False  'Create Control Array for the Number of Reservoirs Buttons to Create." 'If Index < intNumReservoirs Then 'Load CmdReservoir(Index) 'CmdReservoir(Index).Move 0, 0 'CmdReservoir(Index).Visible = True 'Index = Index + 1 'End If End Sub Private Sub mnuGeneralData_Click() blnChecked = Not blnChecked mnuGeneralData. Checked = blnChecked Me.Hide Load FrmMineProjectData FrmMineProj ectData. Sho w 165  End Sub Private Sub mnuReadMe_Click() Load FrmReadMe FrmReadMe .Show End Sub Private Sub mnuMineProduction_Click() mnuMineProduction. Checked = True Me.Hide Load FrmMineProduction FrmMineProduction. Show End Sub Private Sub mnuDamSafety_Click() mnuDamSafety.Checked = True Load FrmMineSafetylnfo FrmMineSafetylnfo.Show End Sub Private Sub mnuGoToOutput_Click() Load FrmRunNumber FrmRunNumber.Visible = True FrmRunNumber.SetFocus FrmRunNumber.Refresh End Sub  Private Sub mnuReservoirInfo_Click() 'Load the Reservoir #1 Information Form. Static blnChecked As Boolean blnChecked = Not blnChecked mnuReservoirlnfo.Checked = blnChecked Load FrmMineReservoirlnfo FrmMineReservoirlnfo.Show End Sub Private Sub mnuReservoirLinks_Click() 166  Static blnChecked As Boolean blnChecked = Not blnChecked mnuReservoirLinks.Checked = blnChecked Load FrmMineResLinks FrmMineResLinks.Show End Sub Private Sub mnuReturntoMain_Click() Unload Me Load FrmMainMenu FrmMainMenu. Show End Sub Private Sub mnuRiskData_Click() Me.Hide Static blnChecked As Boolean blnChecked = Not blnChecked mnuRiskData.Checked = blnChecked Load FrmRiskData FrmRiskData.Show End Sub  Private Sub mnuSiteHydrology_Click() Static blnChecked As Boolean blnChecked = Not blnChecked mnuSiteHydrology. Checked = blnChecked Me.Hide Load FrmMineHydro FrmMineHy dro. Show End Sub Private Sub mnuWaterQual_Click() Static blnChecked As Boolean blnChecked = Not blnChecked 167  mnuWaterQual. Checked = blnChecked Load FrmMineWaterlnfo FrmMine Waterlnfo.Show End Sub  168  'General Project Information Form Code Private Sub Form_Load() mnuMain. Enabled = False Top = (Screen.Height - Height) / 2 Left = (Screen.Width - Width) / 2 If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If End Sub Private Sub mnuGoToEditMenu_Click() 'Return to the Mine Data Editing Menu.' StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbYes Unload Me Load FrmEditMenu FrmEditMenu.Show Case Is = vbNo Exit Sub End Select End Sub Public Sub mnuReadData_Click() On Error GoTo CheckError: intFileNumber = FreeFile Open (strpath & "\mine.txt") For Input As #intFileNumber Input #intFileNumber, strSiteName, strSiteDescription, _ intNumReservoirs, sngStarterDamElev TxtSiteName.Text = strSiteName TxtSiteDescription.Text = strSiteDescription 169  TxtNumReservoirs.Text = Val(intNumReservoirs) TxtStartDam.Text = Val(sngStarterDamElev) Close #intFileNumber CheckError: IfErr = 53Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Close #intFileNumber Exit Sub Elself Err = 62 Then MsgBox "There is an error in your Visual Balance data file. Either you have not" & _ "entered required data, or the file does not exist. " & _ "Please enter the required data and save the file again.", vbCritical Close #intFileNumber Exit Sub ElseIfErr = OThen Exit Sub Else MsgBox "Unexpected Error # " & Err & "!", vbExclamation Close #intFileNumber Exit Sub End If End Sub  Private Sub mnuExit_Click() Dim StrMsg As String StrMsg = "Are you sure you want to close Visual Balance?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then End Else End If End Sub  Private Sub mnuOutput_Click() 170  StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbNo GoTo ProcExit Case Is = vbYes Unload Me End Select StrMsg = "Have you edited all the necessary Visual Balance Input and Output information?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then Load FrmRunNumber FrmRunNumber. Visible = True FrmRunNumber. SetFocus FrmRunNumber.Refresh Else FrmEditMenu. Show Exit Sub End If ProcExit: End Sub Private Sub mnuReadMe_Click() Load FrmReadMe FrmReadMe.Show End Sub Private Sub mnuSaveChanges_Click() 'blnGeneralFile = True On Error GoTo CheckError: 'On Error GoTo FileError 'Open file to write data into.' intFileNumber = FreeFile Open (strpath & "\mine.txt") For Output As #intFileNumber 'Write Data into File.' 171  Write #intFileNumber, TxtSiteName.Text, TxtSiteDescription.Text, _ Val(TxtNumReservoirs.Text), Val(TxtStartDam.Text) strWhereSaved = "Your Data Has Been Saved as 'mine.txt' in your project directory " MsgBox (strWhereSaved & strpath) Close #intFileNumber Exit Sub CheclcError: If Err = 53 Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Exit Sub Elself Err = 0 Then Exit Sub Else MsgBox "Unexpected Error # " & Err & "! " & Err.Description, vbExclamation Close #intFileNumber Exit Sub End If End Sub Private Sub TxtSiteName_KeyPress(KeyAscii As Integer) If Key Ascii =13 Then TxtSiteDescription.SetFocus End If End Sub Private Sub TxtSiteDescription_KeyPress(KeyAscii As Integer) If Key Ascii =13 Then TxtNumReservoirs. S etFocus End If End Sub Private Sub TxtNumReservoirs_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtSiteName. SetFocus End If End Sub  172  'Production and Material Information Form Code Option Explicit Dim blnlsNewProject, blnAnnVary As Boolean Dim strProjectDirectory As String * 25 Dim strpath, strWhereSaved, StrMsg As String Dim strAnnVary As String * 5 Dim Dim Dim Dim Dim Dim Dim Dim Dim  intStartMonth, intStartYear, intEndMonth, intEndYear As Integer sngTonnesTail, sngSumCheck, sngTonnesMetal As Single sngTonnesMined As Single sngTonnesRock As Single sngDegSatTail As Single sngFracWater As Single sngBulkDRock, sngVoidRRock, sngFracWRsub, sngFracWRVoidsTail As Single sngDryDTail, sngVoidRTail, sngSpecGravTail As Single sngFracCyclone As Single  Private Sub Cancel_Click() 'Return to the Mine Edit Menu.' Unload Me Load FrmMainMenu FrmMainMenu. Show End Sub Private Sub Exit_Click(Index As Integer) Dim StrMsg As String Beep StrMsg = "Are you sure you want to close Visual Balance?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then End Else End If End Sub Private Sub LblEditSeepFile_Click() On Error GoTo CheckError: If blnlsNewProject = True Then 173  0LE1 .Class = "Excel.Sheet" ' Set class name. O L E 1 .OLETypeAllowed = vbOLELinked ' Specify type of object. OLEl.CreateLink ("c:\VisualBalance\Production.xls")' Create linked object. Else O L E 1 .Class = "Excel.Sheet" ' Set class name. O L E 1 .OLEType Alio wed = vbOLELinked ' Specify type of object. OLEl.CreateLink (strpath & "\Production.xls") ' Specify source file. End If OLEl.DoVerb vbOLEOpen CheckError: If Err = 31031 Then MsgBox "Your project directory does not contain this data file." & vbCrLf & "The generic Visual Balance file will be displayed where you can edit data and save the file to your project directory.", vblnformation OLEl.CreateLink ("c:\VisualBalance\Production.xls") OLEl.DoVerb vbOLEOpen End If End Sub Private Sub mnuGoToEditMenu_Click() 'Return to the Mine Data Editing Menu.' StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbYes Unload Me Load FrmEditMenu FrmEditMenu. Show Case Is = vbNo Exit Sub End Select End Sub Private Sub Form_Load() 'Centre Form on Screen.' Left = (Screen.Width - Width) / 2 Top = (Screen.Height - Height) / 2 If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text  174  Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If End Sub  Private Sub Label20_Click() On Error GoTo CheckError: If blnlsNewProject = True Then OLE1 .Class = "Excel.Sheet" ' Set class name. O L E 1 .OLEType Alio wed = vbOLELinked ' Specify type of object. OLEl.CreateLink ("c:\VisualBalance\OperatingDays.xls") ' Create linked object. Else OLE1 .Class = "Excel.Sheet" ' Set class name. O L E 1. OLEType Alio wed = vbOLELinked ' Specify type of object. OLEl.CreateLink (strpath & "\OperatingDays.xls") ' Specify source file. End If OLEl.DoVerb vbOLEOpen CheckError: If Err = 31031 Then MsgBox "This directory is missing at least one essential Visual Balance data file. The generic Visual Balance file will be displayed where you can edit data and save the file to your project directory.", vblnformation OLEl.CreateLink ("c:\VisualBalance\OperatingDays.xls") O L E 1 .DoVerb vbOLEOpen End If End Sub Private Sub mnuGoToOutput_Click() If OptAnnuallyVarying Then blnAnnVary = True Elself OptProdConstants Then blnAnnVary = False Else MsgBox "You must sleet a an option for the mine production data in order to proceed.", vbExclamation Exit Sub 175  End If If blnAnnVary = False Then If TxtTonnesMined = "" Or TxtTonnesTail = "" Or TxtTonnesRock = "" Or TxtTonnesMetal = "" Then MsgBox "You selected the 'Constant Mine Production Values' option, therefore " & _ "you must enter constants for the tonnes mined, and the tonnes of tailings, waste rock " &_ "concentrate mined. These values can be zero if not applicable, but can not be left blank.", vbOKOnly Exit Sub End If End If StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbNo GoTo ProcExit Case Is = vbYes Unload Me End Select StrMsg = "Have you edited all the necessary Visual Balance Input and Output information?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then Load FrmRunNumber FrmRunNumber. Visible = True FrmRunNumber. SetFocus FrmRunNumber.Refresh Else FrmEditMenu. Show Exit Sub End If ProcExit: End Sub Private Sub ReadData_Click() On Error GoTo CheckError: Dim intFileNumber As Integer  176  intFileNumber = FreeFile Open (strpath & "\production.txt") For Input As #intFileNumber Input #intFileNumber, intStartMonth, intStartYear, _ intEndMonth, intEndYear, sngTonnesMined, _ sngTonnesMetal, sngTonnesRock, sngTonnesTail, _ sngBulkDRock, sngVoidRRock, sngFracWRsub, sngFrac WRVoidsTail, _ sngDegSatTail, sngFrac Water, sngFracCyclone, _ sngDryDTail, sngVoidRTail, sngSpecGravTail, strAnnVary TxtStartMonth.Text = Val(intStartMonth) TxtStartYear.Text = Val(intStartYear) TxtEndMonth.Text = Val(intEndMonth) TxtEndYear.Text = Val(intEndYear) TxtTonnesMined.Text = Val(sngTonnesMined) TxtTonnesMetal.Text = Val(sngTonnesMetal) TxtTonnesRock.Text = Val(sngTonnesRock) TxtTonnesTail.Text = Val(sngTonnesTail) TxtBulkDRock.Text = sngBulkDRock TxtVoidRRock.Text = Val(sngVoidRRock) TxtFracWRSub = Val(sngFrac WRsub) TxtFrac WRVoidsTail = Val(sngFrac WRVoidsTail) TxtDegSatTail.Text = Val(sngDegSatTail) TxtFrac Water.Text = Val(sngFrac Water) TxtFracCyclone = Val(sngFracCyclone) TxtDryDTail.Text = sngDryDTail TxtVoidRTail.Text = Val(sngVoidRTail) TxtSpecGravTail.Text = Val(sngSpecGravTail) If strAnnVary = "True " Then OptAnnually Varying = True Elself strAnnVary = "False" Then OptProdConstants = True End If Close #intFileNumber CheckError: IfErr=53Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Close #intFileNumber Exit Sub 177  Elself Err = 62 Then MsgBox "There is an error in your Visual Balance data file. Either you have not" & _ "entered required data, or the file does not exist. " & _ "Please enter the required data and save the file again.", vbCritical Close #intFileNumber Exit Sub Else Close #intFileNumber Exit Sub End If End Sub Private Sub ReadMe_Click() Load FrmReadMe FrmReadMe. Show End Sub Private Sub ReturntoEdit_Click(Index As Integer) sngSumCheck = sngTonnesTail + sngTonnesMetal + sngTonnesRock TxtSumCheck = Val(sngSumCheck) If sngSumCheck o sngTonnesMined Then MsgBox "The annual tonnage of metal, tailings and waste rock should equal the total tonnes mined. There may be an error in your input data!", vbOKOnly End If 'Return to the Mine Edit Menu.' StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbYes Unload Me Load FrmEditMenu FrmEditMenu. Sho w Case Is = vbNo Exit Sub End Select End Sub Private Sub SaveChanges_Click(Index As Integer) If OptAnnuallyVarying = True Then strAnnVary = "True" Elself OptProdConstants = True Then strAnnVary = "False" 178  Else MsgBox "You must select an option for mine production data. Please select an option to continue.", vbExclamation Exit Sub End If sngSumCheck = sngTonnesTail + sngTonnesMetal + sngTonnesRock TxtSumCheck = Val(sngSumCheck) If sngSumCheck o sngTonnesMined Then MsgBox "The annual tonnage of metal, tailings and waste rock should equal the total tonnes mined. This is an error! Can not save file!", vbOKOnly Else Dim intFileNumber As Integer On Error GoTo CheckError: 'Open file to write data into.' intFileNumber = FreeFile Open strpath & "\production.txt" For Output As #intFileNumber 'Write Data into File.' Write #intFileNumber, Val(TxtStartMonth), _ Val(TxtStartYear), Val(TxtEndMonth), _ Val(TxtEndYear), Val(TxtTonnesMined), _ Val(TxtTonnesMetal), Val(TxtTonnesRock), _ Val(TxtTonnesTail), _ Val(TxtBulkDRock), Val(TxtVoidRRock), _ Val(TxtFracWRSub), Val(TxtFracWRVoidsTail), Val(TxtDegSatTail), Val(TxtFracWater), _ Val(TxtFracCyclone), Val(TxtDryDTail), _ Val(TxtVoidRTail), Val(TxtSpecGravTail), strAnnVary strWhereSaved = "Your Data Has Been Saved as 'production.txt' in your project directory " MsgBox (strWhereSaved & strpath) Close #intFileNumber Exit Sub CheckError: MsgBox "File error!" End If End Sub  179  Private Sub TxtEndMonth_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtStartYear. SetFocus End If End Sub Private Sub TxtEndYear_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtTonnesMined.SetFocus End If End Sub Private Sub TxtStartMonth_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtEndMonth. SetFocus End If End Sub Private Sub TxtStartYear_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtEndYear.SetFocus End If End Sub Private Sub TxtTonnesMined_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtTonnesMetal. SetFocus End If End Sub Private Sub TxtTonnesMetal_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtTonnesRock.SetFocus End If End Sub Private Sub TxtTonnesRock_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtTonnesTail. SetFocus End If End Sub Private Sub TxtTonnesTail_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtBulkDRock. SetFocus End If End Sub Private Sub TxtBulkDRock_KeyPress(KeyAscii As Integer) 180  If Key Ascii = 13 Then TxtVoidRRock.SefFocus End If End Sub Private Sub TxtVoidRRock_KeyPress(KeyAscii As Integer) If Key Ascii =13 Then TxtFrac WRSub.SetFocus End If End Sub Private Sub TxtFracWRsub_KeyPress(KeyAscii As Integer) If Key Ascii = 13 Then TxtDegSatTail.SetFocus End If End Sub Private Sub TxtDegSatTail_KeyPress(KeyAscii As Integer) If Key Ascii = 13 Then TxtFrac Water. SetFocus End If End Sub Private Sub TxtFracWater_KeyPress(KeyAscii As Integer) If Key Ascii = 13 Then TxtFracCy clone. S etFocus End If End Sub Private Sub TxtFracCyclone_KeyPress(KeyAscii As Integer) If Key Ascii =13 Then TxtDryDTail. SetFocus End If End Sub Private Sub TxtDryDTail_KeyPress(KeyAscii As Integer) If Key Ascii =13 Then TxtVoidRTail.SetFocus End If End Sub Private Sub TxtVoidRTail_KeyPress(KeyAscii As Integer) If Key Ascii =13 Then TxtSpecGravTail.SetFocus End If End Sub Private Sub TxtSpecGravTail_KeyPress(KeyAscii As Integer) If Key Ascii = 13 Then TxtStartMonth. SetFocus End If 181  End Sub  Private Sub TxtTonnesMetal_Change() sngTonnesMetal = Val(TxtTonnesMetal) sngSumCheck = sngTonnesTail + sngTonnesMetal + sngTonnesRock TxtSumCheck = Val(sngSumCheck) End Sub Private Sub TxtTonnesMined_Change() sngTonnesMined = Val(TxtTonnesMined) LblTotal.Caption = "Total = " & sngTonnesMined End Sub Private Sub TxtTonnesRock_Change() sngTonnesRock = Val(TxtTonnesRock) sngSumCheck = sngTonnesTail + sngTonnesMetal + sngTonnesRock TxtSumCheck = Val(sngSumCheck) End Sub Private Sub TxtTonnesTail_Change() sngTonnesTail = Val(TxtTonnesTail) sngSumCheck = sngTonnesTail + sngTonnesMetal + sngTonnesRock TxtSumCheck = Val(sngSumCheck) End Sub  182  'Site Hydrologic Data Form Code Option Explicit Dim intFileNumber, intEDFResponse, intStartPackMonth, intEndPackMonth, _ intTotalPackMonths, strpath As Integer Public strWhereSaved, StrMsg As String Public blnHydrofile, blnlsNewProject As Boolean Dim strProjectDirectory As String * 25 Dim objHydroFile As Object Dim sngEDFWinter, sngEDFSpring, sngEDFSummer, sngEDFFall As Single Private Sub mnuEditHydro_Click() On Error GoTo CheckError If blnlsNewProject = True Then OLE1 .Class = "Excel.Sheet" ' Set class name. OLE1 .OLEType Alio wed = vbOLELinked ' Specify type of object. OLEl.CreateLink ("c:\VisualBalance\hydrodata.xls") ' Create linked object. Else OLE1 .Class = "Excel.Sheet" ' Set class name. OLE1 .OLEType Alio wed = vbOLELinked ' Specify type of object. OLEl.CreateLink (strpath & "\hydrodata.xls") ' Specify source file. End If OLEl.DoVerb vbOLEOpen CheckError: If Err = 31031 Then MsgBox "Your project directory does not contain this data file." & vbCrLf & "The generic Visual Balance file will be displayed where you can edit data and save the file to your project directory.", vblnformation OLE1 .CreateLink ("c:\VisualBalance\hydrodata.xls") OLEl.DoVerb vbOLEOpen End If End Sub 183  Private Sub Exit_Click(Index As Integer) Dim StrMsg As String Beep StrMsg = "Are you sure you want to close Visual Balance?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then End Else End If End Sub Private Sub Form_Load() 'Centre Form on Screen.' Top = (Screen.Height - Height) / 2 Left = (Screen. Width - Width) / 2 mnuReturnToMain.Enabled = False Dim blnlsNewProject As Boolean If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If Label6.Caption = "Note: The EDF is the flood volume which " & _ "the impoundment should contain without spilling. In some " & _ "cases, this volume may be the same as the Inflow Design Flood " & _ "(IDF). The IDF is the flood which the dams (including diversions " & "and spillways) should be able to safely pass. This volume is " & _ "exclusive of freeboard requirements accounting for wave action." End Sub Private Sub mnuGoToOutput_Click() StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbNo GoTo ProcExit Case Is = vbYes Unload Me 184  End Select StrMsg = "Have you edited all the necessary Visual Balance Input and Output information?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then Load FrmRunNumber FrmRunNumber. Visible = True FrmRunNumber. SetFocus FrmRunNumber.Refresh Else FrmEditMenu. Show Exit Sub End If ProcExit: End Sub Private Sub mnuReadMe_Click() Load FrmReadMe FrmReadMe. Sho w End Sub Private Sub ReadData_Click() On Error GoTo CheckError intFileNumber = FreeFile Open (strpath & "\extremes.txt") For Input As #intFileNumber Input #intFileNumber, intEDFResponse, sngEDFWinter, sngEDFSpring, _ sngEDFSummer, sngEDFFall, intStartPackMonth, intEndPackMonth, _ intTotalPackMonths TxtEDFWinter = Val(sngEDFWinter) TxtEDFSpring = Val(sngEDF Spring) TxtEDFSummer = Val(sngEDFSummer) TxtEDFFall = Val(sngEDFFall) TxtStartPackMonth = Val(intStartPackMonth) TxtEndPackMonth = Val(intEndPackMonth) TxtTotalPackMonths = Val(intTotalPackMonths) If intEDFResponse = 1 Then 185  OptPMF = True Elself intEDFResponse = 2 Then OptTenThou = True Elself intEDFResponse = 3 Then OptOneThou = True Elself intEDFResponse = 4 Then OptTwoHun = True Elself intEDFResponse = 5 Then OptOneHun = True End If Close #intFileNumber CheckError: IfErr = 53Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Close #intFileNumber Exit Sub Elself Err = 62 Then MsgBox "There is an error in one of your data files. Either you have not" & _ "entered required data, or the file does not exist. " & _ "Please return to the data edit menu and edit your project data input files.", vbCritical Close #intFileNumber Load FrmEditMenu FrmEditMenu. Show Exit Sub Else Close #intFileNumber Exit Sub End If End Sub Private Sub mnuGoToEditMenu_Click() 'Return to the Mine Data Editing Menu.' StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbYes Unload Me Load FrmEditMenu FrmEditMenu. Show Case Is = vbNo 186  Exit Sub End Select End Sub Private Sub SaveChanges_Click() On Error GoTo CheckError blnHydrofile = True Dim intFileNumber As Integer 'On Error GoTo FileError If OptPMF = True Then intEDFResponse = 1 Elself OptTenThou = True Then intEDFResponse = 2 Elself OptOneThou = True Then intEDFResponse = 3 Elself OptTwoHun = True Then intEDFResponse = 4 Elself OptOneHun = True Then intEDFResponse = 5 End If 'Open file to write data into.' intFileNumber = FreeFile Open (strpath & "\extremes.txt") For Output As #intFileNumber 'Write Data into File.' Write #intFileNumber, intEDFResponse, Val(TxtEDFWinter.Text), _ Val(TxtEDFSpring.Text), Val(TxtEDFSummer.Text), _ Val(TxtEDFFall.Text), Val(TxtStartPackMonth), _ Val(TxtEndPackMonth), Val(TxtTotalPackMonths) strWhereSaved = "Your Data Has Been Saved as 'extremes.txt' in your project directory MsgBox (strWhereSaved & strpath) Close #intFileNumber Exit Sub CheckError: IfErr = 53Then 187  MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Exit Sub End If End Sub  188  'Reservoir Information Form Code Option Explicit Dim intDamRows As Integer Dim blnlsNewProject, blnDamDependFile As Boolean Dim strProjectDirectory As String * 25 Dim strDependResponse As String * 5 Dim strpath, strWhereSaved, StrMsg As String Public strResName, strResAbbr, strvolumefile, _ strSeepOutFile As String Public sngStartWatElev, sngStartTailElev, sngCatchArea, _ sngStartSurfArea, sngStartWatVol, sngStartSolVol, _ sngSeepOutRate, sngSeepReturnRate, sngFracRockln, _ sngSlurryWatlnRate, sngMineWatlnRate, _ sngSeepInRate, sngMaxWatElev, sngSpillRate, _ sngMinWatElev, sngFracRunDivert, sngDamLossConstant, sngBeachAreaConstant As Single Public sngNeededForReclaim, sngReclaimRate As Single Private Sub Cancel_Click() 'Return to the Mine Edit Menu.' Load FrmEditMenu FrmEditMenu. Show End Sub  Private Sub Exit_Click(Index As Integer) Dim StrMsg As String StrMsg = "Are you sure you want to close Visual Balance?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then End Else End If End Sub Private Sub FormJLoadQ  189  mnuReturnToMain.Enabled = False Left = (Screen. Width - Width) / 2 mnuSaveChangesAs.Enabled = False If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If End Sub Private Sub mnuOutput_Click() StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbNo GoTo ProcExit Case Is = vbYes Unload Me End Select StrMsg = "Have you edited all the necessary Visual Balance Input and Output information?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then Load FrmRunNumber FrmRunNumber.Visible = True FrmRunNumber.SetFocus FrmRunNumber.Refresh Else FrmEditMenu. Show Exit Sub End If ProcExit: End Sub  Private Sub LblSpillPerMonthFile_Click() On Error GoTo CheckError:  190  If blnlsNewProject = True Then OLE1.Class = "Excel.Sheet" ' Set class name. OLE1 .OLEType Alio wed = vbOLELinked ' Specify type of object. OLEl.CreateLink ("c:\VisualBalance\SpillVolumes.xls")' Create linked object. Else OLE1 .Class = "Excel.Sheet" ' Set class name. OLE1 .OLETypeAllowed = vbOLELinked ' Specify type of object. OLE1 .CreateLink (strpath & "\SpillVolumes.xls") ' Specify source file. End If OLEl.DoVerb vbOLEOpen CheckError: If Err = 31031 Then MsgBox "This directory does not contain this data file. The generic Visual Balance file will be displayed where you can edit data and save the file to your project directory.", vblnformation OLE1 .CreateLink ("c:\VisualBalance\SpillVolumes.xls") OLEl.DoVerb vbOLEOpen End If  End Sub Private Sub mnuGoToOutput_Click() If OptDamDepend Then blnDamDependFile. = True Elself OptConstants Then blnDamDependFile = False Else MsgBox "You must sleet a an option for Dam Dependant Variables (seepage, volume retained in dam, and beach area). These variables can be fixed or dependant on dam crest elevation. Please select an option to continue.", vbExclamation Exit Sub End If If blnDamDependFile = False Then If TxtSeepOutRate = "" Or TxtDamLoss = "" Or TxtBeachArea = "" Then MsgBox "You selected the constant 'Dam Dependant Values' option, therefore " & _ "you must enter constants for the seepage loss, volume " & _ "loss to the dams, and the tailings beach area. These values can be zero i f not applicable, but can not be left blank.", vbOKOnly 191  Exit Sub End If End If MsgBox "Did you remember to save your changes?", vbYesNo If vbYes Then Unload Me Load FrmRunNumber FrmRunNumber. Visible = True FrmRunNumber. SetFocus FrmRunNumber.Refresh Elself vbNo Then Exit Sub End If End Sub Private Sub mnuReadMe_Click() Load FrmReadMe FrmReadMe.Show End Sub Private Sub mnuGoToEditMenu_Click() StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbYes Unload Me Load FrmEditMenu FrmEditMenu. Show Case Is = vbNo Exit Sub End Select End Sub Private Sub LblEditCADFile_Click() On Error GoTo CheckError: If blnlsNewProject = True Then OLE1 .Class = "Excel.Sheet" ' Set class name. O L E 1 .OLEType Alio wed = vbOLELinked ' Specify type of object. OLEl.CreateLink ("c:\VisualBalance\Volume.xls")' Create linked object. Else 192  0LE1 .Class = "Excel.Sheet" ' Set class name. OLE1 .OLEType Alio wed = vbOLELinked ' Specify type of object. OLEl.CreateLink (strpath & "Wolume.xls") ' Specify source file. End If  O L E 1.Do Verb vbOLEOpen CheckError: If Err = 31031 Then MsgBox "This directory does not contain this data file. The generic Visual Balance file will be displayed where you can edit data and save the file to your project directory.", vblnformation OLEl.CreateLink ("c:\VisualBalance\Volume.xls") OLE1 .DoVerb vbOLEOpen End If End Sub Private Sub LblEditSeepFile_Click() On Error GoTo CheckError: If blnlsNewProject = True Then OLE1 .Class = "Excel.Sheet" ' Set class name. O L E 1 .OLEType Alio wed = vbOLELinked ' Specify type of object. OLEl.CreateLink ("c:\VisualBalance\DamInfo.xls")' Create linked object. Else OLE1 .Class = "Excel.Sheet" ' Set class name. OLE1 .OLETypeAllowed = vbOLELinked ' Specify type of object. OLEl.CreateLink (strpath & "\DamInfo.xls") ' Specify source file. End If O L E 1 .DoVerb vbOLEOpen CheckError: If Err = 31031 Then MsgBox "Your project directory does not contain this data file." & vbCrLf & "The generic Visual Balance file will be displayed where you can edit data and save the file to your project directory.", vblnformation OLE1 .CreateLink ("c:\VisualBalance\DamInfo.xls") O L E 1.DoVerb vbOLEOpen End If End Sub 193  Private Sub ReadData_Click() Dim strResName As String * 20 Dim intVESRows As Integer Dim intFileNumber As Integer On Error GoTo CheckError: intFileNumber = FreeFile Open (strpath & "\reservoir.txt") For Input As #intFileNumber Input #intFileNumber, strResName, strResAbbr, _ sngCatchArea, sngStartWatElev, sngStartTailElev, _ sngStartSurfArea, sngStartWatVol, sngStartSolVol, _ sngSeepReturnRate, _ sngFracRockln, sngNeededForReclaim, sngReclaimRate, _ sngSlurryWatlnRate, sngMineWatlnRate, sngSeepInRate, _ sngMaxWatElev, sngMinWatElev, _ sngFracRunDivert, intDamRows, sngSeepOutRate, sngBeachAreaConstant, sngDamLossConstant, intVESRows, strDependResponse TxtResName.Text = strResName TxtResAbbr.Text = strResAbbr TxtCatchArea.Text = Val(sngCatchArea) TxtStartWatElev.Text = Val(sngStartWatElev) TxtStartTailElev = sngStartTailElev TxtStartSurfArea.Text = Val(sngStartSurfArea) TxtStartWatVol = Val(sngStartWatVol) TxtStartSolVol = Val(sngStartSolVol) TxtSeepReturnRate = Val(sngSeepReturnRate) TxtFracRockln = Val(sngFracRockln) TxtNeededForReclaim.Text = Val(sngNeededForReclaim) TxtReclaimRate.Text = Val(sngReclaimRate) TxtSlurryWatlnRate = Val(sngSlurryWatlnRate) TxtMineWatlnRate = Val(sngMineWatlnRate) TxtSeepInRate = Val(sngSeepInRate) TxtMaxWatElev = Val(sngMaxWatElev) TxtMinWatElev = Val(sngMinWatElev) TxtFracRunDivert = Val(sngFracRunDivert) TxtDamRows = Val(intDamRows) TxtSeepOutRate = Val(sngSeepOutRate) TxtBeachArea = Val(sngBeachAreaConstant) TxtDamLoss = Val(sngDamLossConstant) TxtVESrows = Val(intVESRows)  194  If strDependResponse = "True " Then OptDamDepend = True Elself strDependResponse = "False" Then OptConstants = True EndTf Close #intFileNumber CheckError: If Err = 53 Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Close #intFileNumber Exit Sub Elself Err = 62 Then MsgBox "There is an error in your Visual Balance data file. Either you have not" & _ "entered required data, or the file does not exist. " & _ "Please enter the required data and save the file again.", vbCritical Close #intFileNumber Exit Sub Elself Err = 0 Then Exit Sub Else MsgBox "Unexpected Error # " & Err & "! " & Err.Description, vbExclamation Close #intFileNumber Exit Sub End If End Sub Private Sub SaveChanges_Click(Index As Integer) If OptDamDepend Then strDependResponse = "True" Elself OptConstants Then strDependResponse = "False" Else MsgBox "You must sleet an option for the 'Dam Dependant Variables' (seepage, volume retained in dam, and beach area). These variables can be fixed or dependant on dam crest elevation. Please select an option to continue.", vbExclamation Exit Sub End If 195  Dim intFileNumber As Integer On Error GoTo CheckError 'Open file to write data into.' intFileNumber = FreeFile Open (strpath & "\reservoir.txt") For Output As #intFileNumber 'Write Data into File.' Write #intFileNumber, TxtResName, TxtResAbbr, _ Val(TxtCatcbArea.Text), Val(TxtStartWatElev.Text), _ Val(TxtStartTailElev), Val(TxtStartSurfArea), _ Val(TxtStartWatVol), Val(TxtStartSolVol), _ Val(TxtSeepReturnRate), _ Val(TxtFracRockln), Val(TxtNeededForReclaim), _ Val(TxtReclaimRate), _ Val(TxtSlurry WatlnRate), _ Val(TxtMineWatlnRate), Val(TxtSeepInRate), _ Val(TxtMaxWatElev), _ Val(TxtMinWatElev.Text), Val(TxtFracRunDivert.Text), _ Val(TxtDamRows), Val(TxtSeepOutRate), Val(TxtBeachArea), _ Val(TxtDamLoss), Val(TxtVESrows), strDependResponse strWhereSaved = "Your Data Has Been Saved as 'reservoir.txt' in your project directory MsgBox (strWhereSaved & strpath) Close #intFileNumber Exit Sub CheckError: IfErr = 53 Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Exit Sub Elself Err = 0 Then Exit Sub Else MsgBox "Unexpected Error # " & Err & "! " & Err.Description, vbExclamation Close #intFileNumber Exit Sub End If End Sub 196  Private Sub TxtResName_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtResAbbr. SetFocus End If End Sub Private Sub TxtResAbbr_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtCatchArea. SetFocus End If End Sub Private Sub TxtResCatchArea_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtStartWatElev.SetFocus End If End Sub Private Sub TxtStartWatElev_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtStartTailElev.SetFocus End If End Sub Private Sub TxtStartTailElev_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtStartSurfArea.SetFocus End If End Sub Private Sub TxtStartSurfArea_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtStartWatVol.SetFocus End If End Sub Private Sub TxtStartWatVol_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtStartSolVol.SetFocus End If End Sub Private Sub TxtStartSolVol_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtFracRockln. SetFocus End If End Sub Private Sub TxtFracRockIn_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then 197  TxtSeepReturnRate.SetFocus End If End Sub Private Sub TxtSeepReturnRate_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtReclaimRate. SetFocus End If End Sub Private Sub TxtReclaimRate_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxfNeededForReclaim. SetFocus End If End Sub Private Sub TxtNeededForReclaim_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtSlurryWatlnRate.SetFocus End If End Sub Private Sub TxtSlurryWatInRate_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtMineWatlnRate.SetFocus End If End Sub Private Sub TxtMineWatInRate_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtSeepInRate. SetFocus End If End Sub Private Sub TxtSeepInRate_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtMaxWatElev.SetFocus End If End Sub Private Sub TxtMaxWatElev_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtMinWatElev.SetFocus End If End Sub Private Sub TxtMinWatElev_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtFracRunDivert.SefFocus End If End Sub 198  Private Sub TxtFracRunDivert_KeyPress(KeyAscii As Integer) If Key Ascii = 13 Then TxtSeepOutRate. SetFocus End If End Sub Private Sub TxtSeepOutRate_KeyPress(KeyAscii As Integer) If Key Ascii =13 Then TxtVESrows.SetFocus End If End Sub Private Sub TxtVESRows_KeyPress(KeyAscii As Integer) If Key Ascii =13 Then TxfResName. SetFocus End If End Sub  199  'Water Quality Information Form Code Private Sub Form_Load() 'Centre Form on Screen.' Top = (Screen.Height - Height) / 2 Left = (Screen. Width - Width) / 2 mnuReturnToMain.Enabled = False Dim blnlsNewProject As Boolean If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If End Sub Private Sub mnuGoToEditMenu_Click() StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbYes Unload Me Load FrmEditMenu FrmEditMenu. Show Case Is = vbNo Exit Sub End Select End Sub Private Sub mnuGoToOutput_Click() StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbNo GoTo ProcExit Case Is = vbYes Unload Me End Select StrMsg = "Have you edited all the necessary Visual Balance Input and Output 200  information?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then Load FrmRunNumber FrmRunNumber. Visible = True FrmRunNumber. SetFocus FrmRunNumber.Refresh Else FrmEditMenu. Show Exit Sub End If ProcExit: End Sub Private Sub mnuReadMe_Click() Load FrmReadMe FrmReadMe. Show End Sub Private Sub mnuReturntoMain_Click() Unload Me Unload FrmExistingFile Unload FrmNewFile Load FrmMainMenu FrmMainMenu. Show End Sub Private Sub ReadData_Click(Index As Integer) Dim intFileNumber As Integer On Error GoTo CheckError: intFileNumber = FreeFile Open (strpath & "\water.txt") For Input As #intFileNumber Input #intFileNumber, intNumParameters, strChemNamel, strAbbrl, sngConcl, sngDecayl, strChemName2, strAbbr2, sngConc2, sngDecay2 TxtNumParameters.Text = Val(intNumParameters) TxtChemNamel.Text = strChemNamel TxtAbbrl .Text = strAbbrl TxtConc 1 .Text = Val(sngConc 1) TxtDecayl .Text = Val(sngDecayl) TxtChemName2.Text = strChemName2 TxtAbbr2.Text = strAbbr2 TxtConc2 = Val(sngConc2) 201  TxtDecay2 = Val(sngDecay2) Close #intFileNumber CheckError: IfErr = 53 Then MsgBox "This directory does not contain this data file. " & vbCrLf & _ "Please input appropriate data and save the file to your project directory.", vblnformation Close #intFileNumber Exit Sub Elself Err = 62 Then MsgBox "There is an error in your Visual Balance data file. Either you have not" & _ "entered required data, or the file does not exist. " & _ "Please enter the required data and save the file again.", vbCritical Close #intFileNumber Exit Sub ElseIfErr = OThen Exit Sub Else MsgBox "Unexpected Error # " & Err & "!" & Err.Description, vbExclamation Close #intFileNumber Exit Sub End If End Sub Private Sub ReturntoEdit_Click(Index As Integer) 'Return to the Mine Edit Menu.' StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbYes Unload Me Load FrmEditMenu FrmEditMenu. Show Case Is = vbNo Exit Sub End Select End Sub Private Sub SaveChanges_Click() Dim intFileNumber As Integer 202  On Error GoTo CheckError: 'Open file to write data into:' intFileNumber = FreeFile Open (strpath & "\water.txt") For Output As #intFileNumber 'Write Data into File.' Write #intFileNumber, Val(TxtNumParameters.Text), TxtChemNamel.Text, TxtAbbrl.Text, Val(TxtConcl.Text), Val(TxtDecayl.Text), TxtChemName2.Text, TxtAbbr2.Text, Val(TxtConc2.Text), Val(TxtDecay2.Text) strWhereSaved = "Your Data Has Been Saved as 'water.txt' in your project directory " MsgBox (strWhereSaved & strpath) Close #intFileNumber Exit Sub Close #intFileNumber CheckError: IfErr = 53Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Exit Sub End If End Sub  Private Sub TxtNumParameters_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtChemNamel .SetFocus End If End Sub Private Sub TxtChemNamel_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtAbbrl .SetFocus End If End Sub Private Sub TxtAbbrl_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtConcl .SetFocus End If End Sub Private Sub TxtConcl_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then 203  TxtDecay 1 .SetFocus End If End Sub Private Sub TxtDecayl_KeyPress(KeyAscii As Integer) If Key Ascii =13 Then TxtChemName2. S etFocus End If End Sub Private Sub TxtChemName2_KeyPress(KeyAscii As Integ If Key Ascii =13 Then TxtAbbr2. SetFocus End If End Sub Private Sub TxtAbbr2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtConc2. SetFocus End If End Sub Private Sub TxtConc2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then TxtDecay2 .SetFocus End If End Sub Private Sub TxtDecay2_KeyPress(KeyAscii As Integer) If KeyAscii =13 Then TxtNumParameters. S etFocus End If End Sub  204  'Dam Design and Safety Information Form Code Option Explicit Dim strProjectDirectory As String * 25 Dim strpath, strWhereSaved, StrMsg As String Dim sngMaxLift, sngSpillWaylnvert, intNumClosYears, _ sngFinallnvertElev As Single Dim sngFreeBoardl, sngFreeBoard2 As Single Dim intFreeBoardlYearl, intFreeBoardlYear2, intFreeBoard2Yearl, intFreeBoard2Year2 As Integer Dim intFileNumber As Integer  Private Sub Cancel_Click() 'Return to the Mine Edit Menu.' Load FrmEditMenu FrmEditMenu. Show End Sub  Private Sub Exit_Click(Index As Integer) Dim StrMsg As String Beep StrMsg = "Are you sure you want to close Visual Balance?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then End Else End If End Sub Private Sub Form_Load() 'Centre Form on Screen.' Top = (Screen.Height - Height) / 2 Left = (Screen.Width - Width) / 2 mnuReturnToMain.Enabled = False Dim blnlsNewProject As Boolean If FrmMainMenu.txtClickExisting.Text = "No" Then 205  blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If End Sub  Private Sub mnuGoToEditMenu_Click() StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo). Case Is = vbYes Unload Me Load FrmEditMenu FrmEditMenu. Show Case Is = vbNo Exit Sub End Select End Sub Private Sub mnuGoToOutput_Click() StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbNo GoTo ProcExit Case Is = vbYes Unload Me End Select StrMsg = "Have you edited all the necessary Visual Balance Input and Output information?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then Load FrmRunNumber FrmRunNumber.Visible = True FrmRunNumber. SetFocus FrmRunNumber.Refresh Else FrmEditMenu. Show Exit Sub End If 206  ProcExit: End Sub Private Sub mnuReadMe_Click() Load FrmReadMe FrmReadMe. Show End Sub Private Sub Label 1 l_Click() FreeboardTip.Visible = True End Sub Private Sub ReadData_Click(Index As Integer) On Error GoTo CheckError: intFileNumber = FreeFile Open (strpath & "\safety.txt") For Input As #intFileNumber Input #intFileNumber, sngFreeBoardl, intFreeBoardlYearl, _ intFreeBoardl Year2, sngFreeBoard2, _ intFreeBoard2 Yearl, intFreeBoard2Year2, _ sngMaxLift, sngSpillWaylnvert, sngFinallnvertElev TxtFreeBoardl.Text = Val(sngFreeBoardl) TxtFreeBoardlYearl.Text = Val(intFreeBoardl Yearl) TxtFreeBoardlYear2.Text = Val(intFreeBoardl Year2) TxtFreeBoard2.Text = Val(sngFreeBoard2) TxtFreeBoard2 Yearl. Text = Val(intFreeBoard2Yearl) TxtFreeBoard2Year2.Text = Val(intFreeBoard2Year2) TxtMaxLift.Text = Val(sngMaxLift) TxtSpilllnvert.Text = Val(sngSpillWaylnvert) TxtFinallnvert.Text = Val(sngFinallnvertElev) Close #infFileNumber CheckError: IfErr = 53Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Close #intFileNumber Exit Sub 207  Elself Err = 62 Then MsgBox "There is an error in your Visual Balance data file. Either you have not" & "entered required data, or the file does not exist. " & _ "Please enter the required data and save the file again.", vbCritical Close #intFileNumber Exit Sub ElseIfErr = OThen Exit Sub Else MsgBox "Unexpected Error # " & Err & "!", vbExclamation Close #intFileNumber Exit Sub Exit Sub End If End Sub Private Sub ReturntoEdit_Click(Index As Integer) 'Return to the Mine Edit Menu.' FreeboardTip.Visible = False StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbYes Unload Me Load FrmEditMenu FrmEditMenu. Show Case Is = vbNo Exit Sub End Select End Sub Private Sub SaveChanges_Click(Index As Integer) 'blnSafetyFile = True Dim infFileNumber As Integer 'On Error GoTo CheckError 'Open file to write data into.' intFileNumber = FreeFile Open (strpath & "\safety.txt") For Output As #intFileNumber 'Write Data into File.' 208  Write #intFileNumber, Val(TxtFreeBoardl.Text), Val(TxtFreeBoardlYearl.Text), _ Val(TxtFreeBoardlYear2.Text), Val(TxtFreeBoard2.Text), _ Val(TxfFreeBoard2 Yearl.Text), Val(TxtFreeBoard2Year2.Text), _ Val(TxtMaxLift.Text), Val(TxtSpilllnvert.Text), Val(TxtFinallnvert.Text) strWhereSaved = "Your Data Has Been Saved as 'safety.txt' in your project directory " MsgBox (strWhereSaved & strpath) Close #intFileNumber Exit Sub CheckError: If Err = 53 Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Exit Sub ElseIfErr = OThen Exit Sub Else: MsgBox "Unexpected Error N o . " & Err & " " & Err.Description Exit Sub End If End Sub  209  'Risk Analysis Data Form Code Option Explicit Dim blnRiskFile As Boolean Dim strpath, strWhereSaved, StrMsg As String Dim sngMeanAnnual, sngStandardDev, _ sngNumYearsRecord, intNumClosYears, _ sngRiskFreeboard As Single Dim intNumSeries, intNoFile, intNumClosSeries As Integer Private Sub Form_Load() Top = (Screen.Height - Height) / 2 Left = (Screen.Width - Width) / 2 mnuReturnToMain.Enabled = False Dim blnlsNewProject As Boolean If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If End Sub Private Sub mnuExit_Click() Dim StrMsg As String Beep StrMsg = "Are you sure you want to close Visual Balance?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then End Else End If End Sub Private Sub mnuGoToEditMenu_Click() StrMsg = "Did you remember to save your changes?" 210  Select Case MsgBox(StrJVIsg, vbYesNo) Case Is = vbYes Unload Me Load FrmEditMenu FrmEditMenu. Show Case Is = vbNo Exit Sub End Select End Sub Private Sub mnuGoToOutput_Click() StrMsg = "Did you remember to save your changes?" Select Case MsgBox(StrMsg, vbYesNo) Case Is = vbNo GoTo ProcExit Case Is = vbYes Unload Me End Select StrMsg = "Have you edited all the necessary Visual Balance Input and Output information?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then Load FrmRunNumber FrmRunNumber.Visible = True FrmRunNumber.SetFocus FrmRunNumber.Refresh Else FrmEditMenu. Show Exit Sub End If ProcExit: End Sub Private Sub mnuReadData_Click() Dim intFileNumber As Integer On Error GoTo CheckError intFileNumber = FreeFile Open (strpath & "\RiskData.txt") For Input As #intFileNumber Input #intFileNumber, sngMeanAnnual, _ 211  sngStandardDev, intNumSeries, _ sngNumYearsRecord, sngRiskFreeboard, intNumClosSeries, _ intNumClosYears TxtMeanAnn = Val(sngMeanArrnual) TxtStandardDev = Val(sngStandardDev) TxtNumSeries = Val(intNumSeries) TxtNumYearsRecord = Val(sngNumYearsRecord) TxtRiskFreeboard = Val(sngRiskFreeboard) TxtNumClosSeries = Val(intNumClosSeries) TxtNumClosYears = Val(intNumClosYears) Close #intFileNumber CheckError: If Err = 53 Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Close #intFileNumber Exit Sub ElseIfErr = OThen Exit Sub Elself Err = 62 Then MsgBox "There is an error in your Visual Balance data file. Either you have not" & _ "entered required data, or the file does not exist. " & _ "Please enter the required data and save the file again.", vbCritical Close #intFileNumber Exit Sub Else MsgBox "Unexpected Error # " & Err & "! " & Err.Description, vbExclamation Close #intFileNumber Exit Sub End If End Sub Private Sub mnuReadMe_Click() Load FrmReadMe FrmReadMe. Show End Sub  212  Private Sub mnuSaveChanges_Click() blnRiskFile = True Dim intFileNumber As Integer On Error GoTo CheckError If Val(TxtNumSeries.Text) > 1000 Then Beep MsgBox "Sorry, the number of series run in the risk analysis simulation can not exceed 1,000." & _ "Please enter a smaller value to continue. Your changes have not been saved.", vbExclamation Exit Sub End If 'Open file to write data into.' intFileNumber = FreeFile Open (strpath & "\RiskData.txt") For Output As #intFileNumber 'Write Data into File.' Write #intFileNumber, Val(TxtMeanAnn.Text), _ Val(TxtStandardDev.Text), _ Val(TxtNumSeries.Text), _ Val(TxtNumYearsRecord.Text), _ Val(TxtRiskFreeboard.Text), _ Val(TxtNumClosSeries.Text), _ Val(TxtNumClosYears.Text) strWhereSaved = "Your Data Has Been Saved as 'RiskData.txt' in your project directory MsgBox (strWhereSaved & strpath) Close #intFileNumber Exit Sub CheckError: IfErr = 53Then MsgBox "This directory does not contain this data file. Please input appropriate data and save the file to your project directory.", vblnformation Exit Sub Elself Err = 0 Then Exit Sub Else 213  MsgBox "Unexpected Error # " & Err & "! " & Err.Description, vbExclamation Close #intFileNumber Exit Sub End If End Sub  214  'Output Menu Code Option Explicit 'General counters and response variables. Dim blnRiskClosureRan As Boolean Dim intVESRows, intYear, intSeries, intNumClosSeries, intNumClosYears, _ intClearSeries, intSeriesCounter, intClosureMonths, _ intDamRows, intCounter, intClearCounter, _ intCol, intEDFResponse, intNoFile, _ intColumn, intPackCounter, intTotalMonths, intMonthCounter, _ intFileNumber, intRow, sglTotalYears, intYearCounter, _ intRowCounter, intCurMonth, intPrevMonth, intWrongFormat, _ intNumReservoirs, intM, intDaysinMonth, intTotalClosMonths, _ intClosSerCounter As Integer Dim strProjectDirectory, StrMsg, strpath, strMsgBox, _ strWhereSaved, strStartMonthLabel, strMonthLabel, _ strSiteName, strFile As String Dim strDependResponse, strAnnVary As String * 5 'Design variables. Dim intFreeBoardl Yearl, intFreeBoardl Year2, _ intFreeBoard2Yearl, intFreeBoard2Year2, _ intYearAsDateCount, intRunNumber, intTotalYears As Integer Dim sngDamLossConstant, sngSeepOutRateConstant, sngEDFWinter, _ sngEDFSpring, sngEDFSummer, sngEDFFall, sngMaxLift, sngTempWatElev, sngTempElevDiff(l To 600), sngDesignSpillVol(l To 601), _ sngFracSnow(l To 12), sngSpillWayInvertElev(l To 601), _ sngSpillWaylnvert, sngFinalCrestElev As Single 'Production Varibles Public intStartMonth, intStartYear, intEndMonth, intEndYear As Integer Dim sngTonnesMined, sngTonnesMetal, sngTonnesRock, _ sngTonnesTail, sngDegSatTail, sngFracWater, _ sngFracCyclone, sngBulkDRock, sngVoidRRock, _ sngDryDTail, sngVoidRTail, sngSpecGravTail, _ sngFracWRsub, sngSpillPerMonth(l To 12) As Single Dim intOperDaysinMonth(l To 12), intOperDaysPerYear As Integer Dim sngAnnMined(l To 50), sngAnnRock(l To 50), sngAnnTail(l To 50), _ sngFracWRVoidsTail As Single 215  'Reservoir Variables Dim strResName, strResAbbr, strvolumefile, _ strSeepOutFile As String * 50 Public sngStartWatElev, sngStartTailElev, sngCatchArea, _ sngStartSurfArea, sngStartWatVol, sngStartSolVol, _ sngSeepReturnRate, sngSeepOutRate, sngFracWRIn, _ sngSlurryWatlnRate, _ sngMineWatlnRate, sngSeepInRate, sngBeachArea, _ sngMaxWatElev, sngMinWatElev, sngFracRunDivert As Single Public sngNeededForReclaim, sngReclaimRate As Single 'General hydrologic Variables (some as arrays representing months 'of the year). Dim sngAvgPrecip(l To 12), sngPercentRain(l To 12), _ sngPondEvap(l To 12), sngBeachEvap(l To 12), _ snglntensity(l To 12), sngAvgTemp(l To 12), _ sngEDFVolume As Single 'Calculation Variables (Arrays of values representing each month 'or each production year). Dim sngAnnDirPrecip(l To 50), sngAnnRunoff(l To 50), _ sngAnnMineWater(l To 50) As Single, sngAnnTailingsWater(l To 50), sngAnnSeepIn(l To 50), sngAnnEvap(l To 50), _ sngAnnReclaim(l To 50), sngMonthPondEvap(l To 600), _ sngMonthWatLoss(l To 600), sngMonthSolLoss(l To 600), _ sngMonthBeachEvap(l To 600), sngMonthSeepOut(l To 600), _ sngMonthVoidLoss(l To 600), sngMonthSpill(l To 600), _ sngMonthReclaim(l To 600), sngSpillPerYear, _ sngDesignFreeboard, sngBeachAreaConstant, _ sngActualFreeboard(l To 600), sngMonthDamLoss(l To 600), _ sngStarterDamElev, sngMonthTailLossToWR(l To 600), _ sngBegWatElev(l To 600), sngEndWatElev(l To 600), _ sngBegWatVol(l To 600), sngEndWatVol(l To 600), _ sngBegTotVol(l To 600), sngEndTotVol(l To 600), _ sngBegSolVol(l To 600), sngEndSolVol(l To 600), _ sngBegPondArea(l To 600), sngEndPondArea(l To 600), _ sngEndSolElev(l To 600), sngEndDamCrestElev(l To 600), _ sngEndEDFElev(l To 600), sngFreeBoardl, sngFreeBoard2, _ sngMonthTailVolIn(l To 600), _ sngMonthWRVolIn(l To 600), sngMonthSol!n(l To 600), _ 216  sngMonthTailLoss(l To 600), sngMonthTailInWRVoids(l To 600), _ sngMonthWatLossToWR(l To 600), sngMonthWatLossToTail(l To 600), sngDamLoss, sngEndPondDepth(l To 600), sngMonthDirPre(l To 600), _ sngMonthMineWater(l To 600), sngMonthSlurry Water(l To 600), _ sngMonthSeepIn(l To 600) As Single ' C A D File Variables Dim sngStartElev(l To 14), sngEndElev(l To 14), _ sngIncVolume(l To 14), sngCumVolume(l To 14), _ sngSurfaceArea(l To 14) As Single  'Risk Analysis Variables. Dim lngAnnSpillMonths(l To 1001, 1 To 50), lngAnnDryTailMonths(l To 1001, 1 To 50), lngAnnLowFreeMonths(l To 1001, 1 To 50), lngAnnLowPondMonths(l To 1001, 1 To 50) As Long Dim lngTotAnnSpillMonths(l To 50), lngTotAnnLowFreeMonths(l To 50), _ lngTotAnnLowPondMonths(l To 50), lngTotAnnDryTailMonths(l To 50) As Long Dim intYearsWithSpill(l To 50), intYearsWithLowFree(l To 50), _ intYearsWithLowPondQ To 50), intYearsWithDryTail(l To 50) As Integer Dim sngAvgSpillMonths(l To 50), sngAvgLowFreeMonths(l To 50), _ sngAvgLowPondMonths(l To 50), sngAvgDryTailMonths(l To 50), _ sngAnnSpillProb(l To 50), sngTempSpillVol, sngSpillVol, _ sngAnnSpillVol(l To 1001, 1 To 50), sngMaxSpillVol(l To 50), _ sngAnnFreshVol(l To 1001, 1 To 50), sngMaxFreshVol(l To 50), _ sngTotSpillVol(l To 50), sngTotPondDepth(l To 50), sngTotFreshVol(l To 50), _ sngAnnFreeboard(l To 1001, 1 To 50), sngTotFreeboard(l To 50), _ sngAnnLowFreeProb(l To 50), sngAvgLowFreeHeight(l To 50), _ sngAnnLowPondProb(l To 50), sngAnnDryTailProb(l To 50), sngAvgSpillVol(l To 50), sngAvgPondDepth(l To 50), sngAnnPondDepth(l To 100.1, 1 To 50), _ sngAvgFreshVol(l To 50), sngTempFreshVol, sngFreshVol, _ sngTempFreeboard As Single Dim sngBegRiskTotVol(l To 600), sngEndRiskTotVol(l To 600), _ sngBegRiskWatElev(l To 600), sngEndRiskWatElev(l To 600), _ sngBegRiskPondArea(l To 600), sngEndRiskPondArea(l To 600), _ sngEndRiskPondDepth(l To 600), sngEndRiskEDFElev(l To 600), _ 217  sngRiskDirPre(l To 600), sngRiskReclaim(l To 600), sngRiskRunoff(l To 600), _ sngRiskPondEvapO To 600), sngRiskWatIn(l To 600), _ sngRiskWatLoss(l To 600), sngRiskPondVol(l To 600), sngMeanAnnual, _ sngStandardDev, sngSpillTo, sngSpillVolume(l To 600), sngTempVol, sngRiskPrecip(l To 600), _ sngRiskAnnPrecip(l To 50), sngSimSpillVolume, _ sngRiskRunoffLoss(l To 12), sngRiskPondLevel(l To 600), _ sngRiskFreeboard, sngMonthPercent(l To 12), _ sngRunoffLoss(l To 12), sngTotalRunoffLoss, _ sngNumYearsRecord, sngTotalTemporal, _ sngMonthSeepReturn(l To 600), sngMonthWatIn(l To 600), _ sngMonthRunoff(l To 600), sngSeriesSpillVolume(l To 1001) As Single Dim intStartPackMonth, intEndPackMonth, intTotalPackMonths, _ intPackMonthCounter, intSpillCount, _ intReclaimOffCount(l To 600), intNU, intNoFileMade, _ intNumSeries As Integer Dim sngSnowPackDepth, sngFracMelt(l To 12), sngTotalPackDepth(l To 1001) As Single Dim blnlsNewProject, blnRiskRan, blnVbRan, _ blnCalcDamDependersOnce, blnDamDependFile As Boolean 'Closure Analysis Variables Dim sngBegClosTotVol(l To 1200), sngEndClosTotVol(l To 1200), _ sngBegClosWatElev(l To 1200), sngEndClosWatElev(l To 1200), _ sngBegClosPondArea(l To 1200), sngEndClosPondArea(l To 1200), _ sngEndClosPondDepth(l To 1200), sngEndClosEDFElev(l To 1200), _ sngClosDirPre(l To 1200), sngClosRunoff(l To 1200), _ sngClosPondEvap(l To 1200), sngClosWatIn(l To 1200), _ sngClosWatLossQ To 1200), sngClosPondVol(l To 1200), _ sngClosPrecip(l To 1200), sngClosAnnPrecip(l To 100), _ sngClosRunoffLoss(l To 12), sngClosPondLevel(l To 1200) As Single Dim lngClosSpillMonths(l To 1001, 1 To 100), lngClosDryTailMonths(l To 1001, 1 To 100), _ lngClosLowFreeMonths(l To 1001, 1 To 100) As Long Dim lngTotClosSpillMonths(l To 100), lngTotClosLowFreeMonths(l To 100), _ lngTotClosDryTailMonths(l To 100) As Long Dim intClosYearsWithSpill(l To 100), intClosYearsWithLowFreeQ To 100), _ intClosYearsWithDryTail(l To 100) As Integer  218  Dim sngAvgClosSpillMonthsO To 100), sngAvgClosLowFreeMonths(l To 100), sngAvgClosDryTailMonths(l To 100), sngClosSpillProb(l To 100), _ sngClo'sSpillVol(l To 1001, 1 To 100), sngMaxClosSpillVol(l To 100), _ sngTotClosSpillVol(l To 100), sngClosFreeboard(l To 1001, 1 To 100), _ sngTotClosFreeboard(l To 100), sngTempClosSpillVol, _ sngClosLowFreeProb(l To 100), sngAvgClosLowFreeHeight(l To 100), _ sngClosDryTailProb(l To 100), sngAvgClosSpillVol(l To 100), _ sngClosureCrest, sngClosSolElev, sngClosSolVol, sngClosInvertElev, _ sngFinallnvertElev As Single Dim sngClosMonthSeepOut(l To 1200), sngClosMonthBeachEvap(l To 1200), _ sngClosMonthSeepIn(l To 1200), sngClosActualFreeboard(l To 1200), _ sngAvgClosPondDepth(l To 100), sngClosPondDepth(l To 1001, 1 To 100), _ sngPondDepth, sngTotClosPondDepth(l To 100), sngTempPondDepth As Sing Dim blnClosureRan As Boolean 'Average Closure Run Variables Dim sngACBegWatElev(l To 1200), sngACBegWatVol(l To 1200), _ sngACBegTotVol(l To 1200), sngACBegPondArea(l To 1200), _ sngACEndTotVol(l To 1200), sngACEndWatElev(l To 1200), _ sngACEndPondArea(l To 1200), sngACEndWatVol(l To 1200), _ sngACMonthBeachEvap(l To 1200), sngACPondDepth(l To 1200), _ sngACMonthSeepOut(l To 1200), sngACMonthPondEvap(l To 1200), _ sngACMonthSeepIn(l To 1200), sngACMonthDirPre(l To 1200), _ sngACMonthRunoff(l To 1200), sngACMonthWatIn(l To 1200), _ sngACMonthWatLoss(l To 1200), sngACEndEDFElev( 1 To 1200), _ sngACActualFreeboard(l To 1200) As Single Dim lngACDryTailMonths(l To 1200), lngACLowFreeMonths(l To 1200), _ lngACSpillMonths(l To 1200) As Long Dim sngACAnnFreeboard(l To 100), sngACSpillVol, sngACTempSpillVol, _ sngACMaxSpillVol(l To 100), sngAvgACSpillMonths(l To 100), _ sngAvgACLowFreeMonths(l To 100), sngACAnnSpillVol(l To 100), _ sngAvgACDryTailMonths(l To 100), sngAvgACSpillVol(l To 100), _ sngAvgACLowFreeHeight(l To 100), _ sngAvgACPondDepth(l To 100), sngACAnnPondDepth(l To 100) As Single 'Output Variables Dim objExcelOutFile, ObjWatElevFile, objWatQualFile As Object 219  Private Sub Exit_Click(Index As Integer) Beep StrMsg = "Are you sure you want to close Visual Balance?" If MsgBox(StrMsg, vbQuestion + vbYesNo) = vbYes Then End Else End If End Sub Private Sub Form_Load() On Error GoTo CheckError: 'Centre Form on the Screen Top = (Screen.Height - Height) / 2 Left = (Screen. Width - Width) / 2 blnVbRan = False blnRiskRan = False blnCalcDamDependersOnce = False blnCalcElevOnce = False blnCalcPondOnce = False blnCalcVolumeOnce = False blnClosureRan = False blnRiskClosureRan = False WaterQual(2).Enabled = False intRunNumber = FrmRunNumber.TxtRunNum If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If 'Open the general mine information file. Read the 'data to the appropriate variables. intFileNumber = FreeFile Open (strpath & "\mine.txt") For Input As #intFileNumber 220  Input #intFileNumber, strSiteName, strSiteDescription, intNumReservoirs, sngStarterDamElev Close #intFileNumber  'Open the reservoir data file and read values into variables. Open (strpath & "\reservoir.txt") For Input As #intFileNumber Input #intFileNumber, strResName, strResAbbr, _ sngCatchArea, sngStartWatElev, sngStartTailElev, _ sngStartSurfArea, sngStarfWatVol, sngStartSolVol, _ sngSeepReturnRate, sngFracWRIn, _ sngNeededForReclaim, sngReclaimRate, _ sngSlurry WatlnRate, sngMineWatlnRate, _ sngSeepInRate, sngMaxWatElev, sngMinWatElev, _ sngFracRunDivert, intDamRows, _ sngSeepOutRate, sngBeachAreaConstant, sngDamLossConstant, _ intVESRows, strDependResponse Close #intFileNumber 'Read the Dam design data etcetera... intFileNumber = FreeFile Open (strpath & "\safety.txt") For Input As #intFileNumber Input #intFileNumber, sngFreeBoardl, intFreeBoardlYearl, _ intFreeBoardlYear2, sngFreeBoard2, intFreeBoard2Yearl, _ intFreeBoard2Year2, sngMaxLift, sng Spill Way Invert, _ sngFinallnvertElev Close #intFileNumber 'Open the hydrological extreme data file. Open (strpath & "\extremes.txt") For Input As #infFileNumber Input #intFileNumber, intEDFResponse, sngEDFWinter, sngEDFSpring, sngEDFSummer, sngEDFFall, intStartPackMonth, intEndPackMonth, intTotalPackMonths Close #intFileNumber 'Open the mine production information file. Read the 'data to the appropriate variables. intFileNumber = FreeFile  221  Open (strpath & "\production.txt") For Input As #intFileNumber Input #intFileNumber, intStartMonth, intStartYear, _ intEndMonth, intEndYear, sngTonnesMined, _ sngTonnesMetal, sngTonnesRock, sngTonnesTail, _ sngBulkDRock, sngVoidRRock, sngFrac WRsub, sngFrac WRVoidsTail, _ sngDegSatTail, sngFrac Water, sngFracCyclone, _ sngDryDTail, sngVoidRTail, sngSpecGravTail, strAnnVary Close #intFileNumber 'Read in risk variables from text file. intFileNumber = FreeFile Open (strpath & "\RiskData.txt") For Input As #intFileNumber Input #intFileNumber, sngMeanAnnual, _ sngStandardDev, intNumSeries, _ sngNumYearsRecord, sngRiskFreeboard, intNumClosSeries, intNumClosYears Close #intFileNumber  'Determine the total number of months for which inflow 'water must be calculated. If intStartMonth < intEndMonth Then intTotalMonths = (intEndMonth - intStartMonth) _ + (intEndYear - intStartYear) * 12 Else intTotalMonths = (intEndYear - intStartYear - 1) * 12 + (12 - intEndMonth) End If sglTotal Years = (intStartMonth / 12) + _ (intEndYear - intStartYear) - 1  'Error Handling CheckError: intNoFile = 31031 intNoFileMade = 53 If Err = intNoFile Then 222  0 L E 1 .CreateLink ("c:\VisualBalance\RiskData.xls") ElseIfErr = OThen Me. Show Elself Err = 6 Then MsgBox "There is an error in the data in one of your " & _ "data files. Visual Balance has detected an overflow " & _ "error in a standard data file (not an Excel file). Please " & _ "return to the data edit menu and ensure that all the appropriate " & _ "data has been entered prior to running Visual Balance.", vbCritical Close #intFileNumber GoTo ShowEditMenu ElseIfErr = 53 Then MsgBox "There are required data files missing from your directory. " & vbCrLf & _ "Please return to the data edit menu to add data files or use " & _ "Windows Explorer to ensure that all required data has been entered.", vbExclamation GoTo ShowEditMenu Exit Sub Elself Err = 62 Then MsgBox "There is an error in one of your data files. Either you have not" & _ "entered required data, or the file does not exist. " & _ "Please return to the data edit menu and edit your project data input files.", vbCritical Close #intFileNumber GoTo ShowEditMenu Else MsgBox "Unexpected Error # " & Err & "!", vbExclamation Close #intFileNumber GoTo ShowEditMenu Exit Sub End If ShowEditMenu: Load FrmEditMenu FrmEditMenu.mnuGeneralData.Enabled = True FrmEditMenu.mnuMineProduction.Enabled = True FrmEditMenu.mnuSiteHydrology.Enabled = True FrmEditMenu.mnuReservoirlnfo.Enabled = True FrmEditMenu.mnuReservoirLinks.Enabled = True FrmEditMenu.mnuWaterQual.Enabled = True FrmEditMenu.mnuDamSafety.Enabled = True FrmEditMenu.mnuRiskData.Enabled = True FrmEditMenu.mnuGoToOutput.Enabled = True FrmEditMenu.Refresh 223  FrmEditMenu. Show Close #intFileNumber Exit Sub ProcExit: Close #intFileNumber Exit Sub ProcError: Close #intFileNumber MsgBox Err.Description Resume ProcExit OverflowError: Close #intFileNumber Unload FrmWaitingSign FrmOutputMenu.MousePointer = 1 MsgBox "Due to the overflow error in your reservoir, Visual Balance was unable to complete the water balance. Please edit your input files in order to proceed.", vbOKOnly Exit Sub Me. Refresh Me.Show End Sub Private Sub mnuMain_Click(Index As Integer) Unload Me FrmMainMenu. Show End Sub Private Sub mnuAvgClosureTables_Click() If blnClosureRan = False Then MsgBox "You need to run a Visual Balance Closure Analysis " & _ "for this data prior to viewing output.", vbExclamation GoTo ProcExit: End If Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual Balance is creating " & _ "an Excel output file for your Closure Analysis..." FrmWaitingSign.Visible = True 224  FrmWaitingSign.Show FrmWaitingSign.Refresh MousePointer = vbHourglass Dim appClosResults As New Excel.Application Dim wkbClosResults As New Excel.Workbook Dim wksClosResults As New Excel.Worksheet appClosResults.Workbooks.Add appC lo sRe suits.Worksheets.Add With appClosResults.Range("Al :F30").Font .Size = 10 .Name = "Arial" .Colorlndex = 1 End With appClosResults.Range("Al:Fl").ColumnWidth = 20 appClosResults.Range("A4:E12").NumberFormat = "#,##0" appClosResults.Range("B7:G300").NumberFormat = "###,###,##0.0#"  With appClosResults .Cells(l, 1 .Value = "Closure Analysis Summary Statistics for " & strSiteName .Cells(l, 1 .Font.Bold = True .Cells(3, 1 .Value = "Closure Analysis Input Parameters" .Cells(3, 1 .Font.Bold = True .Cells(4, 1 .Cells(5, 1 .Cells(6, 1 .Cells(7, 1 .Cells(8, 1 .Cells(9, 1  .Value = .Value = .Value = .Value = .Value = .Value =  "Minimum Design Freeboard (above EDF)" "Risk Freeboard (above EDF)" "Final Spillway Invert Elevation" "Final Dam Crest Elevation" "Number of Years in Closure Series" "Number of Series in Simulation"  .Cells(4, 3 .Cells(5, 3 .Cells(6, 3 .Cells(7, 3 .Cells(8, 3 .Cells(9, 3  .Value = sngFreeBoardl .Value = sngRiskFreeboard .Value = sngClosInvertElev .Value = sngClosureCrest .Value = intNumClosYears .Value = intNumClosSeries  225  .Range("All:F15").Font.Bold = True .Cells(ll, l).Value = "Closure Analysis Annual Summary Statistics" .Cells(12, 1).Value = "Spill Results" .Cells(13, 1).Value = "Year In Series " .Cells(13, 2).Value = "Avg. # Months" .Cells(14, 2).Value = "With Spill" .Cells(13, 3).Value = "Average Annual" .Cells(14, 3).Value = "Prob. of Spill (%)" .Cells(13, 4).Value = "Avg. Spill Volume" .Cells(14, 5).Value = "Maximum Spill Volume" intRowCounter =15 intCounter = 0 While intCounter < intNumClosYears intRowCounter = intRowCounter + 1 intCounter = intCounter + 1 'Spill Statistics .Cells(intRowCounter, l).Value = intCounter .Cells(intRowCounter, 2).Value = lngACSpillMonths(intCounter) .Cells(intRowCounter, 3).Value = (lngACSpillMonths(intCounter) / 12) * 100 .Cells(intRowCounter, 4).Value = sngAvgACSpillVol(intCounter) .Cells(intRowCounter, 5).Value = sngACMaxSpillVol(intCounter) Wend .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter  + 1, l).Font.Bold = True + 2, l).Font.Bold = True + 2, 2).Font.Bold = True + 3, 2).Font.Bold = True + 2, 3).Font.Bold = True + 3, 3).Font.Bold = True + 2, 4).Font.Bold = True + 3, 4).Font.Bold = True + 1, l).Value = "Freeboard Results" + 2, 1).Value = "Year in Series" + 2, 2).Value = "Avg. # Months with" + 3, 2).Value = "Low Freeboard" + 2, 3).Value = "Avg. Annual Prob." + 3, 3).Value = "of Low Freeboard (%)" + 2, 4).Value = "Avg. Height o f + 3, 4).Value = '"Low Freeboards'"  intCounter = 0 intRowCounter = intRowCounter + 4 226  While intCounter < intNumClosYears intCounter = intCounter + 1 'Freeboard Statistics .Cells(intRowCounter, l).Value = intCounter .Cells(intRowCounter, 2).Value = sngAvgACLowFreeMonths(intCounter) .Cells(intRowCounter, 3).Value = sngAvgACLowFreeMonths(intCounter) /12 .Cells(intRowCounter, 4).Value = sngAvgACLowFreeHeight(intCounter) intRowCounter = intRowCounter + 1 Wend .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter  + + + + + + + + + + + + + + + +  1, 1 ).Font.Bold = True 2, 1 ).Font.Bold = True 2, 2 ).Font.Bold = True 3,2).Font.Bold = True 2, 3 ).Font.Bold = True 3,3 ).Font.Bold = True 2, 4).Font.Bold = True 3,4).Font.Bold = True 1, 1 ).Value = "Tailings Exposure Results" 2, 1 ).Value = "Year in Series" 2, 2 ).Value = "Avg. # Months with" 3,2 ).Value = "Solids Exposed" 2, 3 ).Value = "Avg. Annual Prob." 3,3 ).Value = "of Solids Exposure" 2, 4).Value = "Avg. Depth of Water" 3,4).Value = "above solids (m)"  intCounter = 0 intRowCounter = intRowCounter + 5 While intCounter < intNumClosYears intCounter = intCounter + 1 'Tailings Statistics .Cells(intRowCounter, l).Value = intCounter .Cells(intRowCounter, 2).Value = sngAvgACDryTailMonths(intCounter) .Cells(intRowCounter, 3).Value = sngAvgACDryTailMonths(intCounter) /12 * .Cells(intRowCounter, 4).Value = sngAvgACPondDepth(intCounter) intRowCounter = intRowCounter + 1 Wend End With  Unload FrmWaitingSign 227  appClosResults. Visible = True MousePointer = 1 ProcExit: Exit Sub End Sub Private Sub mnuRiskClosureTables_Click() If blnClosureRan = False Then MsgBox "You need to run a Visual Balance Closure Risk Analysis " & _ "for this data prior to viewing output.", vbExclamation GoTo ProcExit: End If Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual Balance is creating " & "an Excel output file for your V B Closure Risk Analysis..." FrmWaitingSign.Visible = True FrmWaitingSign. Show FrmWaitingSign.Refresh MousePointer = vbHourglass Dim appClosRiskResults As New Excel.Application Dim wkbClosRiskResults As New Excel.Workbook Dim wksClosRiskResults As New Excel. Worksheet appClosRiskResults.Workbooks.Add appClosRiskResults.Worksheets.Add With appClosRiskResults.Range("Al :F30").Font .Size = 10 .Name = "Arial" .Colorlndex = 1 End With appClosRiskResults.Range("Al:Fl").ColumnWidth = 20 appClosRiskResults.Range("A4:E12").NumberFormat = "#,##0" appClosRiskResults.Range("B7:G300").NumberFormat = "###,###,##0.0#"  With appClosRiskResults 228  .Cells(l, 1).Value = "Closure Analysis Summary Statistics for " & strSiteName .Cells(l, l).Font.Bold = True .Cells(3, l).Value = "Closure Analysis Input Parameters" .Cells(3, l).Font.Bold = True .Cells(4, 1).Value = "Mean Annual Precipitation" .Cells(5, l).Value = "Standard Deviation" .Cells(6, l).Value = "Number of Years of record" .Cells(7, l).Value = "Minimum Design Freeboard (above EDF)" .Cells(8, l).Value = "Risk Freeboard (above EDF)" .Cells(9, l).Value = "Final Spillway Invert Elevation" .Cells(10, l).Value = "Final Dam Crest Elevation" .Cells(4, 3).Value = sngMeanAnnual .Cells(5, 3).Value = sngStandardDev .Cells(6, 3).Value = sngNumYearsRecord .Cells(7, 3).Value = sngFreeBoardl .Cells(8, 3).Value = sngRiskFreeboard .Cells(9, 3).Value = sngClosInvertElev .Cells(10, 3).Value == sngClosureCrest :  :  :  :  :  :  .Cells(ll, .Cells(l 1, .Cells(12, .Cells(13, .Cells(12, .Cells(13,  l).Font.Bold = True l).Value = "Operation Input Parameters" l).Value = "Number of Years in Closure Series" l).Value = "Number of Series in Simulation" 3).Value = intNumClosYears 3).Value = intNumClosSeries  .Range("A15:F18").Font.Bold = True .Cells(15, l).Value = "Closure Analysis Summary Statistics" .Cells(16, .Cells(17, .Cells(17, .Cells(18, .Cells(17, .Cells(18, .Cells(17, .Cells(17,  1).Value l).Value 2).Value 2).Value 3).Value 3).Value 4).Value 5).Value  = = = = = = = =  "Spill Results" "Year In Series " "Avg. # Months" "With Spill" "Average Annual" "Prob. of Spill (%)" "Avg. Spill Volume" "Maximum Spill Volume"  intRowCounter =18 intCounter = 0 229  While intCounter < intNumClosYears intRowCounter = intRowCounter + 1 intCounter = intCounter + 1 'Spill Statistics .Cells(intRowCounter, 1). Value = intCounter .Cells(intRowCounter, 2).Value = sngAvgClosSpillMonths(intCounter) .Cells(intRowCounter, 3).Value = sngClosSpillProb(intCounter) .Cells(intRowCounter, 4).Value = sngAvgClosSpillVol(intCounter) .Cells(intRowCounter, 5).Value = sngMaxClosSpillVol(intCounter) Wend .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter  + 1, 1) Font. Bold = True + 2, 1) Font.Bold = True + 2, 2) Font.Bold = True + 3, 2) Font.Bold = True + 2, 3) Font.Bold = True + 3, 3) Font.Bold = True + 2, 4) Font.Bold = True + 3, 4) Font.Bold = True + 1, 1) Value = "Freeboard Results" + 2, 1) Value = "Year in Series" + 2, 2) Value = "Avg. # Months with" + 3, 2) Value = "Low Freeboard" + 2, 3) Value = "Avg. Annual Prob." + 3, 3) Value = "of Low Freeboard (%) + 2, 4) Value = "Avg. Height o f + 3, 4) Value = " 'Low Freeboards'"  intCounter = 0 intRowCounter = intRowCounter + 4 While intCounter < intNumClosYears intCounter = intCounter + 1 'Freeboard Statistics .Cells(intRowCounter, 1). Value = intCounter .Cells(intRowCounter, 2).Value = sngAvgClosLowFreeMonths(intCounter) .Cells(intRowCounter, 3).Value = sngClosLowFreeProb(intCounter) .Cells(intRowCounter, 4).Value = sngAvgClosLowFreeHeight(intCounter) intRowCounter = intRowCounter + 1 Wend .Cells(intRowCounter + 1, l).Font.Bold = True .Cells(intRowCounter + 2, l).Font.Bold = True .Cells(intRowCounter + 2, 2).Font.Bold = True 230  .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter  + 3 , 2 ) .Font.Bold + + + + + + + + + + + +  = True 2 , 3 ) .Font.Bold = True 3 , 3 ) .Font.Bold = True 2 , 4) .Font.Bold = True 3 , 4 ) .Font.Bold = True "Tailings Exposure Results 1,1) .Value 2, 1) .Value "Year in Series" 2, 2) .Value = "Avg. # Months with" 3 , 2 ) .Value = "Solids Exposed" 2, 3) .Value = "Avg. Annual Prob." 3 , 3 ) .Value = "of Solids Exposure" 2, 4) .Value "Avg. Depth of Water" 3 , 4 ) .Value = "above solids (m)"  intCounter = 0 intRowCounter = intRowCounter + 5 While intCounter < intNumClosYears intCounter = intCounter + 1 'Tailings Statistics .Cells(intRowCounter, 1). Value = intCounter .Cells(intRowCounter, 2).Value = sngAvgClosDryTailMonths(intCounter) .Cells(intRowCounter, 3).Value = sngClosDryTailProb(intCounter) .Cells(intRowCounter, 4).Value = sngAvgClosPondDepth(intCounter) intRowCounter = intRowCounter + 1 Wend End With  Unload FrmWaitingSign appClosRiskResults.Visible = True MousePointer = 1 ProcExit: Exit Sub End Sub  Private Sub mnuReturntoEdit_Click(Index As Integer) Unload Me 231  Load FrmEditMenu FrmEditMenu.mnuGeneralData.Enabled = True FrmEditMenu.mnuMineProduction.Enabled = True FrmEditMenu.mnuSiteHydrology.Enabled = True FrmEditMenu.mnuReservoirlnfo.Enabled = True FrmEditMenu.mnuReservoirLinks.Enabled = True FrmEditMenu.mnuWaterQual.Enabled = True FrmEditMenu.mnuDamSafety.Enabled = True FrmEditMenu.mnuRiskData.Enabled = True FrmEditMenu.mnuGoToOutput.Enabled = True FrmEditMenu. Show End Sub Private Sub mnuReturntoMain_Click() Unload Me Load FrmMainMenu FrmMainMenu.Refresh FrmMainMenu. Show End Sub Private Sub mnuRiskGraph_Click() Dim intColumn As Integer If blnRiskRan = False Then MsgBox "You need to run a risk analysis for this data prior to viewing output.", vbExclamation GoTo ProcExit: End If Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual Balance is creating " & _ "an Excel output graph file..." FrmWaitingSign.Visible = True FrmWaitingSign. Show FrmWaitingSign.Refresh MousePointer = vbHourglass Exit Sub Dim blnlsNewProject As Boolean If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text 232  Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If Dim appRisk As Object Dim wksRiskData As Object Dim wkbPvisk As Excel.Workbook Set wkbRisk = GetObject("c:\VisualBalance\RiskCurve.xls") Set appRisk = wkbRisk.Application Set wksRiskData = wkbRisk.Worksheets("RiskData") 'Label the the month record/Columns.' strStartMonthLabel = FindMonthLabel(intStartMonth) wksRiskData.Cells(2, 3).Value = strStartMonthLabel intColumn = 2 intMonthCounter = 1 intYearCounter = 1 Do Until intMonthCounter > intTotalMonths intColumn = intColumn + 1 intMonthCounter = intMonthCounter + 1 intCurMonth = (intMonthCounter + (intStartMonth - 1)) _ - ((intYearCounter - 1) * 12) If intCurMonth = 12 Then intYearCounter = intYearCounter + 1 End If strMonthLabel = FindMonthLabel(intCurMonth) wksRiskData.Cells(3, intColumn).Value = strMonthLabel Loop  'Fill the time in years into the second row. intColumn = 2 intMonthCounter = 0 intYearCounter = 0 Do Until intMonthCounter > intTotalMonths intMonthCounter = intMonthCounter + 1 intYearCounter = intMonthCounter / 12 wksRiskData.Cells(2, intColumn).Value = _ intYearCounter intColumn = intColumn + 1 Loop 233  'Put the End of the month water volume in the 13th row. intColumn = 2 intMonthCounter = 0 Do Until intMonthCounter > intTotalMonths intMonthCounter = intMonthCounter + 1 wksRiskData.Cells(13, intColumn).Value = _ sngEndRiskTotVol(intMonthCounter) intColumn = intColumn + 1 Loop 'Put the End of the month solids elevation in the fourth column. 'Put the End of the month water elevation in the fifth column. 'Put the End of the month dam crest elevation in the sixth column. intColumn = 2 intMonthCounter = 0 Do Until intMonthCounter > intTotalMonths intMonthCounter = intMonthCounter + 1 wksRiskData.Cells(4, intColumn).Value = _ sngEndSolElev(intMonthCounter) wksRiskData.Cells(5, intColumn).Value = _ sngEndRiskWatElev(intMonthCounter) wksRiskData.Cells(6, intColumn).Value = _ sngEndRiskEDFElev(intMonthCounter) wksRiskData.Cells(10, intColumn).Value = _ sngEndDamCrestElev(intMonthCounter) intColumn = intColumn + 1 Loop Unload FrmWaitingSign MousePointer = 1 wkbRisk.SaveAs (strpath & "\RiskCurve.xls") O L E 1.Class = "Excel.Sheet" ' Set class name. OLE1 .OLETypeAllowed = vbOLELinked OLEl.CreateLink (strpath & "\RiskCurve.xls") O L E 1.DoVerb vbOLEOpen ProcExit: Exit Sub  234  End Sub Private Sub mnuRiskTables_Click() If blnRiskRan = False Then MsgBox "You need to run a risk analysis for this data prior to viewing output.". vbExclamation GoTo ProcExit: End If Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual Balance is creating an " & " Excel output file for your V B Risk Analysis..." FrmWaitingSign.Visible = True FrmWaitingSign.Show FrmWaitingSign.Refresh MousePointer = vbHourglass Dim appRiskResults As New Excel.Application Dim wkbRiskResults As New Excel.Workbook Dim wksRiskResults As New Excel.Worksheet appRiskResults. Workbooks.Add appRiskResults. Worksheets.Add With appRiskResults.Range("Al :F30").Font .Size =10 .Name = "Arial" .Colorlndex = 1 End With appRiskResults.Range("Al:Fl").Column Width = 20 appRiskResults.Range("A4:E12").NumberFormat = "#,##0" appRiskResults.Range("B7:G300").NumberFormat = "###,###,##0.0#"  With appRiskResults .Cells(l, 1).Value = "Risk Analysis Summary Statistics for " & strSiteName .Cells(l, l).Font.Bold = True .Cells(3, l).Value = "Risk Analysis Input Parameters" .Cells(3, l).Font.Bold = True  235  .Cells(4, l).Value = "Mean Annual Precipitation" .Cells(5, 1). Value = "Standard Deviation" .Cells(6, l).Value = "Number of Years of record" .Cells(7, l).Value = "Minimum Design Freeboard (above EDF)" .Cells(8, 1).Value = "Risk Freeboard (above EDF)" .Cells(9, l).Value = "SpillWay Invert, Height Above EDF" .Cells(10, 1).Value = "Pond Depth Required for Reclaim" .Cells(4, 3).Value = sngMeanAnnual .Cells(5, 3).Value = sngStandardDev .Cells(6, 3).Value = sngNumYearsRecord .Cells(7, 3).Value = sngFreeBoardl .Cells(8, 3).Value = sngRiskFreeboard .Cells(9, 3).Value = sngSpillWaylnvert .Cells(10, 3).Value = sngNeededForReclaim .Cells(l 1, .Cells(l 1, .Cells(12, .Cells(13, .Cells(12, .Cells(13,  l).Font.Bold = True l).Value = "Operation Input Parameters" 1). Value = "Number of Years in Operation Series" l).Value = "Number of Series in Simulation" 3).Value = intTotalYears 3).Value = intNumSeries  .Range("A15:F18").Font.Bold = True .Cells(15, l).Value = "Risk Analysis Summary Statistics" .Cells(16, l).Value = .Cells(17, 1).Value = .Cells(17, 2).Value = .Cells(18, 2).Value = .Cells(17, 3).Value = .Cells(18, 3).Value = .Cells(17,4).Value = .Cells(17, 5).Value =  "Spill Results" "Year In Series " "Avg. # Months" "With Spill" "Average Annual" "Prob. of Spill (%)" "Avg. Spill Volume" "Maximum Spill Volume"  intRowCounter =18 intCounter = 0 While intCounter < intTotalYears intRowCounter = intRowCounter + 1 intCounter = intCounter + 1 'Spill Statistics .Cells(intRowCounter, l).Value = intCounter .Cells(intRowCounter, 2).Value = sngAvgSpillMonths(intCounter) 236  .Cells(intRowCounter, 3).Value = sngAnnSpillProb(intCounter) .Cells(intRowCounter, 4).Value = sngAvgSpillVol(intCounter) .Cells(intRowCounter, 5).Value = sngMaxSpillVol(intCounter) Wend .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(infRowCounter  + 1, 1).Font.Bold = True + 2,1 ).Font.Bold = True + 2, 2).Font.Bold = True + 3,2).Font.Bold = True + 2, 3).Font.Bold = True + 3,3).Font.Bold = True + 2, 4).Font.Bold = True + 3,4).Font.Bold = True + 1, 1).Value = "Freeboard Results" + 2, 1).Value = "Year in Series" + 2, 2).Value = "Avg. # Months with" + 3,2).Value = "Low Freeboard" + 2, 3).Value = "Avg. Annual Prob." + 3,3 ). Value = "of Low Freeboard (%)" + 2, 4). Value = "Avg. Height o f + 3,4).Value = " 'Low Freeboards'"  intCounter = 0 intRowCounter = intRowCounter + 4 While intCounter < intTotalYears intCounter = intCounter + 1 'Freeboard Statistics .Cells(intRowCounter, l).Value = intCounter .Cells(intRowCounter, 2).Value = sngAvgLowFreeMonths(intCounter) .Cells(intRowCounter, 3).Value = sngAnnLowFreeProb(intCounter) .Cells(intRowCounter, 4).Value = sngAvgLowFreeHeight(intCounter) intRowCounter = intRowCounter + 1 Wend .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter  + 1, l).Font.Bold = + 2, l).Font.Bold = + 2, 2).Font.Bold = + 3, 2).Font.Bold = + 2, 3).Font.Bold = + 3, 3).Font.Bold = + 2, 4).Font.Bold = + 3, 4).Font.Bold + 2, 5).Font.Bold =  True True True True True True True True True 237  .Cells(intRowCounter .Cells(infRo wCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(infRo wCounter .Cells(intRo wCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter .Cells(intRowCounter  + 3, 5).Font.Bold = True + 1, 1).Value = "Reclaim Results" + 2, l).Value = "Year in Series" + 2, 2).Value = "Avg. # Months with" + 3, 2).Value = "Reclaim O f f + 2, 3).Value = "Avg. Annual Prob." + 3, 3).Value = "Month Reclaim Off (%)" + 2, 4).Value = "Avg. Freshwater" + 3, 4).Value = "Makeup Vol. Required" + 2, 5).Value = "Max. Freshwater" + 3, 5).Value = "Makeup Vol. Required"  intCounter = 0 intRowCounter = intRowCounter + 4 While intCounter < intTotalYears intCounter = intCounter + 1 'Reclaim Statistics .Cells(intRowCounter, l).Value = intCounter .Cells(intRowCounter, 2).Value = sngAvgLowPondMonths(intCounter) .Cells(intRowCounter, 3).Value = sngAnnLowPondProb(intCounter) .Cells(intRowCounter, 4).Value = sngAvgFreshVol(intCounter) .Cells(intRowCounter, 5).Value = sngMaxFreshVol(intCounter) intRowCounter = intRowCounter + 1 Wend .Cells(intRowCounter + 1, 1) .Font.Bold = True .Cells(intRowCounter + 2, 1) .Font.Bold = True .Cells(intRowCounter + 2, 2: .Font.Bold = True .Cells(intRowCounter + 3, 2: .Font.Bold = True .Cells(intRowCounter + 2, 3:(.Font.Bold = True .Cells(intRowCounter + 3, 3; .Font.Bold = True . Cells(intRo wCounter + 2, 4; .Font.Bold = True . Cells(infRowCounter + 3, 4;(.Font.Bold = True .Cells(intRowCounter + 1, r (.Value = "Tailings Exposure Results" .Cells(intRo wCounter + 2, r i.Value = "Year in Series" . Cells(intRo wCounter + 2, 2:(.Value "Avg. # Months with" .Cells(intRo wCounter + 3, 2:). Value "Solids Exposed" .Cells(intRo wCounter + 2, 3; .Value = "Avg. Annual Prob." .Cells(intRo wCounter + 3, 3 ). Value = "of Solids Exposure" . Cells(intRo wCounter + 2, 4 ). Value = "Avg. Depth of Water" .Cells(intRowCounter + 3, 4 ).Value = "above solids (m)" intCounter = 0 238  intRowCounter = intRowCounter + 4 While intCounter < intTotalYears intCounter = intCounter + 1 'Tailings Statistics .Cells(intRowCounter, 1). Value = intCounter .Cells(intRowCounter, 2).Value = sngAvgDryTailMonths(intCounter) .Cells(intRowCounter, 3).Value = sngAnnDryTailProb(intCounter) .Cells(intRowCounter, 4).Value = sngAvgPondDepth(intCounter) intRowCounter = intRowCounter + 1 Wend End With  Unload FrmWaitingSign appRiskResults.Visible = True MousePointer = 1 ProcExit: Exit Sub End Sub Private Sub mnuRunAvgClosure_Click() If blnVbRan = False Then MsgBox "You must run an Visual Balance Average Balance for these input" & _ "variables prior to running a V B Closure Balance. The average run will set" & " the final solids volumes and elevations to be used in V B Closure Balance." & vbExclamation GoTo ProcExit: End If intSpillCount = 0 If blnVbRan = True Then intRunNumber = intRunNumber + 1 End If 'On Error GoTo CheckError:  239  Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "An average Visual Balance is being run." FrmWaitingSign.LblProgress.Caption = "This is balance run number..." FrmWaitingSign.LblRunCounter = intRunNumber FrmWaitingSign. Visible = True FrmWaitingSign. Show FrmWaitingSign.Refresh FrmOutputMenu.MousePointer = vbHourglass intClearCounter = 1 While intClearCounter < 1200 sngACBegWatElev(intClearCounter) = 0 sngACBegWatVol(intClearCounter) = 0 sngACBegTotVol(intClearCounter) = 0 sngACBegPondArea(intClearCounter) = 0 sngACEndTotVol(intClearCounter) = 0 sngACEndWatElev(intClearCounter) = 0 sngACEndPondArea(intClearCounter) = 0 sngACEndWatVol(intClearCounter) = 0 sngACMonthBeachEvap(intClearCounter) = 0 sngACMonthSeepOut(intClearCounter) = 0 sngACMonthPondEvap(intClearCounter) = 0 sngACMonthSeepIn(intClearCounter) = 0 sngACMonthDirPre(intClearCounter) = 0 sngACMonthRunoff(intClearCounter) = 0 sngACMonthWatln(intClearCounter) = 0 sngACMonthWatLoss(intClearCounter) = 0 sngACEndEDFElev(intClearCounter) = 0 sngACActualFreeboard(intClearCounter) = 0 sngACPondDepth(intClearCounter) = 0 intClearCounter = intClearCounter + 1 Wend sngACSpillVol = 0 sngACTempSpillVol = 0 intClearCounter = 1 While intClearCounter < 100 lngACDryTailMonths(intClearCounter) = 0 lngACLowFreeMonths(intClearCounter) = 0 lngACSpillMonths(intClearCounter) = 0 sngACAnnPondDepth(intClearCounter) = 0 sngACAnnFreeboard(intClearCounter) = 0 240  sngACMaxSpillVol(intClearCounter) = 0 sngAvgACSpillMonths(intClearCounter) = 0 sngAvgACLowFreeMonths(intClearCounter) = 0 sngACAnnSpillVol(intClearCounter) = 0 sngAvgACDryTailMonths(intClearCounter) = 0 sngAvgACSpillVol(intClearCounter) = 0 sngAvgACLowFreeHeight(intClearCounter) = 0 sngAvgACPondDepth(intClearCounter) = 0 intClearCounter = intClearCounter + 1 Wend C L O S U R E B A L A N C E CODE 'Calculate the water and mass balance for each month 'up to the total number of years of closure analysis. V B Closure runs ' from January to December. If strDependResponse = "True " Then sngSeepOutRate = CalcSeepR(sngClosureCrest) sngBeachArea = CalcBeachA(sngClosureCrest) Else sngSeepOutRate = sngSeepOutRateConstant sngBeachArea = sngBeachAreaConstant End If intTotalClosMonths = 12 * intNumClosYears sngClosureCrest = sngEndDamCrestElev(intTotalMonths) sngClosSolElev = sngEndSolElev(intTotalMonths) sngClosSolVol = sngEndSolVol(intTotalMonths) sngClosInvertElev = sngClosureCrest - sng Spill Way Invert intMonthCounter = 0 intCurMonth = 0 intYearCounter = 1 Do Until intMonthCounter = intTotalClosMonths intMonthCounter = intMonthCounter + 1 intCurMonth = intCurMonth + 1 If intCurMonth = 13 Then intCurMonth = 1 intYearCounter = intYearCounter + 1 End If 241  intPrevMonth = intMonthCounter - 1 intDaysinMonth = CalcNumDaysInMon(intCurMonth) If intMonthCounter = 1 Then sngACBegWatElev(intMonthCounter) = sngEndWatElev(intTotalMonths) sngACBegWatVol(intMonthCounter) = sngEndWatVol(intTotalMonths) sngACBegTotVol(intMonthCounter) = sngEndTotVol(intTotalMonths) sngACBegPondArea(intMonthCounter) = sngEndPondArea(intTotalMonths) Else sngACBegTotVol(intMonthCounter) = sngACEndTotVol(intPrevMonth) sngACBegWatElev(intMonthCounter) = sngACEndWatElev(intPrevMonth) sngACBegPondArea(intMonthCounter) = sngACEndPondArea(intPrevMonth) End If 'Calculate the water inflows to the reservoir for each month. sngACMonthDirPre(intMonthCounter) = sngAvgPrecip(intCurMonth) _ / 1000 * sngACBegPondArea(intMonthCounter) * 10000 sngACMonthRunoff(intMonthCounter) = (snglntensity(intCurMonth) / 1000) _ * ((sngCatchArea - sngACBegPondArea(intMonthCounter)) * 10000) * (1 sngFracRunDivert) sngACMonthSeepIn(intMonthCounter) = sngSeepInRate * intDaysinMonth 'Calculate the water loss for each month... sngACMonthPondEvap(intMonthCounter) = _ (sngPondEvap(intCurMonth) / 1000) _ * (sngACBegPondArea(intMonthCounter) * 10000) sngACMonthSeepOut(intMonthCounter) = sngSeepOutRate * intDaysinMonth sngACMonthBeachEvap(intMonthCounter) = (sngBeachEvap(intCurMonth) / 1000) * sngBeachArea  'Sum up the water inflows for the month... sngACMonthWatln(intMonthCounter) = _ sngACMonthDirPre(intMonthCounter) _ + sngACMonthRunoff(intMonthCounter) _ 242  + sngACMonthSeepIn(intMonthCounter) 'Sum up the water losses for the months... sngACMonthWatLoss(intMonthCounter) = _ sngACMonthPondEvap(intMonthCounter) _ + sngACMonthBeachEvap(intMonthCounter) _ + sngACMonthSeepOut(intMonthCounter) 'Based on a new volume of water in the pond, 'find the new surface area and water elevation at the 'end of the month. sngACEndTotVol(intMonthCounter) = _ sngACBegTotVol(intMonthCounter) _ + sngACMonthWatln(intMonthCounter) _ - sngACMonthWatLoss(intMonthCounter) sngACEndWatVol(intMonthCounter) = sngACBegWatVol(intMonthCounter) _ + sngACMonthWatln(intMonthCounter) _ - sngACMonthWatLoss(intMonthCounter) sngACEndWatElev(intMonthCounter) = _ CalcElevation(sng ACEndTotVo 1 (intMonthCounter)) If sngACEndWatElev(intMonthCounter) = 0 Then GoTo OverflowError: End If sngACPondDepth(intMonthCounter) = sngACEndWatElev(intMonthCounter) _ - sngClosSolElev sngTempPondDepth = sngACAnnPondDepth(intYearCounter) sngACAnnPondDepth(intYearCounter) = sngACPondDepth(intMonthCounter) + sngTempPondDepth If sngACEndWatElev(intMonthCounter) > sngClosSolElev Then sngACEndPondArea(intMonthCounter) = CalcArea(sngACEndWatElev(intMonthCounter)) Else: sngACEndPondArea(intMonthCounter) = CalcArea(sngClosSolElev) End If 'Add on the EDF elevation... If intCurMonth = 1 Or 2 Or 3 Then 243  sngEDFVolume = sngEDFWinter Elself intCurMonth = 4 Or 5 Or 6 Then sngEDFVolume = sngEDF Spring Elself intCurMonth = 7 Or 8 Or 9 Then sngEDFVolume = sngEDFSummer Elself intCurMonth = 10 Or 11 Or 12 Then sngEDFVolume = sngEDFFall End If sngACEndEDFElev(intMonthCounter) = _ CalcElevation(sngACEndTotVol(intMonthCounter) + sngEDFVolume) If sngACEndEDFElev(intMonthCounter) = 0 Then GoTo OverflowError: End If If sngACEndWatElev(intMonthCounter) < sngClosSolElev And intMonthCounter > 1 Then lngACDryTailMonths(intYearCounter) = _ lngACDryTailMonths(intYearCounter) + 1 End If sngACActualFreeboard(intMonthCounter) = sngClosureCrest - sngACEndEDFElev(intMonthCounter) If sngACActualFreeboard(intMonthCounter) <= sngRiskFreeboard _ And sngACEndWatElev(intMonthCounter) > sngClosInvertElev And intMonthCounter > 1 Then lngACLowFreeMonths(intYearCounter) = _ lngACLowFreeMonths(intYearCounter) + 1 lngACSpillMonths(intYearCounter) = _ lngACSpillMonths(intYearCounter) + 1 sngTempFreeboard = sngACAnnFreeboard(intYearCounter) sngACAnnFreeboard(intYearCounter) = sngTempFreeboard _ + sngACActualFreeboard(intMonthCounter) sngACEndWatElev(intMonthCounter) = sngClosInvertElev sngTempVol = sngACEndTotVol(intMonthCounter) sngACEndTotVol(intMonthCounter) = CalcVolume(sngACEndWatElev(intMonthCounter)) sngACSpillVol = sngTempVol - sngACEndTotVol(intMonthCounter) sngACTempSpillVol = sngACAnnSpillVol(intYearCounter) 244  sngACAnnSpillVol(intYearCounter) = sngACTempSpillVol + sngACSpillVol If sngACSpillVol > sngACMaxSpillVol(intYearCounter) Then sngACMaxSpillVol(intYearCounter) = sngACSpillVol End If sngACEndEDFElev(intMonthCounter) = CalcElevation(sngACEndTotVol(intMonthCounter) + sngEDFVolume) If sngACEndWatElev(intMonthCounter) > sngClosSolElev Then sngACEndPondArea(intMonthCounter) = CalcArea(sngACEndWatElev(intMonthCounter)) Else: sngACEndPondArea(intMonthCounter) = CalcArea(sngClosSolElev) End If Elself sngACActualFreeboard(intMonthCounter) <= sngRiskFreeboard _ And sngACEndWatElev(intMonthCounter) < sngClosInvertElev _ And intMonthCounter > 1 Then lngACLowFreeMonths(intYearCounter) = _ lngACLowFreeMonths(intYearCounter) + 1 sngTempFreeboard = sngACAnnFreeboard(intYearCounter) sngACAnnFreeboard(intYearCounter) = sngTempFreeboard _ + sngACActualFreeboard(intMonthCounter) End If Loop 'Balance is complete. 'Sum up the risk output indicators. 'This section refers to freeboard and pond level prior to any emergency spill 'over and above the regular design spill input by the user. intYear = 1 Do Until intYear = intNumClosYears sngAvgACSpillMonths(intYear) = lngACSpillMonths(intYear) /12 sngAvgACLowFreeMonths(intYear) = lngACLowFreeMonths(intYear) /12 sngAvgACDryTailMonths(intYear) = lngACDryTailMonths(intYear) / 12 If sngAvgACSpillMonths(intYear) > 0 Then sngAvgACSpillVol(intYear) = sngACAnnSpillVol(intYear) _ / lngACSpillMonths(intYear) Else: sngAvgACSpillVol(intYear) = 0 End If 245  If sngAvgACLowFreeMonths(intYear) > 0 Then sngAvgACLowFreeHeight(intYear) = sngACAnnFreeboard(intYear) / lngACLowFreeMonths(intYear) Else: sngAvgACLowFreeHeight(intYear) = 0 End If sngAvgACPondDepth(intYear) = sngACAnnPondDepth(intYear) / 12 intYear = intYear + 1 Loop 'Closure Analysis Complete. Error handling and exit code below.  blnClosureRan = True Beep FrmWaitingSign. Visible = False Unload FrmWaitingSign FrmOutputMenu.MousePointer = 1 StrMsg = "Visual Balance has finished computing the water balance " & "for these closure input variables." MsgBox StrMsg, vbOKOnly FrmOutputMenu. Visible = True  ' Error Handling.  CheckError: intNoFile = 31031 If Err = infNoFile Or Err = 3011 Then MsgBox "There is an error in one of your Visual Balance Excel" & _ "data input files. Please check to see that the" & _ " table of data has been 'defined' appropriately within Excel. Please return to the data 246  edit menu. " & _ " The table definition can be found in Excel under Menu: " & _ "Insert, Name, Define).", vbCritical GoTo ProcExit ElseIfErr = OThen GoTo ProcExit Else strMsgBox = "Unexpected error #" & Str(Err) & " occurred: " & Error MsgBox strMsgBox, vbExclamation, vbOKOnly GoTo ProcExit End If ProcExit: Beep FrmWaitingSign.Visible = False Unload FrmWaitingSign Exit Sub ProcError: MsgBox Err.Description Resume ProcExit OverflowError: Unload FrmWaitingSign FrmOutputMenu.MousePointer =1 MsgBox "Due to the overflow error in your reservoir in month # " _ & intMonthCounter & " Visual Balance was unable to complete the " & _ "water balance. Please edit your input files in order to " & _ "proceed.", vbOKOnly Exit Sub End Sub Private Sub mnuRunRiskClosure_Click() If blnVbRan = False Then MsgBox "You should run an average Water & Materials Balance for" & _ "this data prior to running a Closure Risk Analysis, in order to" & _ "set the final solids and dam crest elevations for your impoundment.", vbExclamation GoTo ProcExit: End If 'On Error GoTo CheckError: 247  Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual" & _ "Balance Closure Risk Analysis is running..." FrmWaitingSign. Show StrMsg = "The number of random closure series simulations completed FrmWaitingSign.LblProgress.Caption = StrMsg FrmWaitingSign.Refresh FrmOutpufMenu.MousePointer = vbHourglass 'Counter variables are intialized to zero in case multiple Closure 'Analyses are performed. sngSpillVol = 0 intClearCounter = 1 Do Until intClearCounter = intNumClosYears + 1 lngTotClosSpillMonths(intClearCounter) = 0 sngAvgClosLowFreeMonths(intClearCounter) = 0 lngTotClosLowFreeMonths(intClearCounter) = 0 sngAvgClosDryTailMonths(intClearCounter) = 0 IngTotClosDryTailMonths(intClearCounter) = 0 sngAvgClosSpillMonths(intClearCounter) = 0 sngTotClosSpillVol(intClearCounter) = 0 sngClosSpillProb(intClearCounter) = 0 intClosYearsWithSpill(intClearCounter) = 0 sngClosLowFreeProb(intClearCounter) = 0 intClosYearsWithLowFree(intClearCounter) = 0 sngClosDryTailProb(intClearCounter) = 0 intClosYearsWithDryTail(intClearCounter) = 0 sngTotClosFreeboard(intClearCounter) = 0 sngMaxClosSpillVol(intClearCounter) = 0 sngAvgClosLowFreeHeight(intClearCounter) = 0 sngAvgClosSpillVol(intClearCounter) = 0 sngTempClosSpillVol = 0 intClearSeries = 1 Do Until intClearSeries = intNumClosSeries + 1 lngClosSpillMonths(intClearSeries, intClearCounter) = 0 lngClosDryTailMonths(intClearSeries, intClearCounter) = 0 lngClosLowFreeMonths(intClearSeries, intClearCounter) = 0 sngClosFreeboard(intClearSeries, intClearCounter) = 0 sngClosSpillVol(intClearSeries, intClearCounter) = 0 sngClosPondDepth(intClearSeries, intClearCounter) = 0 248  intClearSeries = intClearSeries + 1 Loop intClearCounter = intClearCounter + 1 Loop intClosureMonths = 12 * intNumClosYears sngClosureCrest = sngEndDamCrestElev(intTotalMonths) sngClosSolElev = sngEndSolElev(intTotalMonths) sngClosSolVol = sngEndSolVol(intTotalMonths) sngClosInvertElev = sngSpillWaylnvertElev(intTotalMonths) intClosSerCounter = 1 If strDependResponse = "True " Then sngSeepOutRate = CalcSeepR(sngClosureCrest) sngBeachArea = CalcBeachA(sngClosureCrest) Else sngSeepOutRate = sngSeepOutRateConstant sngBeachArea = sngBeachAreaConstant End If sngClosMonthSeepOut(intMonthCounter) = sngSeepOutRate * intDaysinMonth  ' START C L O S U R E RISK A N A L Y S I S SIMULATION. While intClosSerCounter < intNumClosSeries + 1 'Re-run water balance with new precip. values. 'Incorporate recognition of low freeboard values, 'spill events, and dry tailings months. intMonthCounter = 0 intCurMonth = 1 intYearCounter = 1 intPackCounter = 0 intPackMonthCounter = 0 While intMonthCounter < intClosureMonths intMonthCounter = intMonthCounter + 1 intPrevMonth = intMonthCounter - 1  249  intCurMonth = intCurMonth + 1 If intCurMonth = 13 Then intYearCounter = intYearCounter + 1 intCurMonth = 1 End If intDaysinMonth = CalcNumDaysInMon(intCurMonth) If intCurMonth = 1 Then sngClosAnnPrecip(intYearCounter) = _ CalcRandomAnnPrecip(sngMeanAnnual, sngStandardDev, _ sngNumYearsRecord) End If 'Generate random precip for each month, based on the ' new random annual values. sngClosPrecip(intMonthCounter) = sngClosAnnPrecip(intYearCounter) _ * sngMonthPercent(intCurMonth) 'Initialize volumes based on previous end-of-month totals. If intMonthCounter = 1 Then sngBegClosTotVol(intMonthCounter) = sngEndTotVol(intTotalMonths) sngBegClosWatElev(intMonthCounter) = sngEndWatElev(intTotalMonths) sngBegClosPondArea(intMonthCounter) = CalcArea(sngBegClosWatElev(intMonthCounter)) Else sngBegClosTotVol(intMonthCounter) = sngEndClosTotVol(intPrevMonth) sngBegClosWatElev(intMonthCounter) = sngEndClosWatElev(intPrevMonth) sngBegClosPondArea(intMonthCounter) = sngEndClosPondArea(intPrevMonth) End If 'Calculate the new random water inflows to the reservoir for each month. sngClosDirPre(intMonthCounter) = (sngClosPrecip(intMonthCounter) _ / 1000) * sngBegClosPondArea(intMonthCounter) * 10000 'Runoff calculations are based on the random precip values. The user enters a value 'for "fraction of precip as snow". Snow begins to accumulate 'according to the "Start snow accumulation month" entered by the user. 'The only runoff during these snow accumulation months would be the direct 'precip that is rain.  250  'The user also enters a "end snow accumulation month", and at this point the snowpack is '"runoff in subsequent months according to the temporal runoff distribution provided by 'the user. 'One complicating factor is that in the start up year, the Closure risk analysis has no accumulated 'snow pack to runoff, so the only runoff will come from direct precip that is not snow. If intCurMonth = intStartPackMonth Then intPackMonthCounter = 1 intPackCounter = intPackCounter + 1 sngSnowPackDepth = sngClosPrecip(intMonthCounter) * sngFracSnow(intCurMonth) If sngFracSnow(intCurMonth) = 1 Then sngClosRunoff(intMonthCounter) = 0 Else: sngClosRunoff(intMonthCounter) = ((sngClosPrecip(intMonthCounter) _ * (1 - sngFracSnow(intCurMonth)) _ - sngRunoffLoss(intCurMonth)) / 1000) _ * (1 - sngFracRunDivert) _ * ((sngCatchArea - sngBegClosPondArea(intMonthCounter)) * 10000) End If intPackMonthCounter = intPackMonthCounter + 1 Elself intPackMonthCounter = 0 Then If sngFracSnow(intCurMonth) = 1 Then sngClosRunoff(intMonthCounter) = 0 Else: sngClosRunoff(intMonthCounter) = ((sngClosPrecip(intMonthCounter) _ * (1 - sngFracSnow(intCurMonth)) _ - sngRunoffLoss(intCurMonth)) / 1000) _ * (1 - sngFracRunDivert) _ * ((sngCatchArea - sngBegClosPondArea(intMonthCounter)) * 10000) End If Elself intPackMonthCounter > 1 And intPackMonthCounter < intTotalPackMonths Then sngSnowPackDepth = sngSnowPackDepth + (sngClosPrecip(intMonthCounter) _ * sngFracSnow(intCurMonth)) If sngFracSnow(intCurMonth) = 1 Then sngClosRunoff(intMonthCounter) = 0 Else: sngClosRunoff(intMonthCounter) = ((sngClosPrecip(intMonthCounter) _ * (1 - sngFracSnow(intCurMonth)) _ - sngRunoffLoss(intCurMonth)) / 1000) _ * (1 - sngFracRunDivert) _ * ((sngCatchArea - sngBegClosPondArea(intMonthCounter)) * 10000) End If intPackMonthCounter = intPackMonthCounter + 1 251  Elself intPackMonthCounter = intTotalPackMonths Then sngTotalPackDepth(intClosSerCounter) = sngSnowPackDepth sngClosRunoff(intMonthCounter) = (1 - sngFracRunDivert) _ * ((sngClosPrecip(intMonthCounter) * (1 - sngFracSnow(intCurMonth)) _ + (sngFracMelt(intCurMonth) * sngTotalPackDepth(intPackCounter)) _ - sngRunoffLoss(intCurMonth)) / 1000) _ * ((sngCatchArea - sngBegClosPondArea(intMonthCounter)) * 10000) intPackMonthCounter = intPackMonthCounter + 1 Elself intPackMonthCounter > intTotalPackMonths Then sngClosRunoff(intMonthCounter) = (1 - sngFracRunDivert) _ * ((sngClosPrecip(intMonthCounter) * (1 - sngFracSnow(intCurMonth)) _ + (sngFracMelt(intCurMonth) * sngTotalPackDepth(intPackCounter)) _ - sngRunoffLoss(intCurMonth)) / 1000) _ * ((sngCatchArea - sngBegClosPondArea(intMonthCounter)) * 10000) intPackMonthCounter = intPackMonthCounter + 1 End If 'Seepage Into Impoundment... sngClosMonthSeepIn(intMonthCounter) = sngSeepInRate * intDaysinMonth 'Calculate the new water loss for each month based on ' the new reservoir surface area. Note that beach area does not change 'because either the beach area is a fixed user-entered constant, 'or is dependant on dam crest elevation which does not change in a 'given month during the risk analysis. sngClosPondEvap(intMonthCounter) = _ (sngPondEvap(intCurMonth) / 1000) _ * (sngBegClosPondArea(intMonthCounter) * 10000) sngClosMonthBeachEvap(intMonthCounter) = (sngBeachEvap(intCurMonth) / 1000) * sngBeachArea 'Sum up the water inflows for the months... sngClosWatln(intMonthCounter) = _ sngClosDirPre(intMonthCounter) _ + sngClosRunoff(intMonthCounter) _ + sngClosMonthSeepIn(intMonthCounter)  252  'Sum up the water losses for.the months... sngClosWatLoss(intMonthCounter) = _ sngClosPondEvap(intMonthCounter) _ + sngClosMonthBeachEvap(intMonthCounter) _ + sngClosMonthSeepOut(intMonthCounter) 'Based on a new volume of water volumes in closure months, 'find the new surface area and elevations at the 'end of the Month. sngEndClosTotVol(intMonthCounter) = _ sngBegClosTotVol(intMonthCounter) _ + sngClosWatln(intMonthCounter) _ - sngClosWatLoss(intMonthCounter) sngEndClosWatElev(intMonthCounter) = _ CalcElevation(sngEndClosTotVol(intMonthCounter)) If sngEndClosWatElev(intMonthCounter) = 0 Then GoTo OverflowError: End If sngEndClosPondArea(intMonthCounter) = _ CalcArea(sngEndClosWatElev(intMonthCounter)) 'Add on the EDF elevation... If intCurMonth = 1 Or 2 Or 3 Then sngEDFVolume = sngEDFWinter Elself intCurMonth = 4 Or 5 Or 6 Then sngEDFVolume = sngEDFSpring Elself intCurMonth = 7 Or 8 Or 9 Then sngEDFVolume = sngEDFSummer Elself intCurMonth = 10 Or 11 Or 12 Then sngEDFVolume = sngEDFFall End If sngEndClosEDFElev(intMonthCounter) = _ CalcElevation(sngEndClosTotVol(intMonthCounter) + sngEDFVolume) If sngEndClosEDFElev(intMonthCounter) = 0 Then GoTo OverflowError: End If  253  sngPondDepth = sngEndClosWatElev(intMonthCounter) _ - sngClosSolElev sngTempPondDepth = sngClosPondDepth(intClosSerCounter, intYearCounter) sngClosPondDepth(intClosSerCounter, intYearCounter) = sngPondDepth _ + sngTempPondDepth 'Sum up the risk output indicators. 'This section refers to freeboard and pond level prior to any emergency spill 'over and above the regular design spill input by the user. If sngEndClosWatElev(intMonthCounter) < sngClosSolElev _ And intMonthCounter > 1 Then lngClosDryTailMonths(intClosSerCounter, intYearCounter) = _ lngClosDryTailMonths(intClosSerCounter, intYearCounter) + 1 End If sngClosActualFreeboard(intMonthCounter) = sngClosureCrest _ - sngEndClosEDFElev(intMonthCounter) If sngClosActualFreeboard(intMonthCounter) <= sngRiskFreeboard _ And sngEndClosWatElev(intMonthCounter) > sngClosInvertElev And intMonthCounter > 1 Then lngClosLowFreeMonths(intClosSerCounter, intYearCounter) = _ lngClosLowFreeMonths(intClosSerCounter, intYearCounter) + 1 lngClosSpillMonths(intClosSerCounter, intYearCounter) = _ lngClosSpillMonths(intClosSerCounter, intYearCounter) + 1 sngTempFreeboard = sngClosFreeboard(intClosSerCounter, intYearCounter) sngClosFreeboard(intClosSerCounter, intYearCounter) = sngTempFreeboard _ + sngClosActualFreeboard(intMonthCounter) sngEndClosWatElev(intMonthCounter) = sngClosInvertElev sngTempVol = sngEndClosTotVol(intMonthCounter) sngEndClosTotVol(intMonthCounter) = CalcVolume(sngEndClosWatElev(intMonthCounter)) sngSpillVol = sngTempVol - sngEndClosTotVol(intMonthCounter) sngTempClosSpillVol = sngClosSpillVol(intClosSerCounter, intYearCounter) sngClosSpillVol(intClosSerCounter, intYearCounter) = sngTempClosSpillVol + sngSpillVol If sngSpillVol > sngMaxClosSpillVol(intYearCounter) Then sngMaxClosSpillVol(intYearCounter) = sngSpillVol End If 254  sngEndClosEDFElev(intMonthCounter) = CalcElevation(sngEndClosTotVol(intMonthCounter) + sngEDFVolume) sngEndClosPondArea(intMonthCounter) = CalcArea(sngEndClosWatElev(intMonthCounter)) Elself sngClosActualFreeboard(intMonthCounter) <= sngRiskFreeboard _ And sngEndClosWatElev(intMonthCounter) < sngClosInvertElev _ And intMonthCounter > 1 Then lngClosLowFreeMonths(intClosSerCounter, intYearCounter) = _ lngClosLowFreeMonths(intClosSerCounter, intYearCounter) + 1 sngTempFreeboard = sngClosFreeboard(intClosSerCounter, intYearCounter) sngClosFreeboard(intClosSerCounter, intYearCounter) = sngTempFreeboard _ + sngClosActualFreeboard(intMonthCounter) End If Wend 'One Closure Series has been completed. Annual stats for the simulation will be 'totaled. Check to see i f the years had spills, low freeboard or whatever, 'in this series. intYear = 1 Do Until intYear = intNumClosYears If lngClosSpillMonths(intClosSerCounter, intYear) > 0 Then intClosYearsWithSpill(intYear) = intClos Years WithSpill(int Year) + 1 End If If lngClosLowFreeMonths(intClosSerCounter, intYear) > 0 Then intClosYearsWithLowFree(intYear) = intClosYearsWithLowFree(intYear) + 1 End If If lngClosDryTailMonths(intClosSerCounter, intYear) > 0 Then intClosYearsWithDryTail(intYear) = intClos Years WithDryTail(intYear) + 1 End If intYear = intYear + 1 Loop FrmWaitingSign.LblRunCounter.Caption = intClosSerCounter FrmWaitingSign.Refresh intClosSerCounter = intClosSerCounter +1 Wend 255  'Simulation is complete. 'Total up the series stats for all the entire simulation. intYear = 0 intSeries = 1 Do Until intYear = intNumClosYears intYear = intYear + 1 intSeries = 1 Do Until intSeries = intNumClosSeries If intSeries = 1 Then lngTotClosSpillMonths(intYear) = lngClosSpillMonths(l, intYear) lngTotClosLowFreeMonths(intYear) = lngClosLowFreeMonths(l, intYear) lngTotClosDryTailMonths(intYear) = lngClosDryTailMonths(l, intYear) sngTotClosSpillVol(intYear) = sngClosSpillVol(l, intYear) sngTotClosFreeboard(intYear) = sngClosFreeboard(l, intYear) sngTotClosPondDepth(intYear) = sngClosPondDepth(l, intYear) Else IngTotClosSpillMonths(intYear) = _ lngTotClosSpillMonths(intYear) + lngClosSpillMonths(intSeries, intYear) lngTotClosLowFreeMonths(intYear) = _ lngTotClosLowFreeMonths(iritYear) + lngClosLowFreeMonths(intSeries, intYear) lngTotClosDryTailMonths(intYear) = _ lngTotClosDryTailMonths(intYear) + lngClosDryTailMonths(intSeries, intYear) sngTotClosSpillVol(intYear) = sngTotClosSpillVol(intYear) + sngClosSpillVol(intSeries, intYear) sngTotClosFreeboard(intYear) = sngTotClosFreeboard(intYear) + sngClosFreeboard(intSeries, intYear) sngTotClosPondDepth(intYear) = sngTotClosPondDepth(intYear) + sngClosPondDepth(intSeries, intYear) End If intSeries = intSeries + 1 Loop Loop intYear = 1 Do Until intYear = intNumClosYears sngAvgClosSpillMonths(intYear) = lngTotClosSpillMonths(intYear) / intNumClosSeries 256  sngAvgClosLowFreeMonths(intYear) = lngTotClosLowFreeMonths(intYear) / intNumClosSeries sngAvgClosDryTailMonths(intYear) = lngTotClosDryTailMonths(intYear) / intNumClosSeries If sngAvgClosSpillMonths(intYear) > 0 Then sngAvgClosSpillVol(intYear) = sngTotClosSpillVol(intYear) / lngTotClosSpillMonths(intYear) Else: sngAvgClosSpillVol(intYear) = 0 End If If sngAvgClosLowFreeMonths(intYear) > 0 Then sngAvgClosLowFreeHeight(intYear) = sngTotClosFreeboard(intYear) / lngTotClosLowFreeMonths(intYear) Else: sngAvgClosLowFreeHeight(intYear) = 0 End If sngAvgClosPondDepth(intYear) = sngTotClosPondDepth(intYear) / (intNumClosSeries * 12) sngClosSpillProb(intYear) = (intClosYearsWithSpill(intYear) / intNumClosSeries) * 100 sngClosLowFreeProb(intYear) = (intClosYearsWithLowFree(intYear) / intNumClosSeries) * 100 sngClosDryTailProb(intYear) = (intClosYearsWithDryTail(intYear) / intNumClosSeries) * 100 intYear = intYear + 1 Loop 'Closure Analysis Complete. Error handling and exit code below. blnRiskClosureRan = True Beep FrmWaitingSign. Visible = False Unload FrmWaitingSign FrmOutputMenu.MousePointer = 1 MsgBox "Visual Balance has finished computing the risk analysis for these closure " & "scenario variables.", vbOKOnly FrmOutputMenu.Visible = True  'Error Handling 257  'MathHandler: ' Dim sngSimSpillMonthsInv As Single ' sngSimSpillMonthsInv = 1 / IngSimSpillMonths ' sngAvgSpillVolume = sngSimSpillVolume * sngSimSpillMonthsInv ' Resume Next CheckError: intNoFile = 31031 'intWrongFormat = 3161 If Err = intNoFile Then MsgBox "Your project directory is missing this file. The generic Visual Balance Excel file will be loaded for you to edit and save in your project directory.", vbOKOnly O L E 1 .CreateLink ("c:\VisualBalance\RiskData.xls") O L E 1 .DoVerb vbOLEOpen 'Elself Err = intWrongFormat Then ' Beep ' StrMsg = "An error has occurred reading the Excel file with your temporal" & _ ' "precipitation data. You must edit your Excel file before " & _ ' "running the risk analysis. Click 'Yes' " & _ ' "if you would you like to load the standard " & _ ' "Visual Balance Excel file for temporal data " & _ ' "and begin again? " & _ ' "Click'No'to return to the Output Menu." ' If MsgBox(StrMsg, vbExclamation + vbYesNo) = vbYes Then FrmRiskData.OLEl .CreateLink ("c:\VisualBalance\RiskData.xls") FrmRiskData.OLEl .DoVerb vbOLEOpen ' Else ' GoTo ProcExit: ' End If Elself Err = 0 Then GoTo ProcExit Else strMsgBox = "Unexpected error #" & Str(Err) & " occurred: " & Error MsgBox strMsgBox, vbExclamation, vbOKOnly End If ProcExit: FrmWaitingSign.Visible = False Unload FrmWaitingSign FrmOutputMenu.MousePointer = 1 FrmOutputMenu. Visible = True Exit Sub 258  ProcError: MsgBox Err.Description Resume ProcExit OverflowError: Unload FrmWaitingSign FrmOutputMenu.MousePointer = 1 MsgBox "Due to the overflow error in your reservoir, Visual Balance was unable to complete the water balance. Please edit your input files in order to proceed.", vbOKOnly Exit Sub End Sub Private Sub mnuRunRisk_Click() If blnVbRan = False Then MsgBox "An Average Visual Balance run must be conducted for " & _ "this data prior to running a risk analysis. The Average V B run will set" & _ "the monthly dam crest elevations from which the performance of the reservoir w i l l " & "will be assessed.", vbExclamation GoTo ProcExit: End If 'On Error GoTo CheckError: Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual" & _ "Balance Risk Analysis is running..." FrmWaitingSign.Show StrMsg = "The number of random series simulations completed is: " FrmWaitingSign.LblProgress.Caption = StrMsg FrmWaitingSign.Refresh FrmOutputMenu.MousePointer = vbHourglass 'Read in risk variables from text file. intFileNumber = FreeFile Open (strpath & "\RiskData.txt") For Input As #intFileNumber Input #intFileNumber, sngMeanAnnual, _ sngStandardDev, intNumSeries, _ sngNumYearsRecord, sngRiskFreeboard, intNumClosSeries, intNumClosYears Close #intFileNumber  259  'Read design dam crest elevations saved from average Balance Run. intMonthCounter = 1 intFileNumber = FreeFile Open (strpath & "\damcrests.txt") For Input As #intFileNumber While intMonthCounter < intTotalMonths Input #intFileNumber, sngEndDamCrestElev(intMonthCounter) intMonthCounter = intMonthCounter + 1 Wend Close #intFileNumber 'Counter variables are intialized to zero in case multiple Risk 'Analyses are performed. intSeriesCounter = 1 sngSpillVol = 0 intClearCounter = 1 Do Until intClearCounter = intTotalYears + 1 lngTotAnnSpillMonths(intClearCounter) = 0 sngAvgLowFreeMonths(intClearCounter) = 0 lngTotAnnLowFreeMonths(intClearCounter) = 0 sngAvgLowPondMonths(intClearCounter) = 0 lngTotAnnLowPondMonths(intClearCounter) = 0 sngAvgDryTailMonths(intClearCounter) = 0 sngAvgPondDepth(intClearCounter) = 0 lngTotAnnDryTailMonths(intClearCounter) = 0 sngAvgSpillMonths(intClearCounter) = 0 sngTotSpillVol(intClearCounter) = 0 sngTotFreshVol(intClearCounter) = 0 sngAnnSpillProb(intClearCounter) = 0 int Years WithSpill(intClearCounter) = 0 sngAnnLowFreeProb(intClearCounter) = 0 intYearsWithLowFree(intClearCounter) = 0 sngAnnLowPondProb(intClearCounter) = 0 int Years WithLowPond(intClearCounter) = 0 sngAnnDryTailProb(intClearCounter) = 0 int Years WithDryTail(intClearCounter) = 0 sngMaxFreshVol(intClearCounter) = 0 sngMaxSpillVol(intClearCounter) = 0 sngTotFreeboard(intClearCounter) = 0 sngAvgLowFreeHeight(intClearCounter) = 0 sngAvgFreshVol(intClearCounter) = 0 260  sngAvgSpillVol(intClearCounter) = 0 sngTempFreshVol = 0 sngFreshVol = 0 sngTempSpillVol = 0 intClearSeries = 1 Do Until intClearSeries = intNumSeries + 1 lngAnnSpillMonths(intClearSeries, intClearCounter) = 0 lngAnnDryTailMonths(intClearSeries, intClearCounter) = 0 lngAnnLowFreeMonths(intClearSeries, intClearCounter) = 0 lngAjinLowPondMonths(intClearSeries, intClearCounter) = 0 sngAnnFreeboard(intClearSeries, intClearCounter) = 0 sngAnnSpillVol(intClearSeries, intClearCounter) = 0 sngAnnFreshVol(intClearSeries, intClearCounter) = 0 sngAnnPondDepth(intClearSeries, intClearCounter) = 0 intClearSeries = intClearSeries + 1 Loop intClearCounter = intClearCounter + 1 Loop  START RISK A N A L Y S I S SIMULATION.  While intSeriesCounter < intNumSeries + 1 'Re-run water balance with new precip. values. 'Incorporate ' i f statements for recognizing low freeboard values, 'spill events, dry tailings, not enough free pond water for reclaim. intMonthCounter = 0 intCurMonth = intStartMonth - 1 intYearAsDateCount = intStartYear intYearCounter = 1 intPackCounter = 0 intPackMonthCounter = 0 While intMonthCounter < intTotalMonths intMonthCounter = intMonthCounter + 1 intPrevMonth = intMonthCounter - 1  261  intCurMonth = intCurMonth + 1 If intCurMonth = 13 Then intYearAsDateCount = intYearAsDateCount + 1 intCurMonth = 1 End If intDaysinMonth = CalcNumDaysInMon(intCurMonth) If intMonthCounter = 1 Or intCurMonth = intStartMonth Then sngPviskAnnPrecip(intYearCounter) = _ CalcRandomAnnPrecip(sngMeanAnnual, sngStandardDev, _ sngNumYearsRecord) End If If intCurMonth = intEndMonth Then intYearCounter = intYearCounter + 1 End If 'Generate random precip for each month, based on the ' new random annual values. sngRiskPrecip(intMonthCounter) = sngRiskAnnPrecip(intYearCounter) _ * sngMonthPercent(intCurMonth) 'Initialize volumes based on previous end-of-month totals. If intYearAsDateCount = intStartYear And intMonthCounter = 1 Then sngBegSolVol(intMonthCounter) = sngStartSolVol sngBegRiskTotVol(intMonthCounter) = sngStartSolVol + sngStartWatVol sngBegRiskWatElev(intMonthCounter) = sngStartWatElev sngBegRiskPondArea(intMonthCounter) = CalcArea(sngStartWatElev) Else sngBegSolVol(intMonthCounter) = sngBegSolVol(intPrevMonth) sngBegRiskTotVol(intMonthCounter) = sngEndRiskTotVol(intPrevMonth) sngBegRiskWatElev(intMonthCounter) = sngEndRiskWatElev(intPrevMonth) sngBegRiskPondArea(intMonthCounter) = sngEndRiskPondArea(intPrevMonth) End If 'Calculate the new random water inflows to the reservoir for each month. sngRiskDirPre(intMonthCounter) = (sngRiskPrecip(intMonthCounter) _ / 1000) * sngBegRiskPondArea(intMonthCounter) * 10000 'Runoff calculations are based on the random precip values. The user enters a value 262  'for "fraction of precip as snow". Snow begins to accumulate 'according to the "Start snow accumulation month" entered by the user. 'The only runoff during these snow accumulation months would be the direct 'precip that is rain. 'The user also enters a "end snow accumulation month", and at this point the snowpack is '"runoff in subsequent months according to the temporal runoff distribution provided by 'the user. 'One complicating factor is that in the start up year, the risk analysis has no accumulated 'snow pack to runoff, so the only runoff will come from direct precip that is not snow.  If intCurMonth = intStartPackMonth Then 'START P A C K I N G SNOW, IF IT SNOWS IN THIS M O N T H ' intPackMonthCounter = 1 intPackCounter = intPackCounter + 1 sngSnowPackDepth = sngRiskPrecip(intMonthCounter) * sngFracSnow(intCurMonth) If sngFracSnow(intCurMonth) = 1 Then sngRiskRunoff(intMonthCounter) = 0 Else: sngRiskRunoff(intMonthCounter) = ((sngRiskPrecip(intMonthCounter) _ * (1 - sngFracSnow(intCurMonth)) _ - sngRunoffLoss(intCurMonth)) / 1000) _ * (1 - sngFracRunDivert) _ * ((sngCatchArea - sngBegRiskPondArea(intMonthCounter)) * 10000) End If intPackMonthCounter = intPackMonthCounter + 1 Elself intPackMonthCounter = 0 Then 'This condition of intPackMonthCounter = 0 only occurs during the first year, 'when the first snowpack has not been built up. If sngFracSnow(intCurMonth) = 1 Then sngRiskRunoff(intMonthCounter) = 0 Else: sngRiskRunoff(intMonthCounter) = ((sngRiskPrecip(intMonthCounter) _ * (1 - sngFracSnow(intCurMonth)) _ - sngRunoffLoss(intCurMonth)) / 1000) _ * (1 - sngFracRunDivert) _ * ((sngCatchArea - sngBegRiskPondArea(intMonthCounter)) * 10000) End If Elself intPackMonthCounter > 1 And intPackMonthCounter < intTotalPackMonths Then 'SNOW IS P A C K I N G HERE. 263  sngSnowPackDepth = sngSnowPackDepth + (sngRiskPrecip(intMonthCounter) * sngFracSnow(intCurMonth)) If sngFracSnow(intCurMonth) = 1 Then sngRiskRunoff(intMonthCounter) = 0 Else: sngRiskRunoff(intMonthCounter) = ((sngRiskPrecip(intMonthCounter) * (1 - sngFracSnow(intCurMonth)) _ - sngRunoffLoss(intCurMonth)) / 1000) _ * (1 - sngFracRunDivert) _ * ((sngCatchArea - sngBegRiskPondArea(intMonthCounter)) * 10000) End If intPackMonthCounter = intPackMonthCounter + 1 Elself intPackMonthCounter = intTotalPackMonths Then 'THIS IS T H E L A S T P A C K M O N T H . sngTotalPackDepth(intSeriesCounter) = sngSnowPackDepth sngRiskRunoff(intMonthCounter) = (1 - sngFracRunDivert) _ * ((sngRiskPrecip(intMonthCounter) * (1 - sngFracSnow(intCurMonth)) _ + (sngFracMelt(intCurMonth) * sngTotalPaclcDepth(intPackCounter)) _ - sngRunoffLoss(intCurMonth)) / 1000) _ * ((sngCatchArea - sngBegRiskPondArea(intMonthCounter)) * 10000) intPackMonthCounter = intPackMonthCounter + 1 Elself intPackMonthCounter > intTotalPackMonths Then ' S N O W P A C K IS R U N N I N G OFF IN THESE MONTHS sngRiskRunoff(intMonthCounter) = (1 - sngFracRunDivert) _ * ((sngRiskPrecip(intMonthCounter) * (1 - sngFracSnow(intCurMonth)) _ + (sngFracMelt(intCurMonth) * sngTotalPackDepth(intPackCounter)) _ - sngRunoffLoss(intCurMonth)) / 1000) _ * ((sngCatchArea - sngBegRiskPondArea(intMonthCounter)) * 10000) intPackMonthCounter = intPackMonthCounter + 1 End If 'Calculate the new pond evaporation for each month based on ' the new reservoir surface area... ' Note that beach evaporation does not change in any given month 'because either the beach area is a fixed user-entered constant, 'or is dependent on dam crest elevation ' which does not change in a given month during the risk analysis. sngRiskPondEvap(intMonthCounter) = _ (sngPondEvap(intCurMonth) / 1000) _ * (sngBegRiskPondArea(intMonthCounter) * 10000) 264  If intMonthCounter = 1 Then sngPviskReclaim(intMonthCounter) = _ sngReclaimRate * 24 * intDaysinMonth Elself intMonthCounter > 1 And sngEndRiskPondDepth(intPrevMonth) _ < sngNeededForReclaim Then sngRiskReclaim(intMonthCounter) = 0 lngAnnLowPondMonths(intSeriesCounter, intYearCounter) = _ lngAnnLowPondMonths(intSeriesCounter, intYearCounter) + 1 sngTempFreshVol = sngAnnFreshVol(intSeriesCounter, intYearCounter) sngFreshVol = sngReclaimRate * 24 * intDaysinMonth sngAnnFreshVol(intSeriesCounter, intYearCounter) = sngTempFreshVol + sngFreshVol If sngFreshVol > sngMaxFreshVol(intYearCounter) Then sngMaxFreshVol(intYearCounter) = sngFreshVol End If Else sngRiskReclaim(intMonthCounter) = _ sngReclaimRate * 24 * intDaysinMonth End If 'Sum up the water inflows for the months... sngRiskWatln(intMonthCounter) = _ sngRiskDirPre(intMonthCounter) _ + sngRiskRunoff(intMonthCounter) _ + sngMonthMineWater(intMonthCounter) _ + sngMonthSlurryWater(intMonthCounter) _ + sngMonthSeepIn(intMonthCounter) _ + sngMonthSeepReturn(intMonthCounter) 'Sum up the water losses for the months... sngRiskWatLoss(intMonthCounter) = _ sngRiskPondEvap(intMonthCounter) _ + sngMonthBeachEvap(intMonthCounter) _ + sngMonthSeepOut(intMonthCounter) _ + sngMonthVoidLoss(intMonthCounter) _ + sngRiskReclaim(intMonthCounter) _ + sngMonthSpill(intMonthCounter) _ + sngMonthWatLossToTail(intMonthCounter) _ + sngMonthWatLossToWR(intMonthCounter)  265  '**Notice that solids inflow and losses do not change from the average 'Visual Balance run. The variables of solids in and tailings loss to 'waste rock voids are persistant from the Visual Balance run. 'Based on a new volume of water and average volume of 'solids in the pond, find the new surface area and elevations at the 'end of the Month. sngEndRiskTotVol(intMonthCounter) = _ sngBegRiskTotVol(intMonthCounter) _ + sngRiskWatln(intMonthCounter) _ + sngMonthSolIn(intMonthCounter) _ - sngRiskWatLoss(intMonthCounter) _ - sngMonthSolLoss(intMonthCounter) sngEndRiskWatElev(intMonthCounter) = _ CalcElevation(sngEndRiskTotVol(intMonthCounter)) If sngEndRiskWatElev(intMonthCounter) = 0 Then GoTo OverflowError: End If sngEndRiskPondArea(intMonthCounter) = _ CalcArea(sngEndRiskWatElev(intMonthCounter)) 'Add on the EDF elevation... If intCurMonth = 1 Or 2 Or 3 Then sngEDFVolume = sngEDFWinter Elself intCurMonth = 4 Or 5 Or 6 Then sngEDFVolume = sngEDF Spring Elself intCurMonth = 7 Or 8 Or 9 Then sngEDFVolume = sngEDFSummer Elself intCurMonth = 10 Or 11 Or 12 Then sngEDFVolume = sngEDFFall End If sngEndRiskEDFElev(intMonthCounter) = _ CalcElevation(sngEndRiskTotVol(intMonthCounter) + sngEDFVolume) If sngEndRiskEDFElev(intMonthCounter) = 0 Then GoTo OverflowError: End If sngEndRiskPondDepth(intMonthCounter) = sngEndRiskWatElev(intMonthCounter) 266  - sngEndSolElev(intMonthCounter) sngTempPondDepth = sngAnnPondDepth(intSeriesCounter, intYearCounter) sngAnnPondDepth(intSeriesCounter, intYearCounter) = _ sngEndRiskPondDepth(intMonthCounter) + sngTempPondDepth 'Sum up the risk output indicators. 'This section refers to freeboard and pond level prior to any emergency spill 'over and above the regular design spill input by the user. If sngEndRiskWatElev(intMonthCounter) < sngEndSolElev(intMonthCounter) _ And intMonthCounter > 1 Then lngAnnDryTailMonths(intSeriesCounter, intYearCounter) = _ lngAnnDryTailMonths(intSeriesCounter, intYearCounter) + 1 End If sngActualFreeboard(intMonthCounter) = sngEndDamCrestElev(intMonthCounter) - sngEndRiskEDFElev(intMonthCounter) If sngActualFreeboard(intMonthCounter) <= sngRiskFreeboard _ And sngEndRiskWatElev(intMonthCounter) > sngSpillWaylnvertElev(intMonthCounter) _ And intMonthCounter > 1 Then lngAnnLowFreeMonths(intSeriesCounter, intYearCounter) = _ lngAnnLowFreeMonths(intSeriesCounter, intYearCounter) + 1 sngTempFreeboard = sngAnnFreeboard(intSeriesCounter, intYearCounter) sngAnnFreeboard(intSeriesCounter, intYearCounter) = sngTempFreeboard _ + sngActualFreeboard(intMonthCounter) lngAnnSpillMonths(intSeriesCounter, intYearCounter) = _ lngAnnSpillMonths(intSeriesCounter, intYearCounter) + 1 sngEndRiskWatElev(intMonthCounter) = sngSpillWaylnvertElev(intMonthCounter) sngTempVol = sngEndRiskTotVol(intMonthCounter) sngEndRiskTotVol(intMonthCounter) = CalcVolume(sngEndRiskWatElev(intMonthCounter)) sngSpillVol = sngTempVol - sngEndRiskTotVol(intMonthCounter) sngEndRiskEDFElev(intMonthCounter) = CalcElevation(sngEndRiskTotVol(intMonthCounter) + sngEDFVolume) sngEndRiskPondArea(intMonthCounter) = CalcArea(sngEndRiskWatElev(intMonthCounter)) 267  sngTempSpillVol = sngAnnSpillVol(intSeriesCounter, intYearCounter) sngAnnSpillVol(intSeriesCounter, intYearCounter) = sngTempSpillVol + sngSpillVol If sngSpillVol > sngMaxSpillVol(intYearCounter) Then sngMaxSpillVol(intYearCounter) = sngSpillVol End If Elself sngActualFreeboard(intMonthCounter) <= sngRiskFreeboard _ And sngEndRiskWatElev(intMonthCounter) < _ sngSpillWaylnvertElev(intMonthCounter) _ And intMonthCounter > 1 Then lngAnnLowFreeMonths(intSeriesCounter, intYearCounter) = _ lngAnnLowFreeMonths(intSeriesCounter, intYearCounter) + 1 sngTempFreeboard = sngAnnFreeboard(intSeriesCounter, intYearCounter) sngAnnFreeboard(intSeriesCounter, intYearCounter) = sngTempFreeboard + sngActualFreeboard(intMonthCounter) End If 'Total up the #-of-month stats for the series (1 to 100 or 1 to 1,000)generated. Wend 'One series has been completed FrmWaitingSign.LblRunCounter.Caption = intSeriesCounter FrmWaitingSign.Refresh 'Check to see i f the years had spills, low freeboard or whatever, 'in this series. intYear = 1 Do Until intYear = intTotalYears If lngAnnSpillMonths(intSeriesCounter, intYear) > 0 Then intYears WithSpill(intYear) = intYearsWithSpill(intYear) + 1 End If If lngAnnLowFreeMonths(intSeriesCounter, intYear) > 0 Then intYears WithLowFree(int Year) = int Years WithLowFree(int Year) + 1 End If If lngAnnLowPondMonths(intSeriesCounter, intYear) > 0 Then 268  int Years WithLowPond(int Year) = int Years WithLowPond(int Year) + 1 End If If lngAnnDryTailMonths(intSeriesCounter, intYear) > 0 Then int Years WithDryTail(int Year) = int Years WithDryTail(int Year) + 1 End If intYear = intYear + 1 Loop intSeriesCounter = intSeriesCounter + 1 Wend 'Now the simulation is done. 'Total up the series stats for all the series generated. intYear = 0 intSeries = 1 Do Until intYear = intTotalYears + 1 intYear = intYear + 1 intSeries = 1 Do Until intSeries = intNumSeries If intSeries = 1 Then lngTotAnnSpillMonths(intYear) = lngAnnSpillMonths(l, intYear) lngTotAnnLowFreeMonths(intYear) = lngAnnLowFreeMonths(l, intYear) lngTotAnnLowPondMonths(intYear) = lngAnnLowPondMonths(l, intYear) lngTotAnnDryTailMonths(intYear) = lngAnnDryTailMonths(l, intYear) sngTotPondDepth(intYear) = sngAnnPondDepth(l, intYear) sngTotSpillVol(intYear) = sngAnnSpillVol(l, intYear) sngTotFreeboard(intYear) = sngAnnFreeboard(l, intYear) sngTotFreshVol(intYear) = sngAnnFreshVol(l, intYear) Else lngTotAnnSpillMonths(intYear) = _ lngTotAnnSpillMonths(intYear) + lngAnnSpillMonths(intSeries, intYear) lngTotAjinLowFreeMonths(intYear) = _ lngTotAnnLowFreeMonths(intYear) + lngAnnLowFreeMonths(intSeries, intYear) lngTotAjinLowPondMonths(intYear) = _ lngTotAjmLowPondMonths(intYear) + lngAnnLowPondMonths(intSeries, intYear) lngTotAnnDryTailMonths(intYear) = _ lngTotAnnDryTailMonths(intYear) + lngAnnDryTailMonths(intSeries, intYear) 269  sngTotPondDepth(intYear) = sngTotPondDepth(intYear) _ + sngAnnPondDepth(intSeries, intYear) sngTotSpillVol(intYear) = sngTotSpillVol(intYear) _ + sngAnnSpillVol(intSeries, intYear) sngTotFreeboard(intYear) = sngTotFreeboard(intYear) _ + sngAnnFreeboard(intSeries, intYear) sngTotFreshVol(intYear) = sngTotFreshVol(intYear) _ + sngAnnFreshVol(intSeries, intYear) End If intSeries = intSeries + 1 Loop Loop intYear = 1 Do Until intYear = intTotalYears sngAvgPondDepth(intYear) = sngTotPondDepth(intYear) / (intNumSeries * 12) sngAvgSpillMonths(intYear) = lngTotAnnSpillMonths(intYear) / intNumSeries sngAvgLowFreeMonths(intYear) = lngTotAnnLowFreeMonths(intYear) / intNumSeries . sngAvgLowPondMonths(intYear) = lngTotAnnLowPondMonths(intYear) / intNumSeries sngAvgDryTailMonths(intYear) = lngTotAnnDryTailMonths(intYear) / intNumSeries If sngAvgSpilllVIonths(intYear) > 0 Then sngAvgSpillVol(intYear) = sngTotSpillVol(intYear) / lngTotAnnSpillMonths(intYear) Else: sngAvgSpillVol(intYear) = 0 End If If sngAvgLowFreeMonths(intYear) > 0 Then sngAvgLowFreeHeight(intYear) = sngTotFreeboard(intYear) / lngTotAnnLowFreeMonths(intYear) Else: sngAvgLowFreeHeight(intYear) = 0 End If If sngAvgLowPondMonths(intYear) > 0 Then sngAvgFreshVol(intYear) = sngTotFreshVol(intYear) / lngTotAnnLowPondiVIonths(intYear) Else: sngAvgFreshVol(intYear) = 0 End If 270  sngAnnSpillProb(intYear) = (intYearsWithSpill(intYear) / intNumSeries) * 100 sngAnnLowFreeProb(intYear) = (intYearsWithLowFree(intYear) / intNumSeries) * 100 sngAnnLowPondProb(intYear) = (intYearsWithLowPond(intYear) / intNumSeries) * 100 sngAnnDryTailProb(intYear) = (intYearsWithDryTail(intYear) / intNumSeries) * 100 intYear = intYear + 1 Loop 'Risk Analysis Complete. Error handling and exit code below. blnRiskRan = True Beep FrmWaitingSign.Visible = False Unload FrmWaitingSign FrmOutputMenu.MousePointer = 1 MsgBox "Visual Balance has finished computing the risk analysis for these input" & "variables.", vbOKOnly FrmOutputMenu.Visible = True  'Error Handling 'MathHandler: ' Dim sngSimSpillMonthsInv As Single ' sngSimSpillMonthsInv = 1 / IngSimSpillMonths ' sngAvgSpillVolume = sngSimSpillVolume * sngSimSpillMonthsInv ' Resume Next CheckError: intNoFile = 31031 'intWrongFormat = 3161 If Err = intNoFile Then MsgBox "Your project directory is missing this file. The generic Visual Balance Excel file will be loaded for you to edit and save in your project directory.", vbOKOnly OLE1 .CreateLink ("c:\VisualBalance\RiskData.xls") O L E 1. Do Verb vbOLEOpen 'Elself Err = intWrongFormat Then 271  ' Beep ' StrMsg = "An error has occurred reading the Excel file with your temporal" & _ ' "precipitation data. You must edit your Excel file before " & _ ' "running the risk analysis. Click 'Yes' " & _ ' "if you would you like to load the standard " & _ ' "Visual Balance Excel file for temporal data " & _ ' "and begin again? " & _ ' "Click 'No' to return to the Output Menu." ' If MsgBox(StrMsg, vbExclamation + vbYesNo) = vbYes Then FrmRiskData.OLEl.CreateLink ("c:\VisualBalance\RiskData.xls") FrmRiskData.OLEl .DoVerb vbOLEOpen ' Else ' GoTo ProcExit: ' End If ElseIfErr = OThen GoTo ProcExit Else strMsgBox = "Unexpected error #" & Str(Err) & " occurred: " & Error MsgBox strMsgBox, vbExclamation, vbOKOnly End If ProcExit: FrmWaitingSign.Visible = False Unload FrmWaitingSign FrmOutputMenu.MousePointer = 1 FrmOutputMenu. Visible = True Exit Sub ProcError: MsgBox Err.Description Resume ProcExit OverflowError: Unload FrmWaitingSign FrmOutputMenu.MousePointer = 1 MsgBox "Due to the overflow error in your reservoir, Visual Balance was unable to complete the water balance. Please edit your input files in order to proceed.", vbOKOnly Exit Sub End Sub Private Sub mnuTableElevExtended_Click()  272  If blnVbRan = False Then MsgBox "You have not run a water & materials balance for this data.", vbExclamation GoTo ProcExit: End If MsgBox "Remember, this was balance run # " & intRunNumber & ". You should save the data in your project directory under that run number.", vblnformation Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual Balance is creating an Excel output file..." FrmWaitingSign.Visible = True MousePointer = vbHourglass FrmWaitingSign.Refresh FrmWaitingSign. Show Dim appWatElev As New Excel.Application Dim wkbWatElev As New Excel. Workbook Dim wksWatElev As New Excel.Worksheet appWatElev. Workbooks.Add appWatElev. Worksheets. Add With appWatElev.Range("Al :FM1 ").Font .Size= 10 .Name = "Arial" .Colorlndex = 1 End With With appWatElev.Range("Al") .ColumnWidth = 29 .Font.Bold = True End With appWatElev.Range("Bl:FMl").Column Width = 12 appWafElev.Rows(3).NumberFormat = "#,##0.0" intRow = 4 While intRow < 26 With appWatElev .Rows(intRow).NumberFormat = "###,###,##0" End With 273  intRow = intRow + 1 Wend intRow = 27 While intRow < 32 With appWatElev .Rows(intRow).NumberFormat = "##,##0.0" End With intRow = intRow + 1 Wend appWatElev.Range("Al").Value = "Site Name: " & strSiteName 'Add Titles to the Columns of the Excel Worksheet appWatElev.Range("A2").Value = "Month" appWatElev.Range("A3").Value = "Time In Years" With appWatElev.Range("A4") .Value = "Water Inflow per Month" .Font.Bold = True End With appWatElev.Range("A5"). Value = "Direct Precipitation" appWatElev.Range("A6").Value = "Runoff appWatElev.Range("A7").Value = "Slurry Water Input" appWatElev.Range("A8").Value = "Mine Water" appWatElev.Range("A9").Value = "Groundwater Seepage" appWatElev.Range("A10").Value = "Seepage or Treated Water Return" appWatElev.Range("Al l").Value = "Monthly Water Inflow" With appWatElev.Range("A12") .Value = "Water Losses per Month" .Font.Bold = True End With appWatElev.Range("A13").Value = "Total Evaporation (Pond & Beach)" appWatElev.Range("A 14").Value = "Reclaim Water Out" appWatElev.Range("A15").Value = "Total Months Reclaim O f f appWatElev.Range("A16").Value = "Seepage Out" appWatElev.Range("A17").Value = "Release Volume" appWatElev:Range("A18").Value = "Water Lost to Voids" appWatElev.Range("A19").Value = "Loss to Embankment" appWatElev.Range("A20").Value = "Monthly Water Losses" With appWatElev.Range("A21") .Value = "End of Month Water Volume" 274  End With With appWatElev.Range("A22") .Value = "Solids Inflow and Losses" .Font.Bold = True End With appWatElev.Range("A23").Value = "Monthly Solids & Voids Inflow appWatElev.Range("A24").Value = "Monthly Tailings Lost to Voids' appWatElev.Range("A25").Value = "Total Sol & Voids Vol." With appWatElev.Range("A26") .Value = "Balance Summary" .Font.Bold = True End With appWatElev.Range("A27").Value appWatElev.Range("A28"). Value appWatElev.Range("A29").Value appWatElev.Range("A30").Value appWatElev.Range("A31").Value  = "Solids Elev." = "Water Elev." = "Free Water Depth" = "EDF Elev." = "Dam Crest Elev."  'Label the second row with units for each field.' appWatElev.Range("B5").Value = "(years)" appWaffilev.Range("B6"). Value = "(m3)" appWatElev.Range("B7").Value = "(m3)" appWatElev.Range("B8"). Value = "(m3)" appWatElev.Range("B9").Value = "(m3)" appWatElev.Range("B 10"). Value = "(m3)" appWatElev.Range("Bl 1"). Value = "(m3)" appWatElev.Range("B 13"). Value = "(m3)" appWatElev.Range("B14").Value = "(m3)" appWatElev.Range("B15").Value = "" appWatElev.Range("B 16"). Value = "(m3)" appWatElev.Range("B17").Value = "(m3)" appWatElev.Range("B18")Value = "(m3)" appWatElev.Range("B 19"). Value = "(m3)" appWatElev.Range("B20").Value = "(m3)" appWatElev.Range("B21").Value = "(m3)" appWatElev.Range("B23"). Value = "(m3)" appWatElev.Range("B24").Value = "(m3)" appWatElev.Range("B25"). Value = "(m3)"  275  appWatElev.Range("B27"). Value appWatElev.Range("B28").Value appWatElev.Range("B29").Value appWatElev.Range("B30").Value appWatElev.Range("B31").Value  = = = = =  "(m.a.s.l.)" "(m.a.s.l.)" "(m)" "(m.a.s.l.)" "(m.a.s.l.)"  'Label the the month record/rows.' strStartMonthLabel = FindMonthLabel(intStartMonth) appWatElev.Range("C2").Value = strStartMonthLabel intCol = 2 intMonthCounter = 1 intYearCounter = 1 Do Until intMonthCounter > intTotalMonths intCol = intCol + 1 intMonthCounter = intMonthCounter + 1 intCurMonth = (intMonthCounter + (intStartMonth - ((intYearCounter - 1) * 12) If intCurMonth = 12 Then intYearCounter = intYearCounter + 1 End If strMonthLabel = FindMonthLabel(intCurMonth) appWatElev.Cells(2, intCol).Value = strMonthLabel Loop 'Put the elevations in the appropriate columns. intCol = 2 intMonthCounter = 0 intYearCounter = 1 Do Until intMonthCounter > intTotalMonths intCol = intCol + 1 intMonthCounter = intMonthCounter + 1 intYearCounter = intMonthCounter / 12 appWatElev.Cells(3, intCol).Value = _ intYearCounter appWatElev.Cells(5, intCol).Value - _ sngMonthDirPre(intMonthCounter) appWatElev.Cells(6, intCol).Value = _ sngMonthRunoff(intMonthCounter) 276  appWatElev.Cells(7, intCol).Value = _ sngMonthSlurryWater(intMonthCounter) appWatElev.Cells(8, intCol).Value = _ sngMonthMineWater(intMonthCounter) appWatElev.Cells(9, intCol).Value = _ sngMonthS eepIn(intMonthCounter) appWatElev.Cells( 10, intCol).Value = _ sngMonthSeepReturn(intMonthCounter) appWatElev.Cells(l 1, intCol).Value = _ sngMonthWatln(intMonthCounter) appWatElev.Cells(13, intCol).Value = _ sngMonthPondEvap(intMonthCounter) _ + sngMont]iBeacliEvap(intMonthCounter) appWatElev.Cells(14, intCol).Value = _ sngMonthReclaim(intMonthCounter) appWatElev.Cells(15, intCol).Value = _ intReclaimOffCount(intlVlonthCounter) appWatElev.Cells(16, intCol).Value = _ sngMonthSeepOut(intMonthCounter) appWatElev.Cells(17, intCol).Value = _ sngMonthSpill(intMonthCounter) appWatElev.Cells(18, intCol).Value = _ sngMonthWatLossToTail(intMonthCounter) _ + sngMonthWatLossToWR(intlVlorithCounter) appWatElev.Cells(19, intCol).Value = _ sngMontKDamLoss(intMonthCounter) appWatElev.Cells(20, intCol).Value = _ sngMonthWatLoss(intMonthCounter) appWatElev.Cells(21, intCol).Value = _ sngEndWatVol(intMonthCounter) appWatElev.Cells(23, intCol).Value = _ sngMonthSolIn(intMonthCounter) _ + sngMonthVoidLoss(intMonthCounter) appWatElev.Cells(24, intCol).Value = _ sngMonthTailLossToWR(intMonthCounter) appWatElev.Cells(25, intCol).Value = _ sngEndSolVol(intMonthCounter) appWatElev.Cells(27, intCol).Value = _ sngEndSolElev(intMonthCounter) appWatElev.Cells(28, intCol).Value = _ 277  sngEndWatElev(intMonthCounter) appWatElev.Cells(29, intCol).Value = _ sngEndPondDepth(intMonthCounter) appWatElev.Cells(30, intCol).Value = _ sngEndEDFElev(intMonthCounter) appWatElev.Cells(31, intCol).Value sngEndDamCrestElev(intMonthCounter) Loop Unload FrmWaitingSign appWatElev.Visible = True MousePointer = 1 ProcExit: Exit Sub End Sub Private Sub mnuViewInputs_Click() Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual Balance is creating an Excel data file..." FrmWaitingSign.Visible = True MousePointer = vbHourglass FrmWaitingSign.Refresh FrmWaitingSign. Show Dim applnputs As New Excel.Application Dim wkblnputs As New Excel.Workbook Dim wkslnputs As New Excel.Worksheet applnputs. Workbooks .Add applnputs. Worksheets .Add With appInputs.Range("Al :G1 ").Font .Size = 11 .Name = "Arial" .Colorlndex = 1 End With app!nputs.Range("Al").Font.Bold = True 278  With appInputs.Range("Al") .Column Width = 32 End With With appInputs.Range("Bl :G1") .ColumnWidth = 15 End With appInputs.Range("Bl:B4").NumberFormat = "###,###" appInputs.Range("B5:B6").NumberFormat = "####" appInputs.Range("B7:B48").NumberFormat = "###,##0.0#" appInputs.Range("B49").NumberFormat = "###,###,##0" 'Add Titles to the Columns of the Excel Worksheet appInputs.Range("Al").Value = "Balance Input Data " app!nputs.Range("Bl").Value = "Run Number " & intRunNumber appInputs.Range("A2").Value  "Project Name: " & strSiteName  appInputs.Range(" A3 ").Value appInputs.Range("B3"). Value  "Start Up Month" intStartMonth  applnputs. Range(" A4") .Value appInputs.Range("B4").Value  "Month of Closure" intEndMonth  appInputs.Range("A5").Value appInputs.Range("B5"). Value  "Start Up Year" intStartYear  appInputs.Range("A6").Value appInputs.Range("B6").Value  "Year of Closure" intEndYear  With appInputs.Range("A7") .Value = "Production Information" .Font.Bold = True End With appInputs.Range("A8").Value = "Tonnes Mined Per Day" applnputs.Range("B8").Value = sngTonnesMined appInputs.Range("A9").Value = "Tonnes Concentrate Per Day" appInputs.Range("B9").Value = sngTonnesMetal appInputs.Range("A10").Value = "Tonnes Waste Rock" 279  appInputs.Range("B10").Value = sngTonnesRock applnputs.Range("AH").Value = "Tonnes Tailings Per Day" appInputs.Range("BH").Value = sngTonnesTail With appInputs.Range("A12") .Value = "Waste Rock Information" .Font.Bold = True End With appInputs.Range("A13").Value = "Bulk Density" appInputs.Range("B 13"). Value = sngBulkDRock appInputs.Range("A14").Value = "Void Ratio" appInputs.Range("B14").Value = sngVoidRRock With appInputs.Range("A15") .Value = "Tailings Information" .Font.Bold = True End With appInputs.Range("A16").Value = "Degree of Saturation" appInputs.Range("B16").Value = sngDegSatTail applnputs.Range("A17").Value = "Slurry Fraction as Water" appInputs.Range("B17").Value = sngFrac Water applnputs.Range("A18").Value = "Coarse Fraction Cycloned Out" applnputs.Range("B 18"). Value = sngFracCyclone appInputs.Range("A19").Value = "Dry Density" appInputs.Range("B 19"). Value = sngDryDTail appInputs.Range("A20").Value = "In Situ Void Ratio" applnputs.Range("B20").Value = sngVoidRTail With appInputs.Range("A22") .Value = "Reservoir Information" .Font.Bold = True End With appInputs.Range("A23").Value = "Reservoir Name" . appInputs.Range("B23"). Value = strResName 280  appInputs.Range("A24").Value = "Reservoir Catchment Area" appInputs.Range("B24").Value = sngCatchArea appInputs.Range("A25"). Value = "Start Up Water Elevation" appInputs.Range("B25"). Value = sngStartWatElev appInputs.Range("A26").Value appInputs.Range("B26").Value  "Start Up Solids Elevation" sngStartTailElev  appInputs.Range("A27").Value appInputs.Range("B27").Value  "Start Up Reservoir Surface Area" sngStartSurfArea  appInputs.Range("A28").Value = "Start Up Water Volume" appInputs.Range("B28"). Value = sngStartWatVol appInputs.Range("A29").Value = "Start Up Solids Volume" appInputs.Range("B29").Value = sngStartSolVol applnputs. Range (" A3 0"). Value = "Seepage Rate In (m3/day)" appInputs.Range("B30"). Value = sngSeepInRate With appInputs.Range(" A31") .Value = "Operation Data" .Font.Bold = True End With appInputs.Range("A32").Value = "Reclaim Rate (m3/hr)" appInputs.Range("B32").Value = sngReclaimRate appInputs.Range("A33").Value = "Pond Depth Required for Reclaim (m)" appInputs.Range("B33").Value = sngNeededForReclaim appInputs.Range("A34").Value = "Slurry Input Rate (m3/hr)" appInputs.Range("B34").Value = sngSlurryWatlnRate appInputs.Range("A35").Value = "Mine Water Input Rate (m3/hr)" appInputs.Range("B35").Value = sngMineWatlnRate appInputs.Range("A36").Value = "Fraction of Waste Rock to Res." appInputs.Range("B36").Value = sngFrac WRIn appInputs.Range("A37").Value = "Fraction Runoff Diverted" 281  appInputs.Range("B37").Value = sngFracRunDivert appInputs.Range("A38").Value = "Seepage Return Rate (m3/day)" appInputs.Range("B38").Value = sngSeepReturnRate With appInputs.Range("A39") .Value = "Dam Design Information" .Font.Bold = True End With appInputs.Range("A40").Value = "Maximum Dam Lift Height (m)" appInputs.Range("B40").Value = sngMaxLift appInputs.Range("A41").Value = "# Rows in Volume-Elevation" appInputs.Range("B41").Value = intVESRows appInputs.Range("A42").Value = "Freeboard Period One (m)" appInputs.Range("B42"). Value = sngFreeBoardl appInputs.Range("A43").Value = "Freeboard Period Two (m)" appInputs.Range("B43").Value = sngFreeBoard2 appInputs.Range("A44").Value = "EDF Volume (m3)" appInputs.Range("B44").Value = sngEDFVolume appInputs.Range("A45").Value = "Dam Elevation Dependant Data File?" With appInputs.Range("B45") .Value = strDependResponse End With appInputs.Range("A46").Value = "Number of Rows in Data File" If strDependResponse = "True " Then appInputs.Range("B46").Value = intDamRows Else: appInputs.Range("B46").Value = "Not Appl." End If appInputs.Range("A47").Value = "Constant Seepage Out (m3/hr)" appInputs.Range("B47").Value = sngSeepOutRateConstant appInputs.Range("A48").Value = "Constant Beach Area (m2)" appInputs.Range("B48").Value = sngBeachAreaConstant appInputs.Range("A49").Value = "Constant Volume Loss to Dam (m3)" 282  appInputs.Range("B49").Value = sngDamLossConstant Unload FrmWaitingSign applnputs.Visible = True MousePointer = 1 ProcExit: Exit Sub End Sub Private Sub mnuViewRiskInputs_Click() If blnRiskRan = False Then MsgBox "You have not run a risk analysis for this data. Please do so prior to viewing input data or results.", vbExclamation GoTo ProcExit: End If Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual Balance is creating an Excel data file..." FrmWaitingSign. Visible = True MousePointer = vbHourglass FrmWaitingSign.Refresh FrmWaitingSign.Show Dim appRisklnputs As New Excel.Application Dim wkbRisklnputs As New Excel.Workbook Dim wksRisklnputs As New Excel.Worksheet appRisklnputs. Workbooks. Add appRisklnputs. Worksheets. Add With appRiskInputs.Range(" A l ").Font .Size = 11 .Name = "Arial" .Colorlndex = 1 .Bold = True End With  283  appRiskInputs.Range("Al").Font.Bold = True With appRiskInputs.Range("Al") .ColumnWidth = 35 End With With appRiskInputs.Range("B 1 :G1") .ColumnWidth = 15 End With appRiskInputs.Range("Bl:B500").NumberFormat = "###,##0.00" A d d Titles to the Columns of the Excel Worksheet appRisklnputs.Range Al").Value = "Risk Analysis Parameters" appRisklnputs.Range Bl").Value = "RunNumber: " & intRunNumber appRisklnputs.Range A2").Value = "Site Name: " & strSiteName appRisklnputs.Range appRisklnputs. Range appRisklnputs. Range appRisklnputs. Range appRisklnputs.Range appRisklnputs.Range appRisklnputs.Range appRisklnputs.Range appRisklnputs. Range appRisklnputs.Range' appRisklnputs.Range appRisklnputs.Range appRisklnputs.Range appRisklnputs.Range appRisklnputs. Range  A3").Value = "Mean Annual Precipitation" A4").Value = "Standard Deviation" A5").Value = "Number of Years of record" A6").Value = "Freeboard Required above EDF" B3").Value = sngMeanAnnual B4").Value = sngStandardDev B5").Value = sngNumYearsRecord B6").Value = sngRiskFreeboard A8").Value = "Operation Parameters" A9").Value = "Number of Years in Operation Series" A10").Value = "Operation Series in Simulation" All").Value = "Number of Months in Simulation" 'B9").Value = sglTotalYears B10").Value = intNumSeries B11").Value = intNumSeries * intTotalMonths  1  Unload FrmWaitingSign appRisklnputs.Visible = True MousePointer = 1 ProcExit: Exit Sub 284  End Sub  Private Sub ReadMe_Click() Load FrmReadMe FrmReadMe. Show End Sub Private Sub StagingCurve_Click(Index As Integer) On Error GoTo CheckError If blnVbRan = False Then MsgBox "You should run a water & materials balance for this data prior to running a risk analysis.", vbExclamation GoTo ProcExit: End If Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual Balance is creating output graph file... FrmWaitingSign. Visible = True FrmWaitingSign.Show FrmWaitingSign.Refresh MousePointer = vbHourglass 'If FrmMainMenu.txtClickExisting.Text = "No" Then 'blnlsNewProject = True 'strpath = "c:\" & FrmNewFile.TxtNewDir.Text 'Else 'blnlsNewProject = False 'strpath = FrmExistingFile.DirProject 'End If Dim appStaging As Object Dim wksStagingData As Object Dim wkbStaging As Excel.Workbook Set wkbStaging = GetObject("c:\VisualBalance\StagingCurve.xls") Set appStaging = wkbStaging.Application Set wksStagingData = wkbStaging.Worksheets("StagingData") 'Label the the month record/Columns.' strStartMonthLabel = FindMonthLabel(intStartMonth) wksStagingData.Cells(2, 3).Value = strStartMonthLabel 285  intColumn = 2 intMonthCounter = 1 intYearCounter = 1 Do Until intMonthCounter > intTotalMonths intColumn = intColumn + 1 intMonthCounter = intMonthCounter + 1 intCurMonth = (intMonthCounter + (intStartMonth - 1)) _ - ((intYearCounter - 1) * 12) If intCurMonth = 12 Then intYearCounter = intYearCounter + 1 End If strMonthLabel = FindMonthLabel(intCurMonth) wksStagingData.Cells(3, intColumn).Value = strMonthLabel Loop  'Fill the time in years into the second row. intColumn = 2 intMonthCounter = 0 Do Until intMonthCounter > intTotalMonths intMonthCounter = intMonthCounter + 1 intYearCounter = intMonthCounter /12 wksStagingData.Cells(2, intColumn).Value = _ intYearCounter intColumn = intColumn + 1 Loop  'Put the End of the month water volume in the 13th row. intColumn = 2 intMonthCounter = 0 Do Until intMonthCounter > intTotalMonths intMonthCounter = intMonthCounter + 1 wksStagingData.Cells(13, intColumn).Value = _ sngEndTotVol(intMonthCounter) intColumn = intColumn + 1 Loop 'Put the End of the month solids elevation in the fourth column. 'Put the End of the month water elevation in the fifth column. 'Put the End of the month dam crest elevation in the sixth column. intColumn = 2 286  intMonthCounter = 0 Do Until intMonthCounter > intTotalMonths intMonthCounter = intMonthCounter + 1 wksStagingData.Cells(4, intColumn).Value = _ sngEndSolElev(intMonthCounter) wksStagingData.Cells(5, intColumn).Value = _ sngEndWatElev(intMonthCounter) wksStagingData.Cells(6, intColumn).Value = _ sngEndEDFElev(intMonthCounter) wksStagingData.Cells(10, intColumn).Value = _ sngEndDamCrestElev(intMonthCounter) intColumn = intColumn + 1 Loop Unload FrmWaitingSign MousePointer = 1 strFile = "StagingCurve" & intRunNumber & ".xls" wkbStaging.SaveAs (strpath & strFile) OLE1.Class = "Excel.Sheet" ' Set class name. O L E 1 .OLEType Alio wed = vbOLELinked OLEl.CreateLink (strpath & strFile) OLEl.DoVerb vbOLEOpen CheckError:  ProcExit: Exit Sub End Sub Private Sub GraphWater_Click(Index As Integer) MsgBox "This option is not available." & vbOKOnly End Sub Private Sub ReturntoMain_Click(Index As Integer) Unload Me Unload FrmExistingFile Unload FrmNewFile 287  Load FrmMainMenu FrmMainMenu. Show End Sub Private Sub mnuRunVisualBalance_Click() intSpillCount = 0 If blnVbRan = True Then intRunNumber = intRunNumber + 1 End If 'On Error GoTo CheckError: Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual Balance is runnin FrmWaitingSign.LblProgress.Caption = "This is balance run number... FrmWaitingSign.LblRunCounter = intRunNumber FrmWaitingSign. Visible = True FrmWaitingSign. Show FrmWaitingSign.Refresh FrmOutputMenu.MousePointer = vbHourglass 'First, the program should check that a file exists with 'all the basic data else an error appears saying invalid 'filename or insufficient data. 'Starting with the initial water elevation for a given 'start month and start year, the sum_total accumulation 'for that month would be calculated and the resulting 'water elevation estimated. 'Open the hydrological Excel data file as an A D O 'recordset and save the data to specific variables to 'use in computation. Dim mydb As Object Dim my Table As Recordset Set mydb = DBEngine.OpenDatabase(strpath & "\HydroData.xls", dbDriverNoPrompt, False, "Excel 8.0") Set my Table = mydb.OpenRecordset("Hydro") myTable.MoveFirst 288  intRowCounter = 1 While intRowCounter < 13 sngAvgPrecip(intRowCounter) = my Table.Fields(O) sngMonthPercent(intRowCounter) = myTable.Fields(l) sngFracSnow(intRowCounter) = myTable.Fields(2) sngFracMelt(intRowCounter) = myTable.Fields(3) sngRunoffLoss(intRowCounter) = my Table.Fields(4) snglntensity(intRowCounter) = my Table.Fields(5) sngPondEvap(intRowCounter) = myTable.Fields(6) sngBeachEvap(intRowCounter) = my Table.Fields(7) my Table. Mo veNext intRowCounter = intRowCounter + 1 Wend 'Open the Operating Days Excel data file as an A D O 'recordset and save the data to specific variables to 'use in computation. Dim Daysdb As Object Dim DaysTable As Recordset Set Daysdb = DBEngine.OpenDatabase(strpath & "\OperatingDays.xls' dbDriverNoPrompt, False, "Excel 8.0") Set DaysTable = Daysdb.OpenRecordset("Days") Day sTable. Mo veFirst intRowCounter = 1 While intRowCounter < 13 intOperDaysinMonth(intRowCounter) = DaysTable.Fields(2) DaysTable.MoveNext intRowCounter = intRowCounter + 1 Wend intOperDaysPerYear = DaysTable.Fields(l) 'Open the Spill rate per month excel file. Dim Spilldb As Object Dim SpillTable As Recordset Set Spilldb = DBEngine.OpenDatabase(strpath & "\SpillVolumes.xls", dbDriverNoPrompt, False, "Excel 8.0") Set SpillTable = Spilldb.OpenRecordset("Spill") SpillTable.MoveFirst 289  intRowCounter = 1 While intRowCounter < 13 sngSpillPerMonth(intRowCounter) = SpillTable.Fields(l) SpillTable.MoveNext intRowCounter = intRowCounter + 1 Wend sngSpillPerYear = SpillTable.Fields(l) intTotalYears = intEndYear - intStartYear 'Open the Annually Varying production and material depostion rates file i f 'necessary values. If strAnnVary = "True " Then Dim Proddb As Object Dim ProdTable As Recordset Set Proddb = DBEngine.OpenDatabase(strpath & "\Production.xls", _ dbDriverNoPrompt, False, "Excel 8.0") Set ProdTable = Proddb.OpenRecordset("Production") ProdTable.MoveFirst intRowCounter = 1 While intRowCounter < intTotalYears sngAnnMined(intRowCounter) = ProdTable.Fields(l) sngAnnTail(intRowCounter) = ProdTable.Fields(2) sngAnnRock(intRowCounter) = ProdTable.Fields(3) ProdTable.MoveNext intRowCounter = intRowCounter + 1 Wend End If  W A T E R A N D M A T E R I A L B A L A N C E CODE Calculate the water and mass balance for each month up to the total number of months of operation. intMonthCounter = 0 intCurMonth = intStartMonth - 1 intYearCounter = 0 290  Do Until intMonthCounter = intTotalMonths intMonthCounter = intMonthCounter + 1 intCurMonth = intCurMonth + 1 If intCurMonth = 13 Then intCurMonth = 1 End If If intCurMonth = intStartMonth Then intYearCounter = intYearCounter + 1 End If intPrevMonth = intMonthCounter - 1 intDaysinMonth = CalcNumDaysInMon(intCurMonth) If intMonthCounter = 1 Then sngBegWatElev(intMonthCounter) = sngStartWatElev sngBegWatVol(intMonthCounter) = sngStartWatVol sngBegSolVol(intMonthCounter) = sngStartSolVol sngBegTotVol(intMonthCounter) = sngStartWatVol + sngStartSolVol sngBegPondArea(intMonthCounter) = sngStartSurfArea Else sngBegTotVol(intMonthCounter) = sngEndTotVol(intPrevMonth) sngBegWatElev(intMonthCounter) = sngEndWatElev(intPrevMonth) sngBegSolVol(intMonthCounter) = sngEndSolVol(intPrevMonth) sngBegPondArea(intMonthCounter) = sngEndPondArea(intPrevMonth) End If 'Calculate the water inflows to the reservoir for each month. sngMonthDirPre(intMonthCounter) = sngAvgPrecip(intCurMonth) _ / 1000 * sngBegPondArea(intMonthCounter) * 10000 sngMonthRunoff(intMonthCounter) = (snglntensity(intCurMonth) / 1000) _ * ((sngCatchArea - sngBegPondArea(intMonthCounter)) * 10000) * (1 sngFracRunDivert) sngMonthMineWater(intMonthCounter) = sngMineWatlnRate * 24 * intDaysinMonth sngMonthSlurryWater(intMonthCounter) = sngSlurryWatlnRate * 24 * intDaysinMonth sngMonthSeepIn(intMonthCounter) = sngSeepInRate * intDaysinMonth sngMonthSeepReturn(intMonthCounter) = sngSeepReturnRate * intDaysinMonth 291  'Calculate the water loss for each month... '1. Evaporation sngMonthPondEvap(intMonthCounter) = _ (sngPondEvap(intCurMonth) / 1000) _ * (sngBegPondArea(intMonthCounter) * 10000) '2. Reclaim Water If intMonthCounter = 1 Then sngMonthReclaim(intMonthCounter) = _ sngReclaimRate * 24 * intDaysinMonth intReclaimOffCount(intMonthCounter) = 0 Elself intMonthCounter > 1 And sngEndPondDepth(intPrevMonth) < sngNeededForReclaim Then sngMonthReclaim(intMonthCounter) = 0 intReclaimOffCount(intMonthCounter) = intReclaimOffCount(intPrevMonth) + 1 Elself intMonthCounter > 1 And sngEndPondDepth(intPrevMonth) > sngNeededForReclaim Then sngMonthReclaim(intMonthCounter) = _ sngReclaimRate * 24 * intDaysinMonth intReclaimOffCount(intMonthCounter) = intReclaimOffCount(intPrevMonth) End If '3. Release Volume sngMonthSpill(intMonthCounter) = sngSpillPerMonth(intCurMonth) '4. Volume loss to the dam, beach evaporation and dam seepage 'from either the constant, user-entered values or the dam elevation dependant 'values entered in an Excel spreadsheet. If strDependResponse = "True " Then If intMonthCounter = 1 Then sngDamLoss = 0 sngSeepOutRate = 0 sngBeachArea = 0 Else sngDamLoss = CalcDamL(sngEndDamCrestElev(intPrevMonth)) sngSeepOutRate = CalcSeepR(sngEndDamCrestElev(intPrevMonth)) sngBeachArea = CalcBeachA(sngEndDamCrestElev(intPrevMonth)) End If 292  Else sngDamLoss = sngDamLossConstant sngSeepOutRate = sngSeepOutRateConstant sngBeachArea = sngBeachAreaConstant End If sngMonthSeepOut(intMonthCounter) = sngSeepOutRate * intDaysinMonth sngMonthBeachEvap(intMonthCounter) = (sngBeachEvap(intCurMonth) / 1000) _ * sngBeachArea If intMonthCounter = 1 Then sngMonthDamLoss(intMonthCounter) = Else If sngMonthDamLoss(intMonthCounter) sngMonthDamLoss(intMonthCounter) Else sngMonthDamLoss(intMonthCounter) sngMonthDamLoss(intPrevMonth) End If End If  sngDamLoss = sngMonthDamLoss(intPrevMonth) Then = sngMonthDamLoss(intPrevMonth) = sngDamLoss -  '5. Water loss due to retention in Waste rock and tailings voids. 'First need to calculate the solids inflow volume for each month, 'the volume of water lost to solids voids... If strAnnVary = "True " Then sngMonthTailVolIn(intMonthCounter) = (sngAnnTail(intYearCounter) / sngDryDTail) * intOperDaysinMonth(intCurMonth) * (1 - sngFracCyclone) sngMonthWRVolIn(intMonthCounter) = (sngFracWRIn * sngFracWRsub _ * sngAnnRock(intYearCounter) * intOperDaysinMonth(intCurMonth)) _ / sngBulkDRock sngMonthWatLossToTail(intMonthCounter) = sngMonthTailVolIn(intMonthCounter) _ * (sngVoidRTail / (1 + sngVoidRTail)) * sngDegSatTail sngMonthWatLossToWR(intMonthCounter) = (1 - sngFracWRVoidsTail) _ * (sngMonthWRVolIn(intMonthCounter) * (sngVoidRRock / (1 + sngVoidRRock))) Elself strAnnVary = "False" Then  293  sngMonthTailVolIn(intiVlonthCounter) = ((sngTonnesTail _ * intOperDaysinMonth(intCurMonth)) / sngDryDTail) * (1 - sngFracCyclone) If sngFrac WRIn > 0 Then sngMonthWRVolIn(intMonthCounter) = (sngFrac WRIn * sngFrac WRsub _ * sngTonnesRock * intOperDaysinMonth(intCurMonth)) _ / sngBulkDRock Else sngMonthWRVolIn(intMonthCounter) = 0 End If sngMonthWatLossToTail(intMonthCounter) = (sngTonnesTail _ * intOperDaysinMonth(intCurMonth) * sngVoidRTail _ * (1 - sngFracCyclone) * sngDegSatTail) / (sngSpecGravTail) sngMonthWatLossToWR(intMonthCounter) = (1 - sngFrac WRVoidsTail) _ * snglVlonthWRVolIn(intMonthCounter) * (sngVoidRRock / (1 + sngVoidRRock)) End If 'Calculate Losses of Solids Volume.. ' 1. Calculate the loss of tailings solids to the W R voids. sngMonthTailLossToWR(intMonthCounter) = sngFrac WRVoidsTail _ * (sngMonthWRVolIn(intMonthCounter) * (sngVoidRRock / (1 + sngVoidRRock)))  'Sum up the water inflows for the month... sngMonthWatln(intMonthCounter) = _ sngMonthDirPre(intMonthCounter) _ + sngMonthRunoff(intMonthCounter) _ + sngMonthMineWater(intMonthCounter) _ + sngMonthSlurryWater(intMonthCounter) _ + sngMonthSeepIn(intMonthCounter) _ + sngMonthSeepReturn(intMonthCounter) 'Sum up the solids inflow for the months... sngMonthSolIn(intMonthCounter) = sngMonthTailVolIn(intMonthCounter) _ + sngMonthWRVolIn(intMonthCounter) 'Sum up the water and solids losses for the months...  294  sngMonthWatLoss(intMonthCounter) = _ sngMonthPondEvap(intMonthCounter) _ . + sngMonthBeachEvap(intMonthCounter) _ + sngMonthSeepOut(intMonthCounter) _ + sngMonthWatLossToTail(intMonthCounter) _ + sngMonthWatLossToWR(intMonthCounter) _ + sngMonthReclaim(intMonthCounter) _ + sngMonthSpill(intMonthCounter) _ + sngMonthDamLoss(intMonthCounter) 'Sum the loss of solids for the month... sngMonthSolLoss(intMonthCounter) = sngMonthTailLossToWR(intMonthCounter) 'Based on a new volume of solids and water in the pond, 'find the new surface area and water elevation at the 'end of the Start Up Month. sngEndTotVol(intMonthCounter) = _ sngBegTotVol(intMonthCounter) _ + sngMonthWatln(intMonthCounter) _ + sngMonthSolIn(intMonthCounter) _ - sngMonthWatLoss(intMonthCounter) _ - sngMonthSolLoss(intMonthCounter) If intMonthCounter > 1 Then sngEndSolVol(intMonthCounter) = _ sngEndSolVol(intPrevMonth) + sngMonthSolIn(intMonthCounter) - _ sngMonthSolLoss(intMonthCounter) Else sngEndSolVol(intMonthCounter) = sngMonthSolIn(intMonthCounter) - _ sngMonthSolLoss(intMonthCounter) + sngStartSolVol End If sngEndSolElev(intMonthCounter) = CalcElevation(sngEndSolVol(intMonthCounter)) If sngEndSolElev(intMonthCounter) = 0 Then GoTo OverflowError: End If If intMonthCounter > 1 Then sngEndWatVol(intMonthCounter) = _ sngEndWatVol(intPrevMonth) + sngMonthWatln(intMonthCounter) - _ sngMonthWatLoss(intMonthCounter) 295  Else sngEndWatVol(intMonthCounter) = sngMonthWatln(intMonthCounter) - _ sngMonthWatLoss(intMonthCounter) + sngStartWatVol End If sngEndWatElev(intMonthCounter) = _ CalcElevation(sngEndTotVol(intMonthCounter)) If sngEndWatElev(intMonthCounter) = 0 Then GoTo OverflowError: End If sngEndPondDepth(intMonthCounter) = sngEndWatElev(intMonthCounter) _ - sngEndSolElev(intMonthCounter) sngEndPondArea(intMonthCounter) = CalcArea(sngEndWatElev(intMonthCounter)) 'Add on the EDF elevation... If intCurMonth = 1 Or 2 Or 3 Then sngEDFVolume = sngEDFWinter Elself intCurMonth = 4 Or 5 Or 6 Then sngEDFVolume = sngEDFSpring Elself intCurMonth = 7 Or 8 Or 9 Then sngEDFVolume = sngEDFSummer Elself intCurMonth = 10 Or 11 Or 12 Then sngEDFVolume = sngEDFFall End If sngEndEDFElev(intMonthCounter) = _ CalcElevation(sngEndTotVol(intMonthCounter) + sngEDFVolume) If sngEndEDFElev(intMonthCounter) = 0 Then GoTo OverflowError: End If 'Add on the minimum design freeboard to the EDF elevation... If intYearCounter > intFreeBoardl Year2 Then sngDesignFreeboard = sngFreeBoard2 Else sngDesignFreeboard = sngFreeBoardl End If sngEndDamCrestElev(intMonthCounter) = _ 296  sngEndEDFElev(intMonthCounter) + sngDesignFreeboard 'Check to see i f the monthly dam raise exceeds the specified maximum dam raise. 'If the raise exceeds the max. raise, then the new dam crest elevation is set 'equal to the previous months elevation + max. dam lift. A spill is triggered 'to lower the EDF elevation to the required level to provide adequate freeboard. If sngEndDamCrestElev(intMonthCounter) < sngStarterDamElev Then sngEndDamCrestElev(intMonthCounter) = sngStarterDamElev End If If intMonthCounter > 1 Then If ((sngEndDamCrestElev(intMonthCounter) - sngEndDamCrestElev(intPrevMonth)) > sngMaxLift) Then intSpillCount = intSpillCount + 1 sngEndDamCrestElev(intMonthCounter) = sngEndDamCrestElev(intPrevMonth) _ + sngMaxLift sngTempWatElev = sngEndWatElev(intMonthCounter) sngEndWatElev(intMonthCounter) = sngEndDamCrestElev(intMonthCounter) _ - sngDesignFreeboard sngDesignSpillVol(intMonthCounter) = sngEndTotVol(intMonthCounter) _ - sngEndWatVol(intMonthCounter) sngEndWatVol(intMonthCounter) = CalcVolume(sngEndWatElev(intMonthCounter)) End If End If sngSpillWaylnvertElev(intMonthCounter) = _ sngEndDamCrestElev(intMonthCounter) - sngSpillWaylnvert Loop  L A S T L Y , A N N U A L TOTALS FOR E A C H Y E A R OF OPERATION C A N B E C A L C U L A T E D B A S E D O N THE M O N T H L Y TOTALS A B O V E . T H E FIRST A N D L A S T Y E A R S OF OPERATION M A Y CONTAIN LESS T H A N 12 M O N T H S A N D MUST BE COMPUTED SEPARATELY. 'Sum up the inflows over the total number of years of operation. Dim sngTotalYears As Single intYearCounter = 1 297  sngTotal Years = intTotalMonths /12 While intYearCounter < sngTotalYears sngAnnDirPrecip(intYearCounter) = sngMonthDirPre(l) + _ sngMonthDirPre(2) + sngMonthDirPre(3) + _ sngMonthDirPre(4) + sngMonthDirPre(5) + _ sngMonthDirPre(6) + sngMonthDirPre(7) + _ sngMonthDirPre(8) + sngMonthDirPre(9) + _ sngMonthDirPre(lO) + sngMonthDirPre(l 1) + _ sngMonthDirPre(12) sngAnnRunoff(intYearCounter) = sngMonthRunoff(l) + _ sngMonthRunoff(2) + sngMonthRunoff(3) + sngMonthRunoff(4) + _ sngMonthRunoff(5) + sngMonthRunoff(6) + sngMonthRunoff(7) + _ sngMonthRunoff(8) + sngMonthRunoff(9) + sngMonthRunoff(10) + sngMonthRunoff(l 1) + sngMonthRunoff(12) sngAnnMineWater(intYearCounter) = sngMonthMineWater(l) + _ sngMonthMineWater(2) + sngMonthMineWater(3) + _ sngMonthMineWater(4) + sngMonthMineWater(5) + _ sngMonthMineWater(6) + sngMonthMineWater(7) + _ sngMonthMineWater(8) + sngMonthMineWater(9) + _ sngMonthMineWater(lO) + sngMonthMine Water (11) + _ sngMonthMine Water( 12) sngAnnTailingsWater(intYearCounter) = sngMonthS lurry Water(l) + sngMonthS lurry Water(2) + sngMonthSlurry Water (2) + _ sngMonthS lurry Water(2) + sngMonthSlurryWater(3) + _ sngMonthS lurry Water(4) + sngMonthSlurryWater(5) + _ sngMonthS lurry Water(6) + sngMonthSlurry Water(7) + _ sngMonthSlurryWater(8) + sngMonthSlurry Water(9) + _ sngMonthSlurry Water( 10) + sngMonthSlurry Water(l 1) + _ sngMonthS lurry Water( 12) sngAnnSeepIn(intYearCounter) = sngMonthSeepIn(l) + _ sngMonthSeepIn(2) + sngMonthSeepIn(3) + sngMonthSeepIn(4) + _ sngMonthSeepIn(5) + sngMonthSeepIn(6) + sngMonthSeepIn(7) + _ sngMonthSeepIn(8) + sngMonthSeepIn(9) + sngMonthS eepln( 10) + sngMonthS eepln(l 1) + sngMonthSeepIn(12) intYearCounter = intYearCounter + 1 Wend  298  'Sum up the Annual outflows intYearCounter = 1 While intYearCounter < 2 sngArLnEvap(intYearCounter) = sngPondEvap(l) + _ sngPondEvap(2) + sngPondEvap(3) + sngPondEvap(4) + sngPondEvap(5) + sngPondEvap(6) + sngPondEvap(7) + sngPondEvap(8) + sngPondEvap(9) + sngPondEvap(lO) + sngPondEvap(l 1) + sngPondEvap(12) '(Add Beach Evap). sngAnnReclaim(intYearCounter) = sngMonthReclaim(l) + _ sngMonthReclaim(2) + sngMonthReclaim(3) + sngMonthReclaim(4) + sngMonthReclaim(5) + _ sngMonthReclaim(6) + sngMonthReclaim(7) + sngMonthReclaim(8) + sngMonthReclaim(9) + _ sngMonthReclaim(lO) + sngMonthReclaim(l 1) + sngMonthReclaim(12) intYearCounter = intYearCounter + 1 Wend 'Losses = sngAnnPondEvap(l) + sngAnnBeachEvap(l) sngAnnReclaim(l) 'Save design dam crest elevations for future risk analysis. intFileNumber = FreeFile Open (strpath & "\damcrests.txt") For Output As #intFileNumber intMonthCounter = 1 While intMonthCounter < intTotalMonths Write #intFileNumber, sngEndDamCrestElev(intMonthCounter) intMonthCounter = intMonthCounter + 1 Wend Close #infFileNumber 'Balance is complete. blnVbRan = True Beep FrmWaitingSign.Visible = False Unload FrmWaitingSign 299  FrmOutputMenu.MousePointer = 1 StrMsg = "Visual Balance has finished computing the water balance " & _ "for these input variables. Please note that the mine reclaim was turned off in " & _ intReclaimOffCount(intTotalMonths) & " months out of the entire water balance, which indued " & _ intTotalMonths & " months total. Due to the maximum dam crest lift height per month of " &_ sngMaxLift Sc." metres, spill was required in " & intSpillCount & " months." MsgBox StrMsg, vbOKOnly FrmOutputMenu.Visible = True  ' Error Handling.  CheckError: intNoFile = 31031 If Err = intNoFile Or Err = 3011 Then MsgBox "There is an error in one of your Visual Balance Excel" & _ "data input files. Please check to see that the" & _ " table of data has been 'defined' appropriately within Excel. Please return to the data edit menu. " & _ " The table definition can be found in Excel under Menu: " & _ "Insert, Name, Define).", vbCritical GoTo ProcExit Elself Err = 0 Then GoTo ProcExit Else strMsgBox = "Unexpected error #" & Str(Err) & " occurred: " & Error MsgBox strMsgBox, vbExclamation, vbOKOnly GoTo ProcExit End If 1  ProcExit: Beep FrmWaitingSign.Visible = False Unload FrmWaitingSign 300  Exit Sub ProcError: MsgBox Err.Description Resume ProcExit OverflowError: Unload FrmWaitingSign FrmOutputMenu.MousePointer = 1 MsgBox "Due to the overflow error in your reservoir in month # " _ & intMonthCounter & " Visual Balance was unable to complete the "water balance. Please edit your input files in order to " & _ "proceed.", vbOKOnly Exit Sub End Sub Private Sub mnuTableElevConcise_Click(Index As Integer) If blnVbRan = False Then MsgBox "You have not run a water & materials balance for this" & _ "data.", vbExclamation GoTo ProcExit: End If MsgBox "Remember, this was balance run # " & intRunNumber & "." & "You should save the data in your project directory under that" & _ "run number.", vblnformation Load FrmWaitingSign FrmWaitingSign.LblRunMessage.Caption = "Visual Balance is " & _ "creating an Excel output file..." FrmWaitingSign.Visible = True MousePointer = vbHourglass FrmWaitingSign.Refresh FrmWaitingSign. Show Dim appElevConcise As New Excel.Application Dim wkbElevConcise As New Excel.Workbook Dim wksElevConcise As New Excel.Worksheet appElevConcise.Workbooks.Add appElevConcise. Worksheets. Add 301  With appElevConcise.Range("Al :G1 ").Font .Bold = True .Size =11 .Name = "Arial" .Colorlndex = 1 End With With appElevConcise.Range(" A l :B 1") .ColumnWidth = 15 End With appElevConcise.Range("Cl").Column Width = 20 With appElevConcise.Range("Dl :G1") .ColumnWidth = 15 End With appElevConcise.Range("Bl:B500").NumberFormat = "0.00" appElevConcise.Range("Cl :C500").NumberFormat = "###,###,###" appElevConcise.Range("Dl:G500").NumberFormat = "###,##0.0#" appElevConcise.Range("Al").Value = "Site Name: " & strSiteName appElevConcise.Range("A2").Value = "Run Number: " & intRunNumber A d d Titles to the Columns of the Excel Worksheet appElevConcise.Range(" A3"). Value = "Month" appElevConcise.Range("B3").Value = "Time In Years" appElevConcise.Range("C3").Value = "Total Solids, Water " appElevConcise.Range("C4").Value = "and Voids Volume" appElevConcise.Range("D3"). Value = "Solids" appElevConcise.Range("D4").Value = "Elevation" appElevConcise.Range("E3"). Value = "Water" appElevConcise.Range("E4").Value = "Elevation" appElevConcise.Range("F3").Value = "EDF Elev." appElevConcise.Range("G3").Value = "Dam Crest" appElevConcise.Range("G4").Value = "Elevation" 'Label the second row with units for each field.' appElevConcise.Range("B5").Value = "(years)" appElevConcise.Range("C5").Value = "(m3)" appElevConcise.Range("D5").Value = "(m.a.s.l.)" appElevConcise.Range("E5").Value = "(m.a.s.l.)" 302  appElevConcise.Range("F5").Value = "(m.a.s.l.)" appElevConcise.Range("G5").Value = "(m.a.s.l.)"  'Label the the month record/rows.' strStartMonthLabel = FindMonthLabel(intStartMonth) appElevConcise.Range("A5").Value = strStartMonthLabel intRow = 5 intMonthCounter = 0 intYearCounter = 1 Do Until intMonthCounter > intTotalMonths intRow = intRow + 1 intMonthCounter = intMonthCounter + 1 intCurMonth = (intMonthCounter + (intStartMonth - 1)) _ - ((intYearCounter - 1) * 12) If intCurMonth = 12 Then intYearCounter = intYearCounter + 1 End If strMonthLabel = FindMonthLabel(intCurMonth) appElevConcise.Cells(intRow, l).Value = strMonthLabel Loop 'Put the elevations in the appropriate columns. intRow = 5 intMonthCounter = 0 intYearCounter = 1 Do Until intMonthCounter > intTotalMonths intRow = intRow + 1 intMonthCounter = intMonthCounter + 1 intYearCounter = intMonthCounter /12 appElevConcise.Cells(intRow, 2).Value = _ intYearCounter appElevConcise.Cells(intRow, 3).Value = _ sngEndTotVol(intMonthCounter) appElevConcise.Cells(intRow, 4).Value = _ sngEndSolElev(intMonthCounter) appElevConcise.Cells(intRow, 5).Value = _ sngEndWatElev(intMonthCounter) appElevConcise.Cells(intRow, 6).Value = _ sngEndEDFElev(intMonthCounter) 303  appElevConcise.Cells(intRow, 7).Value = _ sngEndDamCrestElev(intMonthCounter) Loop Unload FrmWaitingSign appElevConcise.Visible = True MousePointer = 1 ProcExit: Exit Sub End Sub Private Sub TableWaterQuality_Click(Index As Integer) Set objWatQualFile = CreateObject("Excel.Application") objWatQualFile. Visible = True obj WatQualFile. Workbooks. Add 'Format the header cells and column width. With objWatQualFile.Range("Al :Dl").Font .Bold = True .Size = 11 .Name = "Arial" .Colorlndex = 1 End With 'Add Titles to the Columns of the Excel Worksheet objWatQualFile.Range("Al").Value = "Month" objWatQualFile.Range("Bl").Value = "Concentration in Pond" 'Label the second row with units for each field.' objWatQualFile.Range("B2").Value = "(mg/L)" 'Label the the month record/rows.' strStartMonthLabel = FindMonthLabel(intStartMonth) objWatQualFile.Range("A3").Value = strStartMonthLabel intRow = 3 intMonthCounter = 1 304  intCurMonth = intStartMonth intYearCounter = 1 Do Until intMonthCounter = intTotalMonths intRow = intRow + 1 intMonthCounter = intMonthCounter + 1 intCurMonth = (intMonthCounter + (intStartMonth - 1)) _ - ((intYearCounter - 1) * 12) If intCurMonth = 12 Then intYearCounter = intYearCounter + 1 End If strMonthLabel = FindMonthLabel(intCurMonth) objWatQualFile.Cells(intRow, 1). Value = strMonthLabel Loop 'ObjElevConciseFile.Range("Al:Fl").Number.Number.Decimal objWatQualFile.Range("Al:Fl").ColumnWidth = 15 End Sub  305  'Calculation Modules - Code Option Explicit Dim strResName, strResAbbr, strDependResponse As String Dim sngCatchArea, sngStartWatElev, sngStartTailElev, _ sngStartSurfArea, sngStartWatVol, sngStartSolVol, _ sngSeepReturnRate, sngFrac WRIn, _ sngNeededForReclaim, sngReclaimRate, _ sngSlurryWatlnRate, sngMineWatlnRate, _ sngSeepInRate, sngMaxWatElev, sngMinWatElev, _ sngFracRunDivert, sngSeepOutRate, sngDamLossConstant, _ sngBeachAreaConstant As Single Dim intDamRows, intVESRows, intFileNumber As Integer Public cstA_0, cstA_l, cstB_0, cstB_l, sngP, _ sngZ, sngXp, fncGl, fncG2, fncG3, _ fncG4, sngTp As Single Public blnRiskRun, blnCalcElevOnce, blnCalcPondOnce, _ blnCalcVolumeOnce, blnCalcDamDependersOnce As Boolean Dim strProjectDirectory As String * 25 Dim strpath, strWhereSaved As String Dim sngDL(l To 26), sngBA(l To 26), sngSR(l To 26) As Single 'Global Variables Global strSiteName, strSiteDescription As String Global intNU, intNumReservoirs, intTrialCalc As Integer  'Volume-Elevation-Area Calculation variables. Dim sngVol, sngElev, snglncrement, sngA3, sngAl As Single ' C A D File Variables Dim sngStartElev(l To 40), sngEndElev(l To 40), _ sngIncVolume(l To 40), sngCumVolume(l To 40), _ sngSurfaceArea(l To 40) As Single  Public Function CalcNumDaysInMon(intM) As Integer 306  Dim intDInM As Integer 'Decide how many days are in each month. If intM = 4 Or 6 Or 9 Or 11 Then intDInM = 30 ElseIfintM = 2Then intDInM = 28 Else intDInM = 31 End If CalcNumDaysInMon = intDInM End Function Public Function CalcDamL(sngElev) On Error GoTo CheckError If blnCalcDamDependersOnce = False Then Dim Damdb As Object Dim DamTable As Recordset Dim intRowCounter, intCounter As Integer Dim strpath, strWhereSaved, blnlsNewProject As String If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If 'Open the reservoir data file and read to variables. intFileNumber = FreeFile Open (strpath & "\reservoir.txt") For Input As #intFileNumber Input #intFileNumber, strResName, strResAbbr, _ sngCatchArea, sngStartWatElev, sngStartTailElev, _ sngStartSurfArea, sngStartWatVol, sngStartSolVol, _ sngSeepReturnRate, sngFracWRIn, _ sngNeededForReclaim, sngReclaimRate, _ sngSlurryWatlnRate, sngMineWatlnRate, _ sngSeepInRate, sngMaxWatElev, sngMinWatElev, _ sngFracRunDivert, intDamRows, _ 307  sngSeepOutRate, sngDamLossConstant, sngBeachAreaConstant, _ intVESRows, strDependResponse Close #intFileNumber Set Damdb = DBEngine.OpenDatabase(strpath & "\DamInfo.xls", dbDriverNoPrompt, False, "Excel 8.0") Set DamTable = Damdb.OpenRecordset("DamInfo") DamTable.MoveFirst intRowCounter = 0 While intRowCounter < intDamRows intRowCounter = intRowCounter + 1 sngStartElev(intRowCounter) = DamTable.Fields(O) sngEndElev(intRowCounter) = DamTable.Fields(l) sngDL(intRowCounter) = DamTable.Fields(2) sngBA(intRowCounter) = DamTable.Fields(3) sngSR(intRowCounter) = DamTable.Fields(4) DamTable. Mo veNext Wend End If blnCalcDamDependersOnce = True ' S topReadingExcel: intCounter = 1 If sngElev > sngEndElev(intVESRows) Then Beep MsgBox "Total reservoir capacity has been exceeded! Volume of solids and/or water is greater than the largest volume entered for your reservoir geometry data. Please edit necessary volume-elevation data files.", vbExclamation GoTo ExitFunc: Else Do Until sngElev < sngEndElev(intCounter) intCounter = intCounter + 1 Loop If intCounter = 1 Then sngA3 = 0 CalcDamL = sngDL(intCounter) Else sngA3 = sngEndElev(intCounter) - sngEndElev(intCounter - 1) If sngDL(intCounter) = sngDL(intCounter - 1) Then 308  CalcDamL = sngDL(intCounter) Else CalcDamL = (sngEndElev(intCounter) - _ ((sngDL(intCounter) - sngElev) / _ (sngDL(intCounter) - sngDL(intCounter - 1))) * sngA3) End If End If End If CheckError: If Err .Number = 11 Or Err = 9 Then CalcDamL = sngDL(intCounter) Resume Next ElseIfErr = 94Then 'GoTo StopReadingExcel: ElseIfErr = OThen GoTo ExitFunc Else MsgBox "Unexpected Error # " & Err & Err.Description End If ExitFunc: End Function Public Function CalcSeepR(sngElev) On Error GoTo CheckError: If blnCalcDamDependersOnce = False Then Dim Damdb As Object Dim DamTable As Recordset Dim intRowCounter, intCounter As Integer Dim strpath, strWhereSaved, blnlsNewProject As String If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else blnlsNewProject = False 309  strpath = FrmExistingFile.DirProject End If 'Open the reservoir data file and read to variables. intFileNumber = FreeFile Open (strpath & "\reservoir.txt") For Input As #intFileNumber Input #intFileNumber, strResName, strResAbbr, _ sngCatchArea, sngStartWatElev, sngStartTailElev, _ sngStartSurfArea, sngStartWatVol, sngStartSolVol, _ sngSeepReturnRate, sngFrac WRIn, _ sngNeededForReclaim, sngReclaimRate, _ sngSlurryWatlnRate, sngMineWatlnRate, _ sngSeepInRate, sngMaxWatElev, sngMinWatElev, _ sngFracRunDivert, intDamRows, _ sngSeepOutRate, sngDamLossConstant, sngBeachAreaConstant, _ intVESRows, strDependResponse Close #intFileNumber Set Damdb = DBEngine.OpenDatabase(strpath & "\DamInfo.xls", dbDriverNoPrompt, False, "Excel 8.0") Set DamTable = Damdb.OpenRecordset("DamInfo") DamTable.MoveFirst intRowCounter = 0 While intRowCounter < intDamRows intRowCounter = intRowCounter + 1 sngStartElev(intRowCounter) = DamTable. Fields(O) sngEndElev(intRowCounter) = DamTable.Fields(l) sngDL(intRowCounter) = DamTable.Fields(2) sngBA(intRowCounter) = DamTable.Fields(3) sngSR(intRowCounter) = DamTable.Fields(4) DamTable.MoveNext Wend End If StopReadingExcel: blnCalcDamDependersOnce = True intCounter = 1 If sngElev > sngEndElev(intDamRows) Then Beep MsgBox "Total reservoir capacity has been exceeded! Volume of solids and/or water is 310  greater than the largest volume entered for your reservoir geometry data. Please edit necessary volume-elevation data files.", vbExclamation GoTo ExitFunc: Else Do Until sngElev < sngEndElev(intCounter) intCounter = intCounter + 1 Loop If intCounter = 1 Then sngA3 = 0 CalcSeepR = sngSR(intCounter) Else sngA3 = sngEndElev(intCounter) - sngEndElev(intCounter - 1) If sngSR(intCounter) = sngSR(intCounter - 1) Then CalcSeepR = sngSR(intCounter) Exit Function Else CalcSeepR = (sngEndElev(intCounter) - ((sngSR(intCounter) - sngElev) / (sngSR(intCounter) - sngSR(intCounter - 1))) * sngA3) End If End If End If CheckError: If Err .Number = 11 Then CalcSeepR = sngSR(intCounter) Resume Next ElseIfErr = 94Then GoTo StopReadingExcel ElseIfErr = OThen GoTo ExitFunc Else MsgBox "Unexpected Error # " & Err & Err.Description End If ExitFunc: End Function Public Function CalcBeachA(sngElev)  311  On Error GoTo CheckError If blnCalcDamDependersOnce = False Then Dim Damdb As Object Dim DamTable As Recordset Dim intRowCounter, intCounter As Integer Dim strpath, strWhereSaved, blnlsNewProject As String If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxfNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If 'Open the reservoir data file and read to variables. intFileNumber = FreeFile Open (strpath & "\reservoir.txt") For Input As #intFileNumber Input #intFileNumber, strResName, strResAbbr, _ sngCatchArea, sngStartWatElev, sngStartTailElev, _ sngStartSurfArea, sngStartWatVol, sngStartSolVol, _ sngSeepReturnRate, sngFracWRIn, _ sngNeededForReclaim, sngReclaimRate, _ sngSlurryWatlnRate, sngMineWatlnRate, _ sngSeepInRate, sngMaxWatElev, sngMinWatElev, _ sngFracRunDivert, intDamRows, _ sngSeepOutRate, sngDamLossConstant, sngBeachAreaConstant, _ intVESRows, strDependResponse Close #infFileNumber Set Damdb = DBEngine.OpenDatabase(strpath & "\DamInfo.xls", dbDriverNoPrompt, False, "Excel 8.0") Set DamTable = Damdb.OpenRecordset("DamInfo") DamTable.MoveFirst intRowCounter = 0 While intRowCounter < intDamRows intRowCounter = intRowCounter + 1 sngStartElev(intRowCounter) = DamTable.Fields(O) 312  sngEndElev(intRowCounter) = DamTable.Fields(l) sngDL(intRowCounter) = DamTable.Fields(2) sngBA(intRowCounter) = DamTable.Fields(3) sngSR(intRowCounter) = DamTable.Fields(4) DamTable. MoveNext Wend End If StopReadingExcel: blnCalcDamDependersOnce = True intCounter = 1 If sngElev > sngEndElev(intDamRows) Then Beep MsgBox "Total reservoir capacity has been exceeded! Volume of solids and/or water greater than the largest volume entered for your reservoir geometry data. Please edit necessary volume-elevation data files.", vbExclamation GoTo ExitFunc: Else Do Until sngElev < sngEndElev(intCounter) intCounter = intCounter + 1 Loop If intCounter = 1 Then sngA3 = 0 CalcBeachA = sngBA(intCounter) Else sngA3 = sngEndElev(intCounter) - sngEndElev(intCounter - 1) If sngDL(intCounter) = sngDL(intCounter - 1) Then CalcBeachA = sngBA(intCounter) Exit Function Else CalcBeachA = (sngEndElev(intCounter) - ((sngBA(intCounter) - sngElev) / (sngBA(intCounter) - sngBA(intCounter - 1))) * sngA3) Exit Function End If End If End If CheckError: If Err .Number = 11 Then 313  CalcBeachA = sngBA(intCounter) Resume Next ElseIfErr = 94Then GoTo StopReadingExcel ElseIfErr = OThen GoTo ExitFunc Else MsgBox "Unexpected Error # " & Err & Err.Description End If ExitFunc: End Function  Public Function CalcElevation(sngVol) 'On Error GoTo FuncError If blnCalcElevOnce = False Then 'Open the Volume-Elevation-Surface Area C A D Excel data 'file as an A D O recordset and save the data to specific 'variables to use in computation. Dim CADdb As Object Dim CADTable As Recordset Dim intRowCounter, intCounter As Integer Dim strpath, strWhereSaved, blnlsNewProject As String If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If 'Open the reservoir data file and read to variables. intFileNumber = FreeFile  314  Open (strpath & "\reservoir.txt") For Input As #intFileNumber Input #intFileNumber, strResName, strResAbbr, _ sngCatchArea, sngStartWatElev, sngStartTailElev, _ sngStartSurfArea, sngStartWatVol, sngStartSolVol, _ sngSeepReturnRate, sngFrac WRIn, _ sngNeededForReclaim, sngReclaimRate, _ sngSlurryWatlnRate, sngMineWatlnRate, _ sngSeepInRate, sngMaxWatElev, sngMinWatElev, _ sngFracRunDivert, intDamRows, _ sngSeepOutRate, sngDamLossConstant, sngBeachAreaConstant, _ intVESRows, strDependResponse Close #intFileNumber Set CADdb = DBEngine.OpenDatabase(strpath & "Wolume.xls", dbDriverNoPrompt, False, "Excel 8.0") Set CADTable = CADdb.OpenRecordset("ResVolume") CADTable.MoveFirst intRowCounter = 1 sngStartElev(intRowCounter) = CADTable.Fields(O) sngEndElev(intRowCounter) = CADTable.Fields(l) snglncVolume(intRowCounter) = CADTable. Fields(2) sngCumVolume(intRowCounter) = CADTable.Fields(3) sngSurfaceArea(intRowCounter) = CADTable. Fields(4) While intRowCounter < intVESRows CADTable.MoveNext intRowCounter = intRowCounter + 1 sngStartElev(intRowCounter) = CADTable.Fields(O) sngEndElev(intRowCounter) = CADTable.Fields(l) snglncVolume(intRowCounter) = CADTable.Fields(2) sngCumVolume(intRowCounter) = CADTable.Fields(3) sngSurfaceArea(intRowCounter) = CADTable.Fields(4) Wend blnCalcElevOnce = True End If intCounter = 1 If sngVol > sngCumVolume(intVESRows) Then If blnRiskRun = True Then Else Beep MsgBox "Total reservoir capacity has been exceeded! Volume of solids and/or water 315  is greater than the largest volume entered for your reservoir geometry data. Please edit necessary volume-elevation data files.", vbExclamation GoTo OverflowError: End If Else Do Until sngVol < sngCumVolume(intCounter) intCounter = intCounter + 1 Loop If intCounter = 1 Then snglncrement = 0 CalcElevation = sngStartElev(intCounter) Else snglncrement = sngEndElev(intCounter) - sngEndElev(intCounter - 1) CalcElevation = Round((sngEndElev(intCounter) _ - ((sngCumVolume(intCounter) - sngVol) _ / (sngCumVolume(intCounter) - sngCumVolume(intCounter - 1))) _ * snglncrement), 3) End If End If FuncExit: Exit Function FuncError: Beep MsgBox Err.Description Resume FuncExit OverflowError: CalcElevation = 0 End Function Public Function CalcArea(sngElev) 'Open the Volume-Elevation-Surface Area C A D Excel data 'file as an A D O recordset and save the data to specific 'variables to use in computation. If blnCalcPondOnce = False Then Dim CADdb As Object 316  Dim CADTable As Recordset Dim intRowCounter, intCounter As Integer Dim strpath, strWhereSaved As String If FrmMainMenu.txtClickExisting.Text = "No" Then strpath = "c:\" & FrmNewFile.TxtNewDir.Text Else strpath = FrmExistingFile.DirProject End If 'Open the reservoir data file and read to variables. intFileNumber = FreeFile Open (strpath & "\reservoir.txt") For Input As #intFileNumber Input #intFileNumber, strResName, strResAbbr, _ sngCatchArea, sngStartWatElev, sngStartTailElev, _ sngStartSurfArea, sngStartWatVol, sngStartSolVol, _ sngSeepReturnRate, sngFrac WRIn, _ sngNeededForReclaim, sngReclaimRate, _ sngSlurry WatlnRate, sngMineWatlnRate, _ sngSeepInRate, sngMaxWatElev, sngMinWatElev, _ sngFracRunDivert, intDamRows, _ sngSeepOutRate, sngDamLossConstant, sngBeachAreaConstant, _ intVESRows, strDependResponse Close #iritFileNumber Set CADdb = DBEngine.OpenDatabase((strpath & "Wolume.xls"), dbDriverNoPrompt, False, "Excel 8.0") Set CADTable = CADdb.OpenRecordset("ResVolume") CADTable.MoveFirst intRowCounter = 0 While intRowCounter < intVESRows intRowCounter = intRowCounter + 1 sngStartElev(intRowCounter) = CADTable.Fields(O) sngEndElev(intRowCounter) = CADTable.Fields(l) snglncVolume(intRowCounter) = CADTable.Fields(2) sngCumVolume(intRowCounter) = CADTable. Fields(3) sngSurfaceArea(intRowCounter) = CADTable.Fields(4) CADTable.MoveNext Wend blnCalcPondOnce = True End If 317  intCounter = 1 Do Until sngElev < sngEndElev(intCounter) intCounter = intCounter + 1 Loop If intCounter = 1 Then sngAl = 0 CalcArea = sngSurfaceArea(intCounter) Else sngAl = sngSurfaceArea(intCounter) - sngSurfaceArea(intCounter CalcArea = ((sngSurfaceArea(intCounter) _ - ((sngEndElev(intCounter) - sngElev) _ / (sngEndElev(intCounter) - sngEndElev(intCounter - 1))) _ * sngAl)) End If End Function Public Function CalcVolume(sngElev) If blnCalcVolumeOnce = False Then 'Open the Volume-Elevation-SurfaceArea C A D Excel data 'file as an A D O recordset and save the data to specific 'variables to use in computation. Dim CADdb As Object Dim CADTable As Recordset Dim intRowCounter, intCounter As Integer Dim strpath, strWhereSaved, blnlsNewProject As String If FrmMainMenu.txtClickExisting.Text = "No" Then blnlsNewProject = True strpath = "c:\" & FrmNewFile.TxfNewDir.Text Else blnlsNewProject = False strpath = FrmExistingFile.DirProject End If  318  'Open the reservoir data file and read to variables. intFileNumber = FreeFile Open (strpath & "\reservoir.txt") For Input As #intFileNumber Input #intFileNumber, strResName, strResAbbr, _ sngCatchArea, sngStartWatElev, sngStartTailElev, _ sngStartSurfArea, sngStartWatVol, sngStartSolVol, _ sngSeepReturnRate, sngFracWRIn, _ sngNeededForReclaim, sngReclaimRate, _ sngSlurryWatlnRate, sngMineWatlnRate, _ sngSeepInRate, sngMaxWatElev, sngMinWatElev, _ sngFracRunDivert, intDamRows, _ sngSeepOutRate, sngDamLossConstant, sngBeachAreaConstant, _ intVESRows, strDependResponse Close #intFileNumber Set CADdb = DBEngine.OpenDatabase(strpath & "Wolume.xls", dbDriverNoPrompt, False, "Excel 8.0") Set CADTable = CADdb.OpenRecordset("ResVolume") CADTable.MoveFirst intRowCounter = 0 While intRowCounter < intVESRows intRowCounter = intRowCounter + 1 sngStartElev(intRowCounter) = CADTable.Fields(O) sngEndElev(intRowCounter) = CADTable.Fields(l) snglncVolume(intRowCounter) = CADTable.Fields(2) sngCumVolume(intRowCounter) = CADTable.Fields(3) sngSurfaceArea(intRowCounter) = CADTable.Fields(4) CADTable.MoveNext Wend blnCalcVolumeOnce = True End If intCounter = 1 Do Until sngElev < sngEndElev(intCounter) intCounter = intCounter + 1 Loop If intCounter = 1 Then CalcVolume = sngCumVolume(intCounter) Else sngA3 = sngCumVolume(intCounter) - sngCumVolume(intCounter - 1) 319  CalcVolume = ((sngCumVolume(intCounter) _ - ((sngEndElev(intCounter) - sngElev) _ / (sngEndElev(intCounter) - sngEndElev(intCounter - 1))) * sngA3)) End If  End Function Public Function FindMonthLabel(intM) Dim strMLabel As String IfintM=lThen strMLabel = "January" Elself intM = 2 Then strMLabel = "February" ElseIfintM = 3 Then strMLabel = "March" ElseIfintM = 4Then strMLabel = "April" Elself intM = 5 Then strMLabel = "May" ElseIfintM = 6Then strMLabel = "June" Elself intM = 7 Then strMLabel = "July" ElseIfintM = 8Then strMLabel = "August" ElseIfintM = 9Then strMLabel = "September" Elself intM= 10 Then strMLabel = "October" Elself intM= 11 Then strMLabel = "November" Else: strMLabel = "December" End If FindMonthLabel = strMLabel End Function Public Function CalcRandomAnnPrecip(sngMean, sngSD, sngDF) 320  'Generate an array of random precipitation and 'run-off values using the Student t-distribution ' as expanded by Abramowitz and Stegen. cstA_0 = 2.30753 cstA_l =0.27061 cstB_0 = 0.99229 c s t B l =0.04481 Randomize sngP = Rnd(2) If sngP>0.5 Then sngP = 1 - sngP sngZ = Sqr(Log(l / sngP 3)) 'Note that "Log" here is the natural log. 'Log base N would be LogN(x) = log(x)/log(n) sngXp = sngZ - (cstA_0 + cstA_l * sngZ / (1 + cstB_0 * sngZ _ + cstB_l * (sngZ 2))) Else sngZ = Sqr(Log(l / sngP 3)) 'Note that "Log" here is the natural log. 'Log base N would be LogN(x) = log(x)/log(n) sngXp = -(sngZ - (cstA_0 + cstA_l * sngZ / (1 + cstB_0 * sngZ + cstB_l * (sngZ 2)))) End If A  A  A  A  intNU = sngDF 'degrees of freedom for t-distribution fncGl = 0.25 * ((sngXp 3) + sngXp) A  fncG2 = (1 / 96) * ((5 * sngXp 5) _ + (16 * sngXp 3) + (3 * sngXp)) A  A  fncG3 = (1 / 384) * ((3 * sngXp 7) _ + (19 * sngXp 5) + (17 * sngXp 3) _ -(15*sngXp)) A  A  A  fncG4 = (1 / 92160) * ((79 * sngXp 9) _ + (776 * sngXp 7) + (1482 * sngXp 5) _ - (1920 * sngXp 3) - (945 * sngXp)) A  A  A  A  sngTp = sngXp + ((fncGl / intNU) 321  + (fncG2 / intNU 2) + (fncG3 / _ intNU 3) + (fncG4 / intNU 4)) A  A  A  CalcRandomAnnPrecip = sngMean + (sngTp * sngSD)  End Function  322  Appendix D  Visual Balance Case Studies Data Input Summary Tables  323  Balance Input Data  Run N u m b e r 1  Project Name: Case Study 1 Start Up Month Month of Closure Start Up Year Year of Closure  1 12 1997 2012  Production Information Tonnes Tonnes Tonnes Tonnes  Mined Per Day Concentrate Per Day Waste Rock Tailings Per Day  11,760.0 100.0 4,704.0 6,956.0  Waste Rock Information Bulk Density Void Ratio  2.0 0.66  Tailings Information Degree of Saturation Slurry Fraction as Water Coarse Fraction Cycloned Out Dry Density In Situ Void Ratio Specific Gravity  0.9 1.1 0.1 1.32 1.05 2.7  Reservoir Information Reservoir Name Reservoir Catchment Area Start Up Water Elevation Start Up Solids Elevation Start Up Reservoir Surface Area S t a r t u p Water Volume Start Up Solids Volume Seepage Rate In (m3/day)  Main Pond 169.0 122.5 122.5 27.4 1,000,000.0 0.0 25.0  Operation Data Reclaim Rate (m3/hr) Pond Depth Required for Reclaim (m) Slurry Input Rate (m3/hr) Mine Water Input Rate (m3/hr) Fraction of Waste Rock to Res. Fraction Runoff Diverted Seepage Return Rate (m3/day)  1,300.0 0.5 1,330.0 0.0 0.9 0.6 0.0  Dam Design Information Maximum Dam Lift Height (m) # Rows in Volume-Elevation Freeboard Period One (m) Freeboard Period Two (m) EDF Volume (m3) Dam Elevation Dependant Data File? Number of Rows in Data File Constant Seepage Out (m3/hr) Constant Beach Area (m2) Constant Volume Loss to Dam (m3)  3.0 18.0 2.0 2.0 1,000,000.0 FALSE Not Appl. 0.0 10,000.0 100,000 324  Balance Input Data  Run N u m b e r 1  Project Name: Case Study II Start Up Month Month of Closure Start Up Year Year of Closure  11 9 1997 2013  Production Information Tonnes Tonnes Tonnes Tonnes  Mined Per Day Concentrate Per Day Waste Rock Tailings Per Day  0.0 0.0 0.0 0.0  Waste Rock Information 2.0 0.35  Bulk Density Void Ratio  Tailings Information Degree of Saturation Slurry Fraction as Water Coarse Fraction Cycloned Out Dry Density In Situ Void Ratio Specific Gravity  1.0 1.35 0.1 1.35 1.32 2.7  Reservoir Information Reservoir Name Reservoir Catchment Area Start Up Water Elevation Start Up Solids Elevation Start Up Reservoir Surface Area Start Up Water Volume Start Up Solids Volume Seepage Rate In (m3/day)  TMF-1 142.3 1,000.0 980.0 14.94 1,125,083.0 43,009.0 0.0  Operation Data 1,400.0  Reclaim Rate (m3/hr) Pond Depth Required for Reclaim (m) Slurry Input Rate (m3/hr) Mine Water Input Rate (m3/hr) Fraction of Waste Rock to Res. Fraction Runoff Diverted Seepage Return Rate (m3/day)  1.0 1,452.0 0.0 1.0 0.7 0.0  Dam Design Information Maximum Dam Lift Height (m) # Rows in Volume-Elevation Freeboard Period One (m) Freeboard Period Two (m) EDF Volume (m3) Dam Elevation Dependant Data File? Number of Rows in Data File Constant Seepage Out (m3/hr) Constant Beach Area (m2) Constant Volume Loss to Dam (m3)  4.0 23.0 1.5 1.5 1,000,000.0 FALSE Not Appl. 10,000.0 100,000 325  Balance Input Data  Run N u m b e r 1  Project Name: Case Study III Start Up Month Month of Closure Start Up Year Year of Closure  5 10 1998 2010  Production Information Tonnes Tonnes Tonnes Tonnes  Mined Per Day Concentrate Per Day Waste Rock Tailings Per Day  48,000.0 336.0 0.0 47,664.0  Waste Rock Information Bulk Density Void Ratio  0.0 0.0  Tailings Information Degree of Saturation Slurry Fraction as Water Coarse Fraction Cycloned Out Dry Density In Situ Void Ratio Specific Gravity  1.0 1.33 0.0 1.2 1.32 2.78  Reservoir Information Reservoir Name Reservoir Catchment Area Start Up Water Elevation Start Up Solids Elevation Start Up Reservoir Surface Area Start Up Water Volume Start Up Solids Volume Seepage Rate In (m3/day)  TSF 1,125.0 1,425.0 1,415.4 66.47 5,572,903.0 0.0 1,080.0  Operation Data Reclaim Rate (m3/hr) Pond Depth Required for Reclaim (m) Slurry Input Rate (m3/hr) Mine Water Input Rate (m3/hr) Fraction of Waste Rock to Res. Fraction Runoff Diverted Seepage Return Rate (m3/day)  4,167.0 0.25 4,061.0 0.0 0.0 0.0 1,333.0  Dam Design Information Maximum Dam Lift Height (m) # Rows in Volume-Elevation Freeboard Period One (m) Freeboard Period Two (m) EDF Volume (m3) Dam Elevation Dependant Data File? Number of Rows in Data File Constant Seepage Out (m3/hr) Constant Beach Area (m2) Constant Volume Loss to Dam (m3)  5.0 19.0 1.0 2.0 2,530,000.0 FALSE Not Appl. 10,000.0 10,000 326  Balance Input Data Project Name: Case Study IV  Run N u m b e r 1  Start Up Month Month of Closure Start Up Year Year of Closure  5 4 1998 2008  Production Information Tonnes Tonnes Tonnes Tonnes  Mined Per Day Concentrate Per Day Waste Rock Tailings Per Day  1,600.0 0.0 0.0 1,600.0  Waste Rock Information Bulk Density Void Ratio  0.0 0.0  Tailings Information Degree of Saturation Slurry Fraction as Water Coarse Fraction Cycloned Out Dry Density In Situ Void Ratio Specific Gravity  0.9 1.3 0.0 1.32 1.05 2.7  Reservoir Information Reservoir Name Reservoir Catchment Area Start Up Water Elevation Start Up Solids Elevation Start Up Reservoir Surface Area Start Up Water Volume Start Up Solids Volume Seepage Rate In (m3/day)  Main 76.0 342.6 339.0 0.0 1,068,880.0 330,000.0 0.0  Operation Data Reclaim Rate (m3/hr) Pond Depth Required for Reclaim (m) Slurry Input Rate (m3/hr) Mine Water Input Rate (m3/hr) Fraction of Waste Rock to Res. Fraction Runoff Diverted Seepage Return Rate (m3/day)  260.0 0.5 350.0 0.0 0.0 0.0 734.4  Dam Design Information 3.0 14.0 1.0 1.0 0.0 FALSE Not Appl. 0.0 0.0 0  Maximum Dam Lift Height (m) # Rows in Volume-Elevation Freeboard Period One (m) Freeboard Period Two (m) EDF Volume (m3) Dam Elevation Dependant Data File? Number of Rows in Data File Constant Seepage Out (m3/hr) Constant Beach Area (m2) Constant Volume Loss to Dam (m3) 327  Balance Input Data Project Name: Case Study V  Run N u m b e r 1  Start Up Month Month of Closure Start Up Year Year of Closure  1 12 1997 2009  Production Information Tonnes Tonnes Tonnes Tonnes  Mined Per Day Concentrate Per Day Waste Rock Tailings Per Day  1,400.0 252.0 0.0 1,148.0  Waste Rock Information Bulk Density Void Ratio  0.0 0.0  Tailings Information Degree of Saturation Slurry Fraction as Water Coarse Fraction Cycloned Out Dry Density In Situ Void Ratio Specific Gravity  0.95 0.71 0.25 1.8 0.9 3.4  Reservoir Information Reservoir Name Reservoir Catchment Area Start Up Water Elevation Start Up Solids Elevation Start Up Reservoir Surface Area Start Up Water Volume Start Up Solids Volume Seepage Rate In (m3/day)  Dam D 200.0 4,015.8 4,012.0 0.0 79,809.0 5,740.0 200.0  Operation Data 110.0 0.2 117.0 57.6 0.0 0.0 0.0  Reclaim Rate (m3/hr) Pond Depth Required for Reclaim (m) Slurry Input Rate (m3/hr) Mine Water Input Rate (m3/hr) Fraction of Waste Rock to Res. Fraction Runoff Diverted Seepage Return Rate (m3/day)  Dam Design Information 3.0 23.0 1.0 1.0 25,000.0 True 23.0 0.0 0.0 0  Maximum Dam Lift Height (m) # Rows in Volume-Elevation Freeboard Period One (m) Freeboard Period Two (m) EDF Volume (m3) Dam Elevation Dependant Data File? Number of Rows in Data File Constant Seepage Out (m3/hr) Constant Beach Area (m2) Constant Volume Loss to Dam (m3) 328  Appendix E  Visual Balance Sample Risk Analysis Results Summary Tables  329  o o ooooooooo o odd doddddddo  E 3  O > a CO  E 3  E  ooooooooo o o o o doddddddo d d d d  o o o o o o o o o  o >  > < CD  °  o o o o o o o o o o o o o o o oddddo'ddddddo'o'd  o in o o o in ° r C xi < N -d  5  a  < tO  °  O) oo o o o o o o o o o o o o o o S xi  o'obdddddddddo'o'd § S  to  a>  co o 3^  o o o o o o o o o d d d d d d d d d  c 3o toa> g  £  < S . o oi _i > ».  <oooooooooo  ddddo'dddd  < 0-  a  LU  o— S a * to  I °  S ai W LL e s s a 53 ri> , " 2 co <5 o_i 5 * o> S "5 0) ^{Nco^incor^cocnor-cNciTrin £> E » E i o U 1 £• co 2 ow E a. o S o -Q oi C O u. E e < D .2i to0) 5 ro co E E ai C O D_ .co coa>.5*6"g 3 a .2 to 3 Q x> 01 (A 10 to a > o c" <• <roa>r- C D &s xi ™ ' « J E E cu =c 8 C O Q) C O Q E  3  1  c  1  e  Q. 3 z 2 or Q. OO CO 0- Z £ 5 55  to >-  o o o o o o o o o o o o o o o "9 o o o o o' o" o" d d o d d d d o  Q> CD -C  o  w> 2 a  n> to  ooo ooo  o o ooo o o o o o o o o o o s s "O d d d d d d o ' d d d d d d d d  H A n in is q q O") r>- co o o o o » cn cn »Csi C\i CO •<* iri CO' N  5  a> a>  CD ID  E  o 2 a U. 3 JC  » >  °> -s > ra o o o o o o o o o o o o o o o < S ' d d d d o' d o o d o o o' d o" d  o o o o oo d o d o" o d  o o o o o o o o o o o o o o o  d ddddddddddddd d  ifc O  E a  in  or  o  o  5  o o o o oo  o o o o o o o o o o o o o o o  ddddddddddddddd  O dddd d  < o  o o o o o o o o o o o o o o o dd>d>dtdi<Sdtd>di<6d><Sd>didt  o < on  o  T- CM  co  Wcn^lftCDNCOfflOrCNcnilfJ  T-Mn^mcoNcocooT-tNcn^ir)  in 2  3 cn co .2 rav i-a>  o re  r= to ro a>  o o o o o o o o o o o o o o o o  E  3 O > a.  co  X re  3 OJ in  a> E  in  3  _  o > a co  "T co I < to i/j OJ  hi  o c  JO CO  O CO (O IO o CO O N ^ N  M- CM  co "co 3  o T-  CM n co  a> > <  03 OJ  o  o o d o oo 'oo od od oo o d d o 'o oo doo od oo oo oo  o o o o o o o o o o o o o o o o d d d d d d d d d d d d d d d d  o o  CO  ro 3 C C < CO CD ro re k. X) CO  > o < o o o o o o o o o o o o o o o o  TJ 3 CO  a> (A CO  Q LU CD > o  in  o  !2  XI -S-  CO CO £• re  E E  3 CO (A CO  c  < (A  CC  to x: +J c o S a  u.  O  a> E  <u Q E W w OJ o  o  Q3  § -s  0> = CO OJ 2 3 o o w CO c U £1 aj •4-* 4 — E 8..i 0J C C o > CO "^3 5 O o J .!=CO o a. co o U_ XI XO -2- . §• C u 3 % CO 3 t; co a co CD CO m c 2 -2 >• co a> a> o a5 a:ic > - co S £ »- Q x> — a. o _ C o>. a> c o o i_ b a) o CO CO <DO J 3 ,1- ro Q xcoi a>x i >• 3 O XI C U-5* -a 2 <u E E S | "E i l l Q. O a. 3 3 CO CL O z z <f < CO z 2 cn 2 CO c? (/) Oj CO  £*  w  c  » 5: •§  £  2  55  =  CO  di £  CO  <5  £> re E E  3 CO to  (0  'in CO cu >.  re 3 OJ c < co co CO U  rL.  ~ re a. <u CO >-  cMco'srmcor^cocnOT-cMcO'^j-urjco  p p q q q p o o o o o o d d £= 00d00d00d00d00d00d00d00d00d00d 00 00 3 cr COCO0OCOC00OCO0OCO0O0O0O 0) o o o o o o o o o o o o o o o o o o o o o o o o  J?.  or o >  Q. 3  <D  XL  re  O L O C D C O C O C D - I - L O O T - O O C O 0  - T - ! M i n ( D ( D C 0 0 3  ddodo'oo  <D  0  ' N  0  0  ' Q K  d  O O o o d ' d o d o £ 0 0 o o_ o •5 o o 00" co" o .o» o5- 200 020 o JS JS o o o o  000 odd  •0 oil -E, CD o* <> t  i 2 I < co i/5 a; cr « 8  ra  CO O C co  > JH  O) o 3 ^  <s  o o p p o q o o q q o o o o o o b d o N d s N c d d d d d c o o d d O O CO CM r- 1- v- r— J Q -a £ ra  3  _r -  <0 > 2J Q. LL 3 . 0) O) .*  !»  nj CD  111  0 0 0 0 0 0 0 0 0 0 „ o o dddoidi-'Ntdrii 3 8 0 00 0 OOOOlMMOtlO* —  i  *£  i  — ra u  ra a2> i <c. «• so O) _ l < o  B <> S O J O J O  C O I O O J L O O T C O O C O O O O O O O O  G> <J> ^  d d  .2  «w o c *'ra  £ S  LL >  O  CO CM LO <cf O  i-!MP)'tmtONCOO)0  CMC0'<S-L0C0l--00a>OT-CMC0T)-L0<D  "D a>  CO LO  o> o > o>  0  (2  T C - OO N O tM - CO T  o O  ro 3 5  3 en m ID  1- h- •<-  (0  n o A o o * LL  J2  0 0 0 0 0 0 0 0 d d d d d d d d 0 0 0 0 o oo o o_ o_ o_ p o o o_ p co" 00" co" 00" 00 00 00" 00" 0 0 0 0 o o o o 0 0 0 0 o o o o  (/>  3 (0 in <o <u C Di a>  i 2  « 'Z  o ra a) a> Qi >-  O  O  o o o o d oo do oo o o _ o oo ooo_" o ooo"o_ co" o o o o o o  0)  CD C <  ^•comconoii-cM'-iD'fincooiT-o c o o c o i n m ' t ^ ' c f i n ' j - ' j - ' f ^ i n r i  o o o o ci o o c6 o ci °. ° . ° . ooo" ooo" o oo" o o o  5 ? o  £ -*-» Q.  oo w O  o c co  J2 •jo CD  co co  CO  CD  CD « CP  o  co  a>  > Jo  o o o o ci in s d  <  CI CN N  CO  o o o o o o d ddddd  o o d d  o 3U) o a x c c  LU V)  < o  ri> > CO <  n wN o o o  o o o o o o o o o o o o o o o o d d d d d d d d d d d d d d d d  > T3 (0 0) -C (0  o x S LU  *fc (0 73  co  -q- LO co  3 (A 0)  NCOtWlDNCOaiOT-CNCO^intD  a: 3  § » Q.  .2  .E u. — CO  CD E 3  0 0 0 r»- CO CO CT) CD — CO 0 0 cb 0 co CD 00 co CO c-i C N iri 0 6C O •*rn T— t-^ O rrD co CD <J>00 h- cm O in r- C CM M0" CN co" co- CO"co" cn"00" a> rC O C O c o C O 0 r -~ 00 COCO CMco in CO co T  0 >  CO  E 3 E '£ Sre  o o o rco ^ T0 d d CN cn CDn CM o O MI) OC D CT)- •s-r d •* o -co sf C O CD »- CM <J1 o CM . D ocMCDinoooM--sr aifincocDCMtos CM T-  0J E  0 o CN m 00 o d 0 co •a  Sl  _3  O > 'a.  "5. 0)  !«  co 0>  >  i- o co o to in in m CO • r-j r- CN  <  o p CN d r- O  o> o  OOOOOOOOOOOO d d d ^ f f lini o ' dcsir CM i ccioi h^ d^c i  xi -o S re  c =  re <u  < co •a 3  < o.  00 0) cn ro O  QE LU ro CU "o2 § > CUo •*= ro E XI <u E3 ,_ re ^ D_ co < "Do E CU CD > 2 O CO CU l— = :t o u. -9 at CUH— .t:CL t ro X 3 •u C OCO J- g 1 . cr 3 ro .2> p cu Q. » E: I « « co •C a5 CU cu 'to ro O J > 0) o £ £ cc CU cu Q xi > CO > = Q a. >. cu o "Sep cu ro Q "S o 0) E 5 < CO 3 > "a 0) O c -o i l 2 CQ. O CL a. co OJ roZ 2 b£ O : S S 00 •a  co £• re  E E  co 3  co '<0  >. n c < V)  o X! o ro o y -° 0)  a> v re  c  .o  > *.  < o  diNnd^^iritN  c  c  =  c  . E  I s I •  O =  S a CO £• (S  S <u  * co  cn 5 < I  5  <  0  - J  cMco-5rmcor~-ooo)Oi-cN  CM CO  E E  cCoO 3  3  CO  co 0)1 ^. (0 3 _ 9 re co co 3  o0 inco co 0 o -3- o o  3  x: c  CO  .32 *i_ <u co  LU <u >  2  < 3  CO  u_  a S  i  14.  re o 1- xi 22000 O i-t-~CMCDCI>COCM|-~ i-O^ONNvo d d O)  0 0 0 0 0 0 ' d d in o co co  3 ^  re 33 —' <U  ccino o  o  0  <o  m CO  c a. 11 r£ -<  "a OJ  .a: !£ cao S>-  •s '„  ro o c«  0) re C a) u. >-  if) CD  o o o o o o o o o o o o o o d d d o o o o o o o T •qM- M- Mi_ CNJ CM CM CN CM '5 CM CM CM CMCN o" CN o" o" o" o" o" u cr o o o o o a? CD o" o" o" o" o"o o o o_ o_ o_ o_ rea.• O O O O O co" co" co" co" co" co" 3 O O O O O x: o co" co" co" co" co" to > £ a3 T3 CU  u.  CU  ><  Sre Ere •a o ci cu &_ '5 k _ CT CU tu rea.: 5 x: O to 0) > Q. LL. 3 cu O) > Ere <  CO CM CN CM CD O i-CO O O O ci  O  O  O  O  O  O  co ri v ri ci d o) en <n cn oi  0-  qo  Off  Pr  s  E  ^•ocOT-cocM'toicoirino nmrosoicOfj^incDNQ' •j CO CN t\i CN CNi CM C\i CM  o o o o o o o o o o o o o o o o o o o o o CMCMCMCMCMCMCMCMCMCM o" o" o" o" o" o" o" o" o" o" o o o o o o o o o o o o o o o o o o o o co" co" co" co" co" co" co" co" co" co"  5  ° > DI o > XI  o p p p o p o p p p p NO)CN(NCO^^dN<dd  :  re * 3 LU  nn  Re  = CO  CO £  C o O E 'a u > tu  < a.  <! en co < o  i - N n t i o m s o c B O  5 T3 to CU x: CO c O Q. o X 5 LU to •D U) » > o *; < co 3 C O cu  a.  2 3  10  to .2 CU  L.  .i  c  « ~  u re cu cu  J  * a  o o o o d d d d o o  T - CN  :  cu 3 o co  ci) C o  r- oo o) o  :  X)  > < £ o soiCMcoininincocor^ D) CM CD Q) OO O d o r - o o o o o o o o cn co en T - oi  o o o o o o o o o o o o  < reO T - - > - d c N - < - d ' < - d d d d  u  £  CD CO CO  o CO sz a. 2 o cu CO  re  <  E  *«- '—'  |  § <o a. .2 cn = .E .— re re a;  o o o o d 9o d d Po Po d Po d d d d O T - T - O C N T - O ^  CNco-*mcor^ooa>o  0)  E 3  o > '5.  o mo o o o o o o o o o o o o o o o o o o d in O ci ci ci ci ci ci ci ci ci ci ci ci ci d ci ci d d ai— o r-T o o ino o o ino i-~o o ino o o m_ oo oooo h- o in in CO  CO  CO  CO  ^—" o"CM" CN oo"CM" T i— — oo"CM" o"CM" LO CN ai o in CM o Oi m CM ••cr in Oi m in Oi •<* in  CO  CM  in  CO  — oo"CM" oo"CM" T CM a> LO CM m en m LO  CO  E 3  E X  •o 3 < 1 > co CD  CO  S CD  O CO  E  cu 22 O 3 C CO  •<*•  3  o > a. co > <  CD CD O:  ID  CD 0) C Do c 3 CD ^ 15 > CD CD  i-  T-  r-- •<- o o cd ci ci mo co o  3 +•» CO <D (A CO  in  _>. co c  < 3  in  o  CD O)  2  CD > <  m  in •sr  in  O CO h- CO CO h- CO CO CO CO CO CO CO CO CO CO o C O CO CD CO CO CD CO CO o CO CO co C co CO CO CD CO CO co CO CO 00 cb d 00 CO d CO cd c d CO CO d CO oo d CO 00 d 00 co  1- X )  1  2  < 0in  o  CO  3 CO  tn  CD uO) O (0  in u  E E  M-  < co  O  CO  in  re s~3 ~— C =  T3  £*  in  c co o  m  o CD D) CD CD > <  o LO mo Oo o o o o o o o o o o o o o o o o d d d d LO d d d LO d d d LO d d d LO d d d d LO d d in d CO d o CO o o o o o o o o o o o o LO in CO CO in CO CO in CO CO in CO CO in co_ CO CM" CM" CM" ^— CM" CM" CM" o"in CM co"in CM oo"in CM co"in CM co"in CM c o " CM CM" of c h- in  co  a  LU CD CD 0) o  CO  *-* >  » 5 c co o  E -° | «. _ c g CO p LJQL  ro c £ JS °t| ro O LU > o 3 3 CO c 3 X3 CD LU § o .£ a. CD > •C 0> O « .£ C CD O S> LTJ cC <° 1O 2 CD <o ro £ to CD ro c a l l ro oCD CD >CO <f Q D=a. E ro 4- M— co Q CD t CD 3 | it c c o o to E ^ L. LL CD 5 "ro  O C w  O 2 it  "ro  x> x> E E  3 3  :  :  J  :  o= S "5. % CO  E E  ro  3 C C < .2  CMCO^LOCDr^OOOOO  tmtoscooiO'T-T-1-T-T-T-(M{M  'w _>. in ra CD c 3 CD  <  :  10 .£ -«-> C  CO £• CO 3 CO  o o o q q q p q p p p p p q p p p p p q p dv-^cNT- T-:cg'T- ^cMT-:T- c\iT-'^cvi^^'c\i'< T-  (0 CO CD _  a. £  o — to — Q. CD O CO >-  o d o co OJ  o d CO o  o d o in  o o d d CO o r-- o C\T CM oo CM" in m a> m  o o o o O o o d d d d d d d CO CO o o in o o o in— o o TCM—~ co" CM" co)" CM" CM CM O CO x m in in a> CO  o o d d o COo co" CM" in  o o o o d d d d o o COo o in in TCM— Oco)" CM" xCM— in m m  o o d d o COo co" CM" in  o d o in  o o o d d d o r~- COo o in xCM— CD co" C\l" CM in m in  o O d d o COo oo" CM" CD Tf in  o o o d d d o o COo m xCM— <ji co" CM" m in  o o d d CO CO m o oo" CM" in  o o o o d d d d o o in COm COo in x— co" CM" CM x— CM in m in  o o d d CO in COo oo" CN" in  o o o o d d d d o o in COin COo in o" CM" CN CM o rin m •qm  o o d d CO in COo oo" CM" •q- in  O  >  >,  3 •a GO CD CO CO  O to  cu CO o cca CU CO or CD ca O CO C 3 CO  >  o o d d CO in COo co" CM" r--cr in  o o o o d d d d o COm COo o in x— o" CM" CM CM o m m m  o o d d CO CO m o co" CM" in  o o o o d d d d o o in COin COo in o" CM" CM CM o in m m  o o d d d CO o in m x— I-co" CM m 00  co co  CO  CO CD  cu 3 CO  o O cu CO cn cu > <  CO CO CO CO r~- CO CO CO CO CO CO I-- CO CO CO CO r-- CO CO CO CO r- CO co CO CO CO CO CO CO CO CO co CO CO co CO CO co CO CO CO CO C0O0 CD CO co CO CO CO CD C0O0 CO CO CO CO CO CO CO CO CO CO CO CO CO CO CO CO CO CO CO CO CD CO CO CO CO CO CO T—  T—  X—  T—  T—  T—  t—  x—  o o o o o o o o o o o o o o o o o o o o o o o o o o o o o  c\in^inccscorooT-Nn^u)cDscoci)OT-Nn^incDNcoo)0 CMCMCMCMCMCMCMCMCOCOCOCOCOCOCOCOCOCO-^'^'*^Tl- *' 1-'<f'*'*in -  ,  >  >.  "D 3 00 CD c n CO O CO •*-" CO o co 3 C c CO O co 01 CD 03 ro o c 3 CO JO (0 > CO CD 3 C oO O CO CD CO C >D <  in co tr d d  o cninmcoTjiocoxtcnoo d dddd do do  in co T tr d d  cn co tr tr d d  m oo tr tr d d  in co tr co co tr ^ o d d d o  m co tr tr tr d d d  co  *- "2 °  n  CD CO CO  CO Q) '(U CD <5 - °i  Nnnnnc o Nnno n O n COn C cOo c qs cnonc N o cno cn o n cNpnn n c oNc n pn N n o N n c o s n c o N n c o d exicodcxicxidcbcodcidcxidcbco X!  T3  2 ro CO CD i 11 2  <. so cn _ i  <  o  OOOCONOOOOSOOCONCOCONCOCONCOCONCOCONCOCONODOONCOraNCOCO Q  O  O  T  -  O  O  T  -  O  O  T  -  O  O  -  C  -  O  O  T  -  O  O  T  -  O  O  T  -  O  O  I  -  O  O  T  -  O  O  T  -  O  O  d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d CO  E  1 • 2 CD % it ri> 5 h-OOCDOT-CMCOtrmCOh-COCDOT-CMCO 5 ° < —i T-c\ico-<tincor--cocDOT-csicotrinco r-'«-r-C\ICNC\JC\IC\ICNCNCNICNCNICOCOCOCO 3 fl> (0 a. .2 73 CD co <" o c  » i  > CO CU C CO D  o  CO cu -3*— u CO CD cu co LT CO cu c C Do 3 CO C CD D > CD 0) 3 C oO O cu O) CD C D > <  in co "cr co oo "* ' o to d d' d  m oo -cr -cr d d  in oo -cr -fr d d  iONCOO)COO)0)COCOO)CO noiNiDcoNscJoiincooims o ~ "  - - - - - - - - -  dc3ddddcSc5c5c5  <D  5 E **-  1  o  0500  o o  o (/) —  Q. O CD 10 O CD O) O o o o o o o o o o o o o o < CO d d d d d d d d d d d d d  swcoNcocosnnsnnsnnN cocococqcorqcpcococDcococpcqoqcD ddoddcdodddddddddrod  XI .3 o o to (0 a 3 x C LU C < in ri> T3 > < o CO  NCOCONCOCONCOOONIDcONOOCONO T - O O T - O O T - O O T - O O - T - O O T - Q d d d d d d d d d d d d d d d d  ^•wtoNcooiOT-cNnfincDNcooio  o o o o o o o o o o o o q q d d d d d d d d d c i d d d c i  * -D in cd x: w ° - o. ox E LU . T3 O) = CO > O £ < co T-tMCO^intDNCOOlO 3 to tu cc  3 § .0 Q. 0) LU c .E  = to to«  CM CO  o  >  >.  T3 3 CO  CU C CO O O CO  T-coinoi^cDffl(DcoNsconinNT-(oocNcoina\finffltDcoNsina)wsci)iDo 0)0)C0C00)C0QfflC00)C)c00)fflO0)CllC00)01C0C001cqQ01C09 0 0 0 0 0 0 d d d d d d d d d d d d d d d d d o o o o o o o d d  cu ±z o 3 c CO  C CU CO O cr C U o c C O 3 O co CO C > co m  3 C oO  CO  o o o o o o o o o o o o p p o o o o p p o p p p p p p p p p p p p p p p d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d  oCU  O) C O cu >  <  o o o o o o o o o o o o p p o o p p p p p p p p p p p p o p o o o o p p d d d d d d d d d d d d d d d d d d d d d d d d d d d d o ' d d d d d d d  U)(DSCOO)OT-C\intinCDNcOO)0'-C\CO'*in(ONCOCDO^rXin^cOtDNC0010 T-T-T-T-'r-CNCNC\IC\icNcNCNcNCNCNC0COCOCOCOtr}cOCOMm^  Vol  O E 3  zz '5.  tr CO CO o I - cri CD d CO co CD tr t— O CO 00 C r— "C CO Oo co" CM o" co" •tr co m  O) o o CD OJ o cri o d d co co d co ai CO I -: \— I- o Ico- tr co" CO CM co" oo" co" o l O CO *-  S t G if) O *"! ^ cri a> d CO CO CO vC O CO T - CO cn  co o o ior> o d d Io CM co I-  s  s  s  s  3  E 'x re S  a: E E  00 >  0) E  CO CO  _>>"O g 00 < cuCO CO  _3  O >  to"  co co — rtr tocoioCMcnm tr m  s  in d d d d d d re CM tr jz O co CO XI 5' 3 OJ I ? *  s  'a. co cb > <  CO  rx°  OJ o c ro ro  o o CO O tr x-  m ro  T -  E E E E o • ^  x  o q q q q q q q q q q q irj • ^ c M - r ^ d T ^ c N d d c d c d d  o x- o CM  CM CO I - CO CO tjs  X! • I -  3 <£ c —  3  < '5-  0. re  re xi 3 a, c 0  &2  I? ° < a T3 3  CO V cro o O in co <3  ro co  cr  ro E E 3  CO cn co ro c <  co £  in x:  OJ o>  2  Q E UJ ro  ccnu cu  re c re  CD d  o o ID oCD Oo ^oCO d d d d d d d  o  o d  00  s  <  co  < .  S3  o oj XI o2L.i«> ccuu o> a. re O J . b z 3 'sco .E<R o U_ XI roX. cr = :I c — tr OJ 5. cu f 8 I 2 00 co .§ Q xi oj a: = c corov Q. c u o >> 2 O o o _ CD >» CD E S< I •E 3" a Q < ro OJ cu re "a ^<oro oj 1 ro .E to > n= c XI X) a. o 5 tx CO 0. £ 2 co <u E E CL 3 3 c  ro  'ft  O z  CN CO t- CN IT) CO ,_: I - tT tl- CM CN d d d d 0  * £  ro •a « LT S  E  t i  z  re co £• re E E  s  C O 0)  3  CO aj CO±ico c« c'_> o>3 — re at re c  rx .»  < CL O in C  £  CM CO ^ f) CO  CNcotfincoi -oocnOT-cN  * s 3  'C  co cu <U CO  cr: r<* 7. uxio <>  caju  3  cr  cu  cc o >  o o o o o o o o o o o o d d d d d d d d d d d d o o o o o o o o  CN CN CN CN CN CN CN CN O)" O)" O)" O)" O)" O)" O) O) i— i— r--i^r~-t-~-r— — r  Q.  CO cu  3 CU  2  £ E  MI) i - (O O in co co in m o' ci ci o o  •  S  Q  CO  Q O O O O O O O O O O O O 1^ >a O O O d o O O O O O C i o cu CO• OOOOOOOO CN CM CM CM CN CM CN CM •B -—- CN 3 CP  cu CE  CO  0 to)  c•jT of d O~ — — — r o~— r o" r^r— roi o) i— r~-  o  LL.  Q.  cu cu  s  q1 o q o q q i- C\i N CO cd d  xi - ^ O O O O O O O O O O O O o d d d ^ ^ i r i c i d d d d d  >  CO  < o co O)  c c  >  O  LX U CO  3  <  o o o o o  T3  >  CO  ro O) r- Ni - r- O) CO O o o o CM odd o •a d d d T-' cd cCuO  c o  LX U  <  O O O ^ O CsO Tco- CcoM co O Os r -cooocoo d d ^ ^ d ^  O O O O O OoiOo Oo OoOoOo co OC oi M r- o o o o  o o o  o a  n  3 C C <  CO CM OI  CU 3 CO  o  -cr co o o o o o  CO  CO CO  »  °. I g"ra <  >  > CU CO CD  CMOomcot-cncNoo c o c M V d d d d ^ ^  of £ °  cu o  CO  cooiincoco^tcNN  5  o  n a.  s  * a.  D) o  C O > <  r- co o) o  > < CO  i-tNCO^miOMOOlO'-CM  CM 10  cu  *•§  a> e  a: I s E c CD  re > o 0)  a.  CO T3  3 CO  CNCO^mtONCOCDO  a>  a:  CU CO 2 0) 3 (0  "E  cu  o co  LU (A  W  Appendix F  Visual Balance Sample Concise Volume and Elevation Output File  344  c o O f5 E 5  Q UJ  > cu UJ  00 CN CO LO CO CO t— I - LO 0CM CD LO •sr in IT— CO CO ro 0 IO O CD O T—~ Io- 0CO I C N I L O C O C M co O I co I - x— CD CO 0 CN CD CD CO co o 00 LO CD cb O L O C D C D cb Icb OO OJ d d d x— CM CM CO 00 00 tr •-f L CM CN CN CN CN CN CM CN CO CO CO CO co CO CO CO CO CO 0 0 CO O CO CO oo C x— T— T— T— T— T— T— T— T— T— T— T— T— X— X— X— s  s  s  s  s  s  s  s  s  O I00 00 C O CN 0 0 LO 0 0 Io- C OO I - LO CM CD LO o t r LO I CO oo O I - CM I - tr LO 0 0 CN I - CO I co 0 0 0 0 CM CO CD L — D cb I- r-^ 0 0 0 0 0 0 OJ O) d d X CM CM CO CD m o ^ T - t r t r LO C CO D C O C M CO CO CO CO CO t r t r t r C O CM CN CM CM CN CN CN 0 0 C O C O C O T- T- CM COCM CN CN C O oo CM  CO LO CD 0 0  s  s  s  s  00  s  s  s  s  s  u_ Q  UJ  C D 0 0 I- T— OJ uo T— CO 0 0 0C0D 0X— CM OJ CD CO L O t f tr —f- C D CO T— t f CO CD CM t f co 0 t f o I- CD t r CN OO I NJJ O I- CM CO o CO r - o t f CM LO O) CO oo 0tr0 oo O 0 0 0 0 0 0 raj OJ d T— CM CN t r LO LO CD cb cb It X— CM CM CN CO CO CN d d — M CN CN CM CM CM CM CM CM CN CN CN CM 0 0 oo OO 0 0 0 0 0 0 CO CO CO — T— T— T— CM CN C 5 * E T t t t — v~ T ™ X — T— T— T— T— T— T— T— T — T — T ~ tT — T — T — T — x — T — T — T — X — HI —  d>  00  s  CO 0 0  s  T  s  s  s  -  CO O —• O IV S ii) C I- o  CM CD I- T— L OT O f CO 0 0 LO CO LO 0 0 LO CM I— CD 0o0 I- CO T— CD 0t f0 I- L t t f OJ CO CD o t r I- v- t f 0 0 LO CN O) I0 0- t f — LO O LO CO O J LO 00 00 M LO LO CD r-^ OJ d d CM CN CN CO 0 0 t f tf LO LO cb cb cb r-^ 1^ CN « C C N C M C M C N C M C N C N C M C N C N C M C M C M C N C N C N C M CM T — T — T — E T— T— T— T— T— T— T— T— T— T— T— T— T— T— T— X— T— T— T— T— T— T— CM x— T— T— x— s  s  =5 > co  i  aj  -  00  00  s  00  tf  T— 0 0 > o Oo T3 CO <VL LO" t f = u £ co" OJ t f o CM t f o 5 |  CO U O =  ro CD >-  s  s  s  s  s  CO 0 0 co LO O) I- Iss- 00 00 CN t f X— Is- CO oo CM t r Is- os 0 s0 o co CN CO s tf I- I- o t— o O) IoCM CN 0o0 ItrOJ I- O) LO tf CO os — L O It -- T— LO o ICD I- CO o OJ o CN I - t CD co o LO o t f CO oo o LO" OJ" co" oo" LO" o" oo" LO" I-" CN" CN" CN" Is-" CM" CN" OJ" oo" CO" OJ" OJ" o" OJ" I-" 00" co" OJ CD CD — co CN — OJ t f LO CD CD CM I- CN — I- T oo o I- o o co LO oo CN x LO I- T— CO I- o hCO 0 0 T CM co OJ t t f CO 0s0 o CO — LO I- o CN co CN CM"CN oo" co" oo" tf tf" tf tf" tf" LO" LO" LO" LO" co" CO" CO" I-" I-" I-" I-" oo" oo" s  00  t fs  s  s  s  s  s  s  s  s  s  s  s  s  s  s  I LO0 0 0 0 Ico CM o 0 0 0 0 I- L O M o oo I- LO CO CM o 0 0 — OC CO OJ CO C CD T- CM CO CM O LO COLO co OJ o o I- LO CO CM co CD o t r LO LO C D CU d d C M I rtf L O tfM d d d d d d d d d CN CM CN C CN N oo CM C s  s  s  s  s  s  T3 3  E  cu CO aj  |  |  i  z z •=  co c c •CO CC 55 3  cu  f3 L.  =! J- P  co .cu co Q. CO < 2  cu  cu CD E  XJ  I IS  E  CU co _o E cu > o 3>. O) 3 Q. Q) O o CU i XJ Q CO < .u T < CO O  cn cu <"  r-  ^ CD>»  DJ  XJ  OJ o CO O  —> —3 <  CO 3  i  h  '= 5r  Q. CD  LO tr  CO  CO c CD O o E $  > _CD LU  CO CM CD o o ro CD CO CM CD LO CM CD CO CO OJ CO co CD CD CO LO CM CD r - o 00 C O C D C N L O C O C O C M L O CM CO CO CO CN CM T— r-^ C O CO CO cri d CD d •rC M C M C M C O C O L O L O L O cb cb cb CO cd CO •<* NJ CO CO CO CO CO CO u•sf T — X — T — T — T — T — T — T — T— T— — t -7x — "<— T— — ^ — 1  CD CO CO c o CO LO CN CD r N CN NT CO CO C OC CO t— CD CN CO CD LO CO CN CO L CO M LO CO CM 00 C O CO CO o i C LO LO CD cb ^— xfO CO d O c i V- CO CM CM CO CO cd CO CO CO CO CO CO CO CO CO CO CO 5 CO  Q LU  C i- o CD ^  CMmCDCNxfCOCNCOCOlO ffi^CDCNCONSOfN  CN LO M" CO XT CD LO CD  CO  o  00  O O  c o L i c o c o c o c o c o c o c o o o c o o o o o c o o o c o  1 >  o  CO D CD C CO CN CO CM CN CO O LO cb cb xf •sr' LO L ^00  r L O co co co D hCN CM co o — co co CD "3- o C •q- CO CO C O CO CO C M CN CM •cf LD LO ID "j-3^  LU  W O "D S := re o > CO » LU  C D C N C O C O - 5 J - L O C M C O C O C O O O O C O C D C M L O C O T -  ffldddd^^^ddNcricon  0) reE  3  o 1U3 >u> O CO CO •o "re o +^ > o  LO r-  x — CO CO CD r~-  CO  CM CD  CD CO  CD  CO CD CD  CO CO CM  LO" ^f" CN  CD" r- co" LO" CD" co" r-~" CD CD o C D CM LO CO CD CO O o" o" co" oo" co" CD" CD"  o"  CO CO  o CO  CM" CN CD o o CD o"  T—  CM CN LO  •st^if)(D(DNSCDO)incOO)N^T-0)(D(0 ^ s q n t p c i N i n c q ^ ' t m r o c \ | L O N q n  oo CO  CO  CD CD CO  00 CD  T—  CD L O o CO_ CD  CO CO  T— xf T — o  co" co" CD" o o CO c o CM CO CO CO 0 0 r— CO  1 — "T~" T~" T-" CM"  CO co  CN CD h-  T— co" xl- CO X co" CO  CO  CO 00 CO  o o  -  CM" CM"  00 hr-  CO r-  V-" LO" CM" CD T— L O CD XJ-" •St-" •<cr" -«t" • * "  CM  CM" CD" o " LO LO CO CD o  00 o  o LO  •*" o " c o CD o co"  T— r -  CO o CD  r-o  co co CM CO co_ o  CN  ro  CM  CO LO  LO CO •<sco" i n " CO" rCO -  o CN CO  CO LO  X—  LO" LO" LO" co" CO" CO"  X  T3  c re  re a> >CD E  o  CO L O CD CM  00 LO  LO CO  CO 00  CN CO  o o  oo o  CM  CM  CM  CM  CM  CO  CO  0)  c o  <u  ~^  5. i=;  CO  LO CN cd  CO CO  CM  o LO  00 LO  CO  cd  CO  CO  LO CD CO  Q) XI  0  -Q o  3 5 • 0) o •o -o < CO O  E cu o  CD i  Q i§  cd  *-  E  Q) r >> O) Q. ^ 3 3 cu 3  h if.  rocx  ro  T  T  <  CO  CM CD  LO CN  CO CO  CM  00 LO  co  LO h-  CO 00  CM CD  CO  o o LO  (D  CD E 0 o  CD  a  2 roo _ ro < 2  CO 3 >^ CD  XI XI E  E  C D <D > O O <D Q  CD CO  CO CD  L_ o  o  -•  cn  E 5 « re » E  a  LO . cn tf  Ul -—  >  C M CCMM CM oo oo td aj — LO tf X— X—  00 CO CD LO X—  CD CD LO x— CO CO cn CM iq CD d d x— X— LO LO LO LO LO T— xc— x— X—  CM LO CM LO T—  tr tf cn  CD CM LO xc—  co CO LO X—  CO CO LO T—  CO LO CO xr- LO co tf LO 00 T— CO LO o o tr tr tr tf' LO LO LO cb LO LO LO LO LO LO LO LO X— T— X— X— t X— -  co CT) LO CO cb LO r-LO LO x—  CO Ir-^ LO s  CM 00 CD CD LO T— 00 CM LO CO 00 1—1CD CO tf tr CD xr- ro LO CO T— CO LO tf L O '—CO 00 t— CO co CD CM LO CD LO CD CO CO' o CM LO 00 o ICM CM CM CO CO CO tr tf LO LO LO 00 cb 00 00 cri cri cri dLO dLO x^ LO LO LO LO LO LO LO LO LO LO L O LO LO LO tf Xtf— Xtr— Xtf— tX—f tr tr tf X— X— t X— X— X— T— x— T— x— T— T— t— T— X— X— tCM  _CD  1  s  HI  a  -  tf CM co CM O CO LO oo 00 cb 00 CO LO LO LO LO X— T— X—  CO CD o CM cri CD LO LO T—  tr CM CO CM oo CD o CO LO CO o CM cb cb cb cb t-^ r-^ LO LO LO LO LO LO X— X— X— T— T— T—  UJ  o—  CD CM CO CO CM CO CO CD tf CM I - CM I - tr LO T— L O 00 CM tr II--- CD I -' cri T— d 00 r-cb cb cb d <D ',5 cri tf tf tf tf tf tf tf 00 00 ai tr tf dLO LO T— L O re « ai tr tr 5 » E  i_  CO CM  LO CO  s  s  s  s  s  LO  LO  tr  CM CD  x— x—  CO LO  LO  LO  CD CO  CM LO  CM LO  tf 00 CO 00  00 CM LO  CO LO  CO LO  CM CM  00  cn  CO  CD  LO CD co — tr tf tf tr xLO LO L O LO LO LO LO L O LO  co cb  LO CD LO LO  LO  UJ —  CO O —I T) w CO  T - C D C N O O C N O O C O tf C D LO or, CO . 0O LO CO CD I - O CM LO . CO L O C O L O O O O C O L O O O cq cn CM tr r-o o CMCMCMCMCOCOCOCO tf tf oci cci cri cri cn tr tf tr co co co co co tftrtftftftftftr  =5 5 «  (O * E UJ  T -  s  ^  1 0  C D L O O O - ^ O C O L O C O  OO CM CO O CO LO 00 LO LO LO LO  tf tr tr tf  CD CD  re E  ICM- L O II - CO O co" OO" LO" T3 > ^ cn CM co CM O Tto3 «V tf CO cn 3CO O I-" I-" I-" CD  ILO-  3  s  re> +-*  o  s  s  s  s  s  s  00 LO x— xCO — x— oo"  Iocn co" rco oo" s  x— x—  LO CO  CD CO  CO CM  tr  LO  tr tf tr oCD" o 00 LO_ x— tf" I-" tf" tf x— x— cn tf cn CD CO o CO 00 X— LO  s  00" co"  cn  CD"  cn  ICDs  O  CM  tf  CO  x— I - CM tr 00 CD tr CD" co" CD" x —~ oo" CM CM 00 CO CO LO CO o_ C0_ LO_ XT-" X— x— o" o" o" CM CM CM CM CM CM CM  s  CO  CO 00 O o O L O CO CN CD oCD LO x— I - LO LO cn CN LO I - I - tr cn C N I -" X — I-" I-" o" I-" tf O I - x— o 00 CO cn CO I - o C N tf I - CM LO CD T-" CN CN" CN" CN" co" co" co" CM CN C N CM C N CM CM CM CD  s  s  s  s  s  s  s  s s  s  o CO CO 00 oLO xCO — CO co xLO_ — CO co CD 00 o 00 oo CD I XT-" I-" CO" CM" oo" oo" cri" CO x— LO CO o CM X— CN LO I - CD CN tf co s  s  s  tr tf tf" tr" CM CN CN CN  LO" LO" LO" C N CM C N  C  re  co re CD >-  CD  oo  CD o 0 >x  CO CM oLO oo I - LO CO CM o 00 I - L O CO CM oL O 00 I - LO CO CM o oo I - L O CO CM o 00 LO LO CO tf CD I - oo CD o o x— CN CO tf CD I - oo CD o o t • CN CO tf LO LO L O L O LO LO L O LO L O L O cb cb cb cb cb cb cb cb cb cb cb cb r-' I -' r—' r-' r~- I-s  s  s  s  s  s  -  s  s  E  c o  =! i- P c -Q CD ro a. CD  <  0 CD CD CD X) XJ E CD E CD E E ro 3 x : 3 » 5 = C D ^ > cn a ^ CD CD cc o .xi ^ . r oj ^ c§ 3>>CDO.. C Dsj |;Q 3 *e CD O o 5 3 m o 3 3  ro 2  T  <  co O  p  0 CD XI X) E E CD O 0 0  CD 3 x :  3 >- O — ^ cc i xi 0 r oj=o .gr osT  §  3  Itf s  CO  to c o> o  CD  E S £ Lu  LO  CD  ai  oi  LO  LO  dCO  T—  >  O CO CM I- •<- T— oo co C t v CO O - 0 r0 O cd IN IN ,> "3" "3" LO LO LO CO CO CO CO CO irO r-. r <DCD^^^(D^CDCD1D(0(D(DCO(DID(OCC1(D(DS co co co co I I c o c— o co Tc— o T— T— T  I00- Id s  CO  s CM CO  CM CO  CO CM CD  CM  CM NT CM  s CO  CD  CM  CM ,  i  r  CO  IM -C MC ID LO CD I00- C CM DC CO DC O xM rC I-' r-' od COoo CDCDCDd d dco LO L OL O LOTL— O TL— OL O co co T— T— T— T-  LU  s  CD  s  s  FRI  CD  s  a  CO  CO  l  r  CM  CO ,  CO  CO CD  co  C D O O I - C N C D C M C O O O L O O O O O C O O O T - C O L O  CM  CO  CM CO  s  s  N 00 DO CM O r— I-00 CDco co C N oi L O O0 CO CC CnO in C (N(NC1(OrO\-\-N-N'N'in(ON00O)O) COCOCOCOCOCDCDCOCDCDCDCOCDCOCOCO s  CN  CD  LU  i_ O —  00 T— C D00 C OD CO OI- C 00 o cd I-' 00 CDai CDCDdco OL O LO LO LOTL— O T— x— — « 5 03 L T~ T— t T—  ,2 >  O0 0 "JB co C cb cb £  LU  s  CM CO  CD LO  CO  LO  LO  LO  s  LO  E  LO CO CM L O CD CO L O CO CN CD T— CM T— CO LO LO 0 CM L O CM 0 Oi CO co o I co CO O O 0 0 C D CM CM CO CO CO L O CM CD T — dCD dCD cd cb CD • s r CD CD CD CD CO CD CD CD CD CO co co co co co CD T— T— \— x— ^— T— T— T— T— T— T— T— T— T— T— T— T— CM  s  W O —• CO CM r- T— L O C D O Ir-:- COIs- L OC D COIcos- CDoo O DC M DCML CM L s ".P CO o C N I to oo oOC h- CDC CO O hNC L O C D C M L O CM OL LO OC IO -C CD D s CD ^~ ^00 C d d d d d cb cb cb cb L O I-: I-: COoo 00 COCDCDCT) CD c\i C M C M C M •<* • S t "3" co i> E L— OL OL O LO LO L OL OL OL O L OL OL OL O T— T— T— T— X— ^— T— T— T— T— X T— T— T— T— T— T— T— T— x— x— x— T3  s  s  s  LU —  0)  E o >  LO LO T— o OCN) CD T— CM CD co L O 00 CD o CD CO L O CO CM r-- CO CM r-- CO CD o CM r- CM CO CN CO CD CM •<*• C N T— roo CO o co CO CM CO L O LO CD I - 0 CO o CO CO 0 0 0 T — X — LO co co c o _ I co co a > o o o • " 3 0 0 M _ LO" CD" CM" T T3 —~ CM" CD" CD — CD" C•sNf CD" CO ^ CD" co" C N CO" CD oo" I-ss" Lco" oo" CM" I-" CM" oo" co" CD" co" X CD L O -s" I-" Lo" CO CD CM CO CD CM O I O CD L O C N CO L O CN CO C N s CD o CO o L O CD L O CD CM CO CD CM CM CO CO I O •o 3 00 T— co o CO I co _ oo C N CM" CM" CM" o 0 oa>" co" CD" oo" o" 0 0 T—"T—"cTo— CO" LO" CO o "V" co" CO" I -" I-" I-s" CI-sN" oo" oo" co" 0 co" co" o" ^r" 00N"CM -3-"CO CO CO CO CO CO CO CO CO CO CO CO CO CO CM C N CM C CN CN CO CO CO CM CM CM C N C N CM  o O CN CD  LO CD CM  CM OO  CO  o CN S  "ro  O  s  s  s  r  s  s  > T3  C (0  CO V  >-  E  ro I cu COs >> I-: s  LO o LO I - LO 00 o LO 00 oo 00 I- LO o 00 ILO cd hI-:- I-: r-: o00 00 00 00 od 00 00 o CO  ss  s  CD  c o  s  CN CD  CO  (0 X 3 E  < co O  CM CO  0 O 0  a  CO CO  CM  CO  s  CO  CD  CO  CO  s  CM CD  CD  CD  CD  CO CO  CM  CN  CD  CD  CD  0 r-- LO 00 o 0 LO LO CD  CD  CD  0  ro ^ ^L2  *-• E 0  o_  ro < S  4  <  co O  CD  Is CD  CM CD  CD  CD  0  CD 3  ^o. 2r ro5  1 1 S  n 0 o < 2 T T < CO O "5  O O 0 O0 r-I d d d s  CO  0  JQ ro ^ E  0 =J o cro -Q .co 0  a  00 00  CO c CD o o 'is E 5  CN  CO OJ co cn tf CO CN L O o o C N C N CN CO CO CO tf IIx—Ix—- I - I X— t— t— t—  CO CN CO T CN — oo — r-I - co cn ro ro cn CN tf CO LO CD CCON T CO CD CO LO LO CD CN co tL— t — o I o tr I00 I tr O L O CD CD cb I - I-: r- I - I - CO 00 00 cri cri cri cri oS rI I I rI I r — rI hr — I I I Ix— t— x— T— x— x— T— T— x— T— T— T— t- x—  > 1C 1D 1 Li_ Q 111  tr LCN CN 00 cn co tf CN O 00 q CN L O o cb cb cb T— T— T— c\i I - r~- I - I - I - I - r--  ICD CN I-  tf  CSJ LO  s  s  s  s  00 I CD tob cri CD CD  i- O  s  CD 'XI 3 5 0) HI  C CO O 'S ~ m O > co ® Ul  s  s  s  s  s  s  s  s  s  s  s  00 t— cb Is  s  s  s  s  s  s  s  T> CO T — CD co Lco co 00 0 3 tf 00 L O CN C L O 00 CD t— O 00 o CN CO CD \JJ r— o CN L O CN LO LO LO LO LO p cb tf tf tr cb cb cb I-- I-' s— I I - I - I - I - I - I - I - |T I- I- I- I- Is  s  s  s  s  s  s  s  s  s  s  CD T- C O l O f f i S r - T - C D l D t- tr CD CO O) CN co co LO LO LO r^cooocococNLOoo O t- I - CN CN 00 CO CO tf I- Ir— I-- i— — I r— I I- Is  s  s  s  s  I— q cb r-  s  s  s  tf I - CD CN LO I - 00 C N CO LO tf CD I - cn COO tf CD 00 T— CO 00 o CM tr CD oO CM LO LO LO L tfO LO tr L cb cb cb cb •f' tf tf LO LO L O LO LO cb cb cb LO LO LO LO LO LO LO LO LO LO LO s  s  s  CD E CO o o tf CM C N LCMO CO 00 I - I - I - LL OO CM CO L O C N C N L O 3 o CO tf •-f CO co L LO CM CO CO O o r- o tf oo O I - CO 7<_> 3 V) r- co- I-" t- cn co" o" cb" cri" CD" tf oo" cn CD" CN > L O CO CN — 73 t co cn CM T — cn o oo o CM 00 CD CO CD CO O CO t— L O o tf 00 t— tr I - CD CO" LO" LO- LO- LO- LOCO 73 O co" co- CO I-- CO I-" I-" CO oo" CO oo" oo" CO CO CO CO CO CO CO CO co oo _ > s  s  o LO  s  CM  s  s  s  s  s  s  s  s  CN  T3  s  s  s  CD  o oo tf o" tf tf 00 cri" CD" CO 00  s  s  s  s  s  s  s  CO 00 00 co . CO cri cri o cb r00 T— rt- 00 T— CD  T—  T- LIO- CN co 00 00 tf r- 00 cn CO r-' r-' r-oo — I00 I - I - I - I - r-- T— I s  .  s  s  s  s  s  s  t— CNt— CD CN CD — I O T- CM co L O I - 00 r-^ r-^ r-^ cb cb cb cb I - I - I - r- I - I - I s  ICD r-^ Is  s  s  s  s  s  s  s  s  O CD 00 COO cn tr tf LO I T— CO tf L CD CO L O CD 00 o C N tf 00 s CO CD 00 00 Icb- cb I-' 1-^ I-' I-'- IL-cn cri cri cri O oo LO LO 00 LO LO LO LO LO LO LO LO LO LO LO LO s  s  s  ss  s  s  CN CO L O tf oo oo I - I - LL OO CN I - LL OO o 00 CD tf tf T— co I - I - I - cn I00 cn I-" C N co" o" tf oo" CO co" CtfN Loo" O L O CM o rtf 00 o L O CD oo_ CD_ OJ_ C N tf L O CD tf T—"T—"CN" CM" cri" coo" o" o" o" CO 00 tr tf tr tf tf tf tf tr CM  s  s  s  s  s  s  s  s  CO T — o CM CM LO T— CIN- LcnO T CM L— O co T — tf tf o" tf CD CD CO CN o O CD 00 o CM LCO" CN" CM" oo" oo" tf tf tf tf tf s  re 73 £ re  re CD  >  CD E  x: c o  o 00 I - L O CO CN o 00 I - L O o oo I - L O CO CM O 00 r - L o c o c N o o o r - L o o o c M1) o LO C D ILO tf L O L O CD I - 00 oo CN OO o CN CM CM tr o o t-CNCOtfLOLOCOr— 00CD CM CM C M C M C N C M CN cb cb cb cb cb cb d cb d CD >»l co  LO CM  CO CO  CM  s  s  s  s  s  :  CD E CD « 0 XI co Q-i? o • o (D o  < S  -5  <  CO  O  0)  X)  CO 3 i h CO CD  Q. CO  *CO § —I ^—'  > 3 DI 3 Q. 0 O •=5 < co O  0 X) E 0 > o  0 xi E 0 o 0 Q  0 XI 0 " i =E >. g >> "§ a a CO Q . CO § 3 3 0 2 < 2 3 •5 <  CO  O0 tr CO  CO 0) o — CD CD K I - CD CN p 2 03 d x— vd t <U p CO 00 00 00 00 x — x— « Lu B s  >  s  >  o —  > «  i> E LU —-  s  s  s  s  T- 00  LO  CD  O  CN  LO  r—•  CO  CO  CO  CO  I- I- I- Is  s  s  s  -  s  Q LU  5  s  00 CD CD CD CD CN I- CD CN "3" CO O I00 CO CD CD — CD C) d d I- I- I- II- 00 00 oo  in  i-  CD C D CN T— CO C D CD CD 00 o "3- I - C D CN I O T- CN CN CN CM CO cd OO C O CO 0 0 0 0 0 0 0 0 0 0 0 0 0 0 r— T T— v- T— T— T—  s  LO T— CD CD C oD CD CN Id Csi CO oo oo 00 OO 00 s  •tinN-LONCMCvIO) Co D CD Cw D O T— TCD I- CD n ^ c— I- hI sI e Io - COoCm O CO CD  CD s  s  s  s  s  IS  o LO CO  </) O —• 13 3 W  x— CD CD CD CD CD CD CD CO CO CD CD T- CO LO CD co o CN) CD o CN ^JVx— CD CN CD CM ^ > «! oi d d d d d CD CD CD CD CD CD CD x— CD T— CD co « E LO CD CD LU T—  -•-» re  a> E  CD — co LCM 0CD0 00 I- LL OO T CO co -3" LO o T— CO — CN oL O CM O C O I- O X CD LO T — T — T — O C O o c o _ c o _ _ o" I-" LO" CD" o" I-" co" LO" •sr" •sr" CD o" I-" CO ID "p I- L O •sr I- oo — L O r-MT CD oo oo L O C CD — V O T CO T I C O I "5 •^f ^r" ^t" LO" LO" LO" LO" CD" co" co" CD" I-" I-" I-" > xf "3- XT "3- -3" X* •<3-3" -3" C re  5 3 O » > O CO o t-  re v >CD  LO  s  s  s  s  s  s  s  s  s  s  s  s  00 CM O 00 I- LO CO CM o 00 LO CO CM o CM CO LO LO co r-- 00 CD o ro00 CD O o CM CM CO CO CO CO CO CO CO CO CO cd CO CO s  E  C o  CD X I X)CD E E cr CD CD3 > O O CDS z a  CD  ro 2 O » |  _  *•• E ^  <D  "  3 5  3  CD  "g 1) u  CD  CD  CD  CD  _a x i E E  o  (D Q  Appendix G  Visual Balance Sample Extended Volume and Elevation Output File  351  CD in xr 0 0 0 0 O o o O i o CO /—\ 0 0 rO o CM 00 C D C O C D C D o C O 3 •sf LO" co s s —} co" in" co" I0-" I -" I -" 0 CM in C O CO CD oo CD CM  c  CO  CO  CM 1  N  N  CO  s  I - 0 0 o o o O 0 0 CM Io I- 00 CM o I - o CM CO o r-_ ^r" co" oo"xC— •<a-"LI-" oo"CD CD O CO M CD CD CD CM s  J o  s  s  s  s  LO co CD CL O 0 0 o CO X —o < LO" LO" oo"CM  X—  T3 3  CO CD  w 03  H  re  O  00 LO CO •tf"  CM  CO  J2 o 03 '-£3 CO 03 ro a)  >  e ro CD E  _3  o  >  LO  T— CM  CD o q CD i - r~- CM o o co cb cb cd cb oci o o CM" LO" CM CM co"t- ro 00 00 00  s  CD  LO" 00  LO O cb C M CM r-:  o  T- o o_  CD  CM  s  CO CO s  s  CO  Is  CD re o o CO 0 0 c o" CO" 3 CM  LO CD  CM CD CM  X — CD o CM  CO CD  00  i- i-  O o o O LCMO o CM I O CO CO CO o o in CD" IL-" x — LO" -" O CO CO CD I CD CD o CM Is  s  CM  LO  CO  cb r-^ CN  s  CM  CM  s  n  CD  o o  re o 0 0 0o0 ICM- CO o o o 3 CO" IL-" I -" IL-" C O O CO re O) CD s  s  O  CD  O CO CO CD I - CO o CD O O X CM CM CO — o O CO b CD cd c b i • CD c co Io co LO" r-" •— t I-" co" CO  o CM  o  Q) «  o o o o o c oo I-" c o" in CO  CO CO CD  s  o o  s  OO  Is  CO  CD CD CD I - CM s  CM CO c 0 Co D 0•*-" C D CO tLO" c o " 00 CD CD o_ CM  00  T-  LO  LO CN  Is  CN  T—  TO CD T3  CD X LU ^ co co" co" co" co" CD E E E E E —'  •—-  E  "  o ro CD ca ofl  E  E  |  E  CO  (0  ro  03  to E^  CO  ro ro E, E  to  < = o « >  T3 C  o | > IS CL c £ CD -*ro —> o — i rn — i Q. c •- -£ — ioo Si 3> Q) -a CD ro O •> £ > ro > c CD CL ro CD o > w > UJ ~ «= LU >> ro _ > J= -!= -C y, 8 8 ro o 3 Q_ *OJ O *OJ o .!= ZJ o 2 <a o a o: h CO CU H CO 2 2 ^ CO c o  0 5  CL CD  >  a  LU  i > — a> 111so CD  -TO. §  CD  2  Lu O E  ro a  CM LO CO  I - 00 tr o o o o tr CM Ico oo CO o CO o o o CO Io 00 CD" co" IL-" co" tf tf O CD CO co 00 CD CD CD CM s  (0 3 C  s  s  s  ro  OJ XJ E CD u CD Q  s  cn  T— T—  LOCO  x—  s  s  -  s  s  T—  CD cn CD tr oo o o o XI cb L O CM CO o" oo cn tr oo co I - co E L O co LO" LO" CD CO CD co LO > O z  =3  O O CD 00 t- o tr O O O CO XI L O CD — t CO O cb CD O t-_ r-_ t-_ r - " co" in ^—'  TO o O O  CM" LO"  r- co  CO  CD Xi § § E -*C-D » CD Q. CD CD CD V) TO C .D  > ?  S  LO  cn co r- tr CD I - t- o o o o o ICM- cn I- o o o oo ^ CD — CD CM CO CD cb t • CM o tr co CM CM CO 00 LO" CO CM" LO" I -" c o " t— T— t— ^— L O CO CD I- L O tr rcn cn o CM  S  >> T3  CM I- co tf CM tr T-^ CD T— CM CM CM 00  CO CO  I-" S  CM I - CD L O T— I C0_ CM co o" t f CD CO s  s  ICD CD O) d E <3 o s  CO CD CD LO  co o cn L O O L O O L O co o co T- CO O r-_ o o CM CM CD CM CO CD" LO" CO" S CO 00 O CM  CM CD  I  CM  co tr CD  O  CD CM  o tr tr 0 L O T0 o CM CO t- 1-  CO CO LO OO  o O o O CD tr o tr 00 CO t- CD T— tr tr o T— i - 00 CD O CO o CX> CO CO CM CM o CM CM CD" LO" c o " r--" I-" — t — t T— T— LO CO r-- CO r-CD CD o CM s  CO tr o o o o O I - I - CO CD CM CO I - CM CO LO CO o o CO CM CO CD t- CM r-^ CD r- CM LO"_ CO o CO 00 CD CM CM I-" oo" I-" co" tf tf LO" T— T— T — T— C M L O C O C D C D 0 0 T— T— CD CD CD CM s  s  s  s  s  >  CD "O CM CO >» CO O o o o co CM Ic co T —O CM CO tt O o co o 3 d 0 0 0 0 00 CD LO" co" X tf LO" CM I0-" L O CO 0 tCDf LU s  s  CD  o CD 0 CO o3 TD C  g CD CD 'g. CD o >-  •4—'  -4—"  C 0 o 0 o E 5 P  CD  CD  3=  O  E jo o o tz 3 Q. 0 o CL CD — a: CO 0 O x: E Q. CO 5 .2 > LU 1 > ct" J3co = CD3. 0 _ CO Di 1— CO  x— CD COtr CD CD d f™ I-- ob  CO CO CD  s  LOCO  CM  CM CM  CM  5 o CO -g o CO >o -» -g --**— o CO Q. > 0 co o Q 72 o CO UJ LU -a 1  co  TD  O CO  > 0  LU co 0  • ^ o E co Q 0  CO LO CO  CD O O O o I - CO 00 CM CO T o — CD CD co oo o o C M C O L O 0 0 C M C O 00 00 00 CD o o oo CD CM CM CO CO I -" •*-" CO" co" CM"If)" CD r-~ X — T — X — o CD 00 CO X— CO LO CO o CM OO CD s  CO 3  c>  s  3 <  X—'  CD CO CO o LO CO o CD I - LO CO co" co" CO" I -" CM T LO — CD  CD I - CO O -a- CM C o oo CD CO" M-" LO" CD CD 00 CD CM  CD CN CM CN CM C O CO \  O O O O LO xt o CD CM O O co xt •*"" COI CO O r- CO co co" co" I-" I-" CO" LO" LO" CM X— CO LO CO CD CD CD CD CD CN  o CD CD CM rLO LO d X— CM CN CM CO CO  3  o O O  s  s  s  O LO 00 I s  c  3 -J  s  s  s  CD  LO  LO  T— X—  X—  X— X—  X— X—  "CJ  _ZJ CO  S o CM O O O O IS- IS- CO h- CN O LO > re x T • I00 CM CO -JT LO i - CN C M O O •t C D 0 0 C M CM CO CO X ~ L O O C D s CM"CD"LO" IS-"CD" o" T" LO" cu 0 0 X — D CO T— CM LO CO CO o C CD CD CM CD X —' o co -*-«  ZJ CO  o o O O o CD O LO xf CO CO CO CM00 CM O o o D xf LO i- d C\i T— CM O o Q. C co 0D 0o C MCO CM I -" o O CM CM CO CO ro o < •""" coC " o" C M " C O " C O " LO" co" CD X3 00 00 CO CD CO CM x— LO CO o CN CD CD ID a) 1  s  >  ? co  CO 00co CN o O O o co I- CO o CM CO CO CD o O '"" o 0 0 CD C D C D C D O C O re _ZJ x — CM"co" I-" co" CM"M-" LO" 5 o oo L O C O L O C O C D > o CN CD CO S  CD  E  111  CO CO  x —  CD T3 cz  £  x — O CM  s  I - CO CO O O O O CO o O I - I - CM I o o ICD- O O co M- ««• 00 "3" O XTCD CD O CO CO CO CM CM CO CO XT-" r-." o" co" o" LO" I-" LO CO 00 co CO I CD CD o CM T-" s  s  s  s  s  re nCD Li.  T—  s  s  O  ro  CD  CD  it O  "O  E ro o  08  tq o  10 >  •g o o CL Q. CD > > ro — *-— • CD ZJ coQ O CL U L U 4 — ' CD CD 0 co CD '*= C <CD Q. ro — CD O -5 S CD J= O o < D .ro x : CO S- HI LU 5 CD CD jo > O > c r to i- > ro > ' £ Lu O > CD = c c ro HI .2 CD Q. O o o o -ro £ \k E i - Q CU r- CO CC H CO S S CO •> LL Q co c o  c o  c o  o c  5 £  l |  E  111 Q  LO CO  S  CD tr o o o o CO I - tr o o t— o tr co o in" erf LO" r--" co" O CO r- CN L CD s  CN  CO I - CO cn CN co LO CO cn CN CN tf LO" D 00 co C o CM s  CD  cn  CO  I - tr O CO tr CO o o o O cn re CN I - I - CM o o tr tf 00 CO CO o co o co o — r I -" 3 CM"co" co" co" LO" r-" CD xi C O L O C O 0 0 CO CD CD o o CN r-u_ s  s  o o o o cn tr ICN- CO O) CM N CO N C I— OD CN LO CO o o CN CO cn CM CO CO CO co o tf L O " r-" co" o" cn 00 LO CO o CD cn t— CN  CD LO CD re CMCO LO 00 I 00 tr 3 " C o" O tr T— re  s  s  T3 3 -*-» CO  «  CD XI cn E CO cu o  O  CO  o 01 IZ ro co  ro JD > 1  °  CN  o  o o o o LO cn CO CM CD OO CO o o o CO v r^. <~> CO O t- C O CO ^ ^ r- co CN" LO t- 1- CN tr cb LO co co tr r-CO CO O ) (3) — t CM  LO  Q> Q CD cn T XI cm  T-  CO  LO o CN tr o" co" i - " •<- tr  E  CD > O  CN o cn o CD o co I -  o o O o  o o co co IO -" C L O  co o o r- LO co  s  cn CD  T-  •>-  CO CM  00  CM  I CD CM  i -  t-  s  s  r- tr CD tr co  CN  CO CO  0 o O O O CD ICM- 00 CO oo o co 0 CD CD o o o tr I - CM 00 CD o cn CM 00_ 00 oo o LO" I-" CM"I-" co" tf LO" 4-1 co CM LO T— CD LO CD CO tf cn CM  CD 00 X) CD  E _3  s  CO CO •>- tr LO C M CM" T-" CM  co co  CD LO O CM LO — rCO CO  s  s  CN LO r-  cn tr  s  s  s  s  u  > o TD CD T3 C  CD  -4—» X LU  00 IT—s  CD Xi  CM I s  E  CO  o" CN LO — t  CD  Q.  O O O O LO tr o CN cn CO O O tr tr0 cb O o— o_ LO" 0 CM x I -" I -" co" CM CO I LO CO . CM cn cn  T—  LO CTD CD  LO" CN  s  CD CO CN  s  LO LO CD CM 0 0 LO 00 00  s  T—  CD CO  o co CD  CD ofl  I co c o »> -a o o r  T3 CZ  c o CO CD  CDCD CD  o  CL  —  -+—'  c 3 r< o o. O '5 c L ro — a) o Q.CD >  co ^ >  > CO r£  „, CD <Z  co  Jr o3 CO _1-i CD -CO n <TCD 2 •»  -2 COo S-5  CDCD  Q >  >  CD  >  0) LU  cuLU -»—' I O ^o < XZ m < X IIICOmJ- § S i t LS so Lu O — ^ co > £ ^ c • £ 2 £ CD L L E o o = t z o E CD CZ S ^ o o JJ £ Q co ' d o o IoE CO < • LL U J Q I - Q O. O — C D CO S >-  5  I—  CO  oi  £  3  &  UJ  LO LO CO  0> J3 ^ O o O  LO CN O O O o co I - CO CM CM M LO o CM CO O t- C O C L^O T— O« CO o O •Sf C D C O O C D CO CD CO CO I - CD T—" CO •ST I-" co" CN LO" LO LO LO CO CO CD CO x— CD CD CM s  s  s  co o o o o CD CO CM LO O o XI CN TJ- co co o E LO COT - r~- co O co cu CO -3-CO CL D CD Q. CD CO CO 3  CO -f CD IS-  T— 1— CD CM M- f d 00 CO CO CO CM CM 00 CO T— CO T— CO X— CO LO T— CO CM  00 CM CM o o o O T - I - CO -3; CO CD I - CM co CO T— o o LO CM CO CO co o CD o CO 00 CD d CM CM cb cd o" T— CD" I-" co" co" T— xf LO" CO CO LO CO D 00 CO CO o C CD CD CM s  s  s  3  > CO CM CMI - LD o o o O CD I- CO o T - T— CD T— o o CM CO d CM CMcb CO CM CO CM CD o o 00 CD C D NT CM o" I- co_ o CC O -= OC O C OC O O T— X— T— T— co" co" C M " I " T" ^r" LO" C CO o CD CO x — C O C D L O C O o CM o CD CD I 3O C S  s  -— i »  S  S  co  CO .3 CO CO ro 0 co  >  O CO LO L CD CD  CO  O CO o co C D q co ^ O) CD C CN CM CO I CO CO 00 CO CO CM CO"C LO -" O" I I CM s  S  1I,uu nn  o o s £ CD LO M- CD co o CM CO LO o o CZ r- c 3 o C M C M C D C O ro w —> co" CM"CM"IS-" CD"  S  LU  ro 0 E  _3 o  >  T3 0 TJ X LU  o o O CM I - CO CO 00 xf o o - C M CD I CN CO o CD CN CO cb T00 CO CO CM CO co o C D 00 CD CM T— co" IT—-" co" I-" co" M-" LO" co LO co C D 00 oM C CD CD CM s  s  X~  s  s  — CO CD o o o Q. CM I - CD oco oo O < CM"ICD-"CT— •<*•" r-" co" LO LO CO CD CD  o o  s  o o CD 00 r- I- t- CO I - oo co o CN COCM cb IC M o" in" co" C0 CO CO oo oo O CM T— S  s  s  S  XT o ro 0 co  o3 XI cr. o  o ro  ro O 0 >- 0  c o  § m  o E ro o  c  o  XJ  o r  « > o  CL > CL "w- 0 «a _J 0 0 Q — ID Jr. D !5 & o 0 ^ -C 0 C > > i_ CL ro > cr. l | o ^ & 0 0 5 0 2 S ro Lu O o > 1 ^ 0 £ c c E o _ ro _ > O c ro i_ "o ro =5. = c o o o C ro o -2 m o ' " o HE *E co Q 3 I- co a: H CO 2 -x=  m  LU  CO  t o  o E 0 .!=  3=  Q CC  LU  x :  LU  x :  to  P  LU  CO LO CO  CO tT o o o  o o rCO tf C M CO co oo CD CO LO CMCOCDtf is." tf LO" r--" co" tf LO C O CM cn CO CD oo o_ CM  >• tr OO CM o o ro 00 oCM C O °l co o co- co" x— in  T—  o o tf o o o o o o cn r~- CM tf o co CM LO CM CD Q. CO CM CD o o tr C D co o o o C O c o tr 1 C O C O < o" oo" co" r-" co" r--" LO" co" co 00 00 LO C O C O CD cn CD" CM r- CO (D CO N tf OO LO C M tr o o o o t-o C tr CD tf tr tr o o CO CM CO CM LO CM CD r- 00 CD CO CO CO tr CM M i—t—CO CO o  r-" r-" co" r-~" co" 00 CM LO CO CD OO  CM"tf LO" |s- Oi 00 o CM  >x  TO 00 -*—• O CD oo oo o o T— tf o CO O N- i - CO T— C co C O C O tr tf L O co CO 3 o CD 00 co tT—" — co o CO CO tf 00 is." co" co" c o o " r-~ L O" CO £> o C D r» C O L O C O C O 0 > CD CD cn o_ CM tO  T—  10  1 § co ro  3 C CO  ro 0 co  00 t— 00 o o o o cn |s- CO CD CO CD 00 CO o tr CO LO o CM CM C O CM tf CM 00o CD CM LO co o CM 00 oo CO CO 00 tf oo" co" rT~ ~ " r-~" tf tf LO" — CO L OC O OO 00 oo oo t— t—' CM  LU  c ro cu E  =3  o  5 °  CM t f 00 LO  oo XJ oo co co" h-" E t f tf CD o CD  > a •a  o o o o CD O  |s." co"  LO CO oo cn  CD OO tLO t f CD O) CO T - CD CM ^ C\i 00 oo °° <°_ <° CO CO COO LO t— — t TCO CO •sr tr is. 1-  CM  cu TO CD °>T— CO CM o o o o tr o cn 00 |s- tf CD LCO XI CM oo CM fs. o o c CD o CD cCbO CM 00 OO cu E 00 o o LO_ OO T— CO co o CO O CO CO T— co" T— C co" X  LU  CD  > o z  tf CO tf  |s--  LO CO oo oo  tf LO00 CO 00 t— CM  LO CO  CO o XI £ co o a> Q  CN O O CO CO LO 00 CM" " t f " CO •sr  o o co r-T  o o o o co"  LO CO  CO CO  LO CO CM CO •sf CO CM CO N co ^- m «>«>«« LO L O T- T- Tco Is  S  T-  CM  ^CDT-LOC3)OOOOf--OCOCMLncOLOO g ^ LO CD CD O O COOCDuSi^rvi'ro a « Tf o co © o c o o o l i ; ^ ^ C 00 CN I- CO C0"LOC0"T-TT-Tco -jL O C O N" CO 00 > TCO CO r- CM S  CM o o o o o O CO I- CO CO• TCO o CO o o XI CO CO CM CO I - r~- o co o r- 0 0 CO CO o c o " c o " o" " t f " LO" C M " I " I " o O CO 00 CO CO vo Ix- T— LCO CM CO T— S  s  S  s  XJ 3  co CM  CM CM  S  -  o o o O CO o LO CO T- Ioo I- CoO o CM o o o O CM CD CD . L O C O CM co o 0 0 co •sr cd CM CO LO" CO" LO" CD" 5 J " I " I " c o " LO CO LO CO co a co L O co IT— CM O CO CD E T—" co S  S  CO  ytJ  S  CM CM  S  S  CO  1 § co co > 0  S  S  o o o oo I- CO CO CM CM o CO CO o 00 LO" c o" c o" xfO T— C CO CO o CM 00 T— S  CM • CO  CM O CO CO CD CM O TOO LO CO  LU  S  CM CM  Is  I ,uu  s  ->  LO CO  T~ oo"  o o X —o o CD o CD o"  CO  CO  LO CM  O ro CD CO o3 XJ cr. o CZ 3 O CL CL  o O ILO o S  •<*• CO  O  o co co co o LO o I-1 co CO IS S  XJ o > o  E ro o Q. CD > CD £ 03 j is — an 0 Q co 0 O <D co Q. LU CL -~ CO CD > 0 O JS m 5) >CD-s u -> -> C co 0 ^ O E CD CD ro iS CO 5 LU LU -5 ^ 2 > >- CL _ 3 <• LU O iO t LU ro — ^ X± I=X±=XIi=C O o C Co CoI SoSTO C D0 L L E c CL o 1.1 3 t>n ' S ' a l t o s L L i i J D Q cr c o  c o S  CO LO  1,008, 265,  LU  O >. CO CM O CM o o o O CM I- CO C CO LO o o CO CM CO CO 3 CO* T X — CO CO CO 00 CO o oo" x—"co" I-" co" oo" •C SO t" LO" CO T— co LO CO CM co CO oo  957, 936,  XJ c CO CD E _3 o > XJ CD XJ cz CD -t—' X  une  CO  a.  CD LO CO I- co o to cd CCMO C00 o o O CM co 3 o" LI-O" O) co" co" c LO 3 CO <  Q  ro  >, CO •tr co No 3 tr C CD r— CN o"  t CD o o o O CN I - CO LO 00 CO CO — IN- CD CN CO LO LO oco oo 00 CN CO C tf tf O CD_ 00 CD O- CO oo" r-" co" T—~ tf" LO" t f x— r - LO CO T— CD CO o CN CD CD s  00 CO I - oo oo 4 - co CO c3 — I - r - i— co o —) CN" o" r--" I -" co" t r t— CO LO CO CD CD CD LO  s  o o  s  s  co CN CN o CN 00 O o  o o  T- t f O CN CO LO LO O LO •»f t f K 00 CN 00 LO CO CO CO CO CO tf t f T— LO" I -" IY — C O o_ CN Y—" s  s  o o  LO O CD CD o -" co" CD" LO" co" ILO O t r CD C LO CD  CO "sT CD CO ttrf tr  1 ,uo  s  co r - CO CD LO C N CO CD CD oo CD CO t r LO" CN" C D CN 00  ~o ZS — CO t f CD I - o O O O O o CD CD CO I CN I •+-» CO Y— ocsl o O O oo co D CD CN COtt ff Q. o C -O i - tr LO CO CO O CN CO CO tf 0 < I -" I -" I -" co" co" C D " C O " L O " co C O C O co LO CD CO CN 00 O CD s  s  s  s  1 ,U4  s  CO  CD CD LO o o o O CD I - CO CO q N O) LO co CN CO CD L O LO I - o o I - t f o CD o LO_ 00 CD CO D CD C\i C\i t f I -" LO" I -" I -" co" Y—"tf" LO" tr tr CD CN LO CO C D 0 0 0 0 o CN CD CD s  s  z CZ c m o co co ca > 0 lo _ U Z! L CO •a c i> co cu E  _ZJ o  >  TO cu TO CZ CU X LU  s  s  s  s  LO CO co o o o O 00 t f O O• I— — I CD co co CO o o r - t f t f CD tr tr CO CO co CN CO_ co_ CO o cb c\i c\i t r C O o" o" LO" I -" " ~ Y—"I -" co" t f C N co LO CO Y CO I t t~_ CN CD CD T—' s  ro t r 3 i_ JO  a>  s  S  s  s  -  -  CO CD OO O o o O I - I - 00 IS- CO CD CO 00 t f LO CN CN O o CN CO L 0 LO O od CN CN cb to0 oo CD C O co CO 00 CD CO o 3 tr tr co" tf" LO" C CN LO" I -" co" CO 00 LO CO CN oo 00 s  s  (0  s  ro  OO CD  T CN -  to  co cu  c 0 o E 5 F  c o CO  CO CD ca o3 TO CZ o CL -—•  | co o E ro  o O Q. O 0 '•S 3 C Z i - Lt. C O — 0 1 — i_ O O 0 CO C x: a 0 CO > cz i | LU ^ E o o > _ C O o o > £ CD CZJS .!= ZI O 2 CD = CZ Q Cd H CO DH a. o co S -*—•  t=  o  » >  •g o o ^ > co  a. > 0 0 aL_ LU cn <TO a> O id ro Q) a- CD _ CO CO %• LU LU -2 0) 0 E x: JZ co <- > LU O c c 5 S-TO 0 « ) uu. £E P Q ro o o oS _ i  (fl $ LL  LU  a  CD LO CO  CN c o T— o OO CO T— LO o O lO CN c T—" so o o " o " I -" C O CO LO c Co O" XCD CD  CD  o ICN s  T—  CD"  T— T~ T—  LO CD o c b c\i csi 00 CO LO" I-" CO -3" c Co N  co  s  CN 0 co o o o O I- CM I- CO o 00 0 D c CO 0 0o LO re coII-- Co o o CD c CO CO b Csi csi 0 0 0 0 CO I^r" - CO" o o •<* LO" T— T— 3 •sr CO" T— T— C I-" I-" CD CO L O CO CO o o CD CD CN re s  s  s  s s  s  CD X>  O LO  E  s  T— CD O O O O O CD r- CD 0 0 T— 00 O O CO CD CO •*!co O O LO" T— oo"CM" I-" co" co"•sf L O CO II-_ CM ICD CD  I- •sf CD CM LO CO  CO CM oo T— co o o o O C D o CD 0 T— I- L0O0 CD o o O o CO 0 CD CO o o O c o o o O CD" LO" CM" CM" •<*•" IL-" co" o"T— T— O CO CO 00 c 00 co CO CD CD CM x — x — \—  LO  LO LO  s  C N CD CN  s  s  CD O CD Q  s  T _  s  T —  >>  T3 rj CO  CD to ro O  CD XI  CD  s  E  CM  s  (1) > O  in* -t— z  o LO  LO  c T •sb r T— x —  rj  in  roc o ro  00 I- o o o o •o I- CO co T CO •sr sr CM x —o o CD CD 00 d csi cb co o oo o o CO T—" o"T— oo"LI-" co" co"•CDsr" to" T— CD c CD O CO o T— CD CD T— CM o CM LO  CD XI  00  O -*-»  ro u > O 0  0 0 CO  s  s  CD  s  roH I  CO T3 C  >  ro CD E  CD XI  00 •<*  _ZS E CD o  >  £  s  s  •<*•  s  s  4-1  CO COCM I o LO •si- CO O csi c o •sj" •sr T— CO T— r-" T— Is  •Sf  s  T—  a, co  CD "O CO c LU  o - CO o O ICM o o 00 I c o o o co C N CO •sr •sr •* CO o CO" LO" CM" C N o " I -" c o " L O CO r- CO I- •sj- •SJ- CD CD •«--_ CM  00 I- CO 00 CD CM CO CO CO CM CO s CD CN CO LO I-* co co cn C O CO •sr T— T— CM" •SJ-" LO" T— T— CM C D 00  o o o o « 5 CO o 3 T co oo I- I-" co" L O CM" CM" L O C O 3 co CD C D < CD CD  CD  00o  s  T - CO  s  s  O  CM  o ro CD  | co  CO  5= 12  o3  T3 C o  c O CO Q.*. s ro'o CD  >-  £«= O O o E CD C Q tC  a.  c: o  «>  -w  C 3 O CL  , ro —  CD  M l ro ^ >  LS  I _8 ^ ro ^ o o 2 CD H CO OH 5  > S 2 a 3 «=8 > g V  £  CD  Q.  - o  0  •  ro Q ra a) 0 O > CO 5 LU > x: x: x: to = c c c 2 £ ci O O O "5 iP CO CO H  > 0  a LU a)£ > a LU 0  od °  0  £  LU O rk  E  Q ro LU Q  o co CO  oo fl> . xi m E o. OJ L.  CM CO CD O o o O O h- O O o LO_ CD O CD o C O" o" co" r-." co" CO tr t f LO CO OJ OJ  T—  o tf LO tf C N tCfO C LO O tf LO" r-~" C N " 00 co ICN s  OJ LO co cb c\i r-^ tf tf T—  1 — OJ tf T—  V)  O J CN T— o o o O tt-f CO CM LO CO CM r~— 3 CO T No o C M CO t f M IN N CO t- CN C oo O J o I OJ C O tf tf tf cn co" LO" CN"co" LO" t f LO" 3 LO CD LO CO CM OJ oo < OJ OJ o_ CN s  >> CD CM CMT- CO o o o o CO N- CO 3 LO t f t f CD o oo C M co t fO C 00 CM CO CD C O OJ o" co" r-~" co" tf" tf" L O" LO" t f T— 00 LO CO J 00 o_ O O) OJ CN  tf LO t- co CO CM1^ 00 tf tf  tf  T—  TO CO  CU co co O  CN CO o o o o o CO t f o CD CN CD OJ t f LO o o oo LO t f t f d cb CM CD cb LO L IO - C N LO CD C O CO CO- tr tr tr t f o" CM"r-~" CD" tf" LO" r-~ L O " t f T— r - LO CO I C O o CN OJ OJ s  s  3 cn  0 5» t f o cr j§ o CO i= CO CO ro J32 QJ  CD o o o o CO r~- co co CN CO OJ o oco oo 00 C O CO L O co OJ co" t f o" I-" co" co" t f LO" co LO LO CO C O OJ CO o_ OJ OJ CM T-" rtr  T- 00 00 CO cb CM cb oo tf tr tr  s  CD CO  > 1 ro  IN- CN o t f tr O o o O LO o OJ * OJ cu o Y— o CD C JCN I CM CO CO E Q. LO Ico- O t fJ r t-f~ O o o O L O C O C N tf _3 < tr tr r~-" LO" co" T cb" o" r-T co" C tr— o tr 00 00 — T IM - "T— CN LO CO > o_ OJ OJ CN T— TO cu s  s  TO  X  LU  XICOCOOJLOOOOOLOIs-COOON-OJtfOJ o LTJ co OJ tf o O ° M CO »; ^ m coit- co co_ o T-_ co_ ooi °^ ^ ^ 1°. Ntf ro LO" tf" h~" r-~" co" oo" tf LO" T- TTO CN LO CO 00 OO 00 tOJ OJ O CM  o ro cu co  o cn _c: TO cn o > o i f to £ 06 o  o3  TO  O E ro o cu  c  o  CL CZ  c  o  o  -+—'  co g. cu o >"E « o E S P  £  •£ ft  ro  3 g  .!= 3  Q Ct  c  <  CD  h  .T_O CU  <~ in cu +-*  o l g CL > < ro _ o > ro & o JS >= £c UJ 2 (D o a. o 3 CO DT h- CO 2 o o  «=  CC in  JO  >  Q. cu Q OJ LU  0) LU  1_  > QJ LU  CO  •4-1  co QJ O co "5 S CD LL E o o -g £ Q ro 2 CO > LL LU Q "c  — COoT— Q. CD I < co"  oo C M O o o o 00 o T— O •st o o o 00 CD CD o CO o o" in m " I -" C D " T— ICM m CO in 00 o> o o CM s  s  s  C O CM CN OO oo 00 CO 00 co_ CM O CD o X—* co" 00" I-" co" T— CM in CO CO CO  «  ca  3 k_ X