diff --git a/Caesar Lisflood 1.9j.cs b/Caesar Lisflood 1.9j.cs
new file mode 100644
index 0000000..b59d7dc
--- /dev/null
+++ b/Caesar Lisflood 1.9j.cs
@@ -0,0 +1,14408 @@
+// CAESAR Lisflood is available under the terms of a GNU licence. see below:
+//
+// GNU GENERAL PUBLIC LICENSE
+// Version 3, 29 June 2007
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+// Everyone is permitted to copy and distribute verbatim copies
+// of this license document, but changing it is not allowed.
+
+// Preamble
+
+// The GNU General Public License is a free, copyleft license for
+//software and other kinds of works
+
+// The licenses for most software and other practical works are designed
+//to take away your freedom to share and change the works. By contrast,
+//the GNU General Public License is intended to guarantee your freedom to
+//share and change all versions of a program--to make sure it remains free
+//software for all its users. We, the Free Software Foundation, use the
+//GNU General Public License for most of our software; it applies also to
+//any other work released this way by its authors. You can apply it to
+//your programs, too.
+
+// When we speak of free software, we are referring to freedom, not
+//price. Our General Public Licenses are designed to make sure that you
+//have the freedom to distribute copies of free software (and charge for
+//them if you wish), that you receive source code or can get it if you
+//want it, that you can change the software or use pieces of it in new
+//free programs, and that you know you can do these things.
+
+// To protect your rights, we need to prevent others from denying you
+//these rights or asking you to surrender the rights. Therefore, you have
+//certain responsibilities if you distribute copies of the software, or if
+//you modify it: responsibilities to respect the freedom of others.
+
+// For example, if you distribute copies of such a program, whether
+//gratis or for a fee, you must pass on to the recipients the same
+//freedoms that you received. You must make sure that they, too, receive
+//or can get the source code. And you must show them these terms so they
+//know their rights.
+
+// Developers that use the GNU GPL protect your rights with two steps:
+//(1) assert copyright on the software, and (2) offer you this License
+//giving you legal permission to copy, distribute and/or modify it.
+
+// For the developers' and authors' protection, the GPL clearly explains
+//that there is no warranty for this free software. For both users' and
+//authors' sake, the GPL requires that modified versions be marked as
+//changed, so that their problems will not be attributed erroneously to
+//authors of previous versions.
+
+// Some devices are designed to deny users access to install or run
+//modified versions of the software inside them, although the manufacturer
+//can do so. This is fundamentally incompatible with the aim of
+//protecting users' freedom to change the software. The systematic
+//pattern of such abuse occurs in the area of products for individuals to
+//use, which is precisely where it is most unacceptable. Therefore, we
+//have designed this version of the GPL to prohibit the practice for those
+//products. If such problems arise substantially in other domains, we
+//stand ready to extend this provision to those domains in future versions
+//of the GPL, as needed to protect the freedom of users.
+
+// Finally, every program is threatened constantly by software patents.
+//States should not allow patents to restrict development and use of
+//software on general-purpose computers, but in those that do, we wish to
+//avoid the special danger that patents applied to a free program could
+//make it effectively proprietary. To prevent this, the GPL assures that
+//patents cannot be used to render the program non-free.
+
+// The precise terms and conditions for copying, distribution and
+//modification follow.
+
+// TERMS AND CONDITIONS
+
+// 0. Definitions.
+
+// "This License" refers to version 3 of the GNU General Public License.
+
+// "Copyright" also means copyright-like laws that apply to other kinds of
+//works, such as semiconductor masks.
+
+// "The Program" refers to any copyrightable work licensed under this
+//License. Each licensee is addressed as "you". "Licensees" and
+//"recipients" may be individuals or organizations.
+
+// To "modify" a work means to copy from or adapt all or part of the work
+//in a fashion requiring copyright permission, other than the making of an
+//exact copy. The resulting work is called a "modified version" of the
+//earlier work or a work "based on" the earlier work.
+
+// A "covered work" means either the unmodified Program or a work based
+//on the Program.
+
+// To "propagate" a work means to do anything with it that, without
+//permission, would make you directly or secondarily liable for
+//infringement under applicable copyright law, except executing it on a
+//computer or modifying a private copy. Propagation includes copying,
+//distribution (with or without modification), making available to the
+//public, and in some countries other activities as well.
+
+// To "convey" a work means any kind of propagation that enables other
+//parties to make or receive copies. Mere interaction with a user through
+//a computer network, with no transfer of a copy, is not conveying.
+
+// An interactive user interface displays "Appropriate Legal Notices"
+//to the extent that it includes a convenient and prominently visible
+//feature that (1) displays an appropriate copyright notice, and (2)
+//tells the user that there is no warranty for the work (except to the
+//extent that warranties are provided), that licensees may convey the
+//work under this License, and how to view a copy of this License. If
+//the interface presents a list of user commands or options, such as a
+//menu, a prominent item in the list meets this criterion.
+
+// 1. Source Code.
+
+// The "source code" for a work means the preferred form of the work
+//for making modifications to it. "Object code" means any non-source
+//form of a work.
+
+// A "Standard Interface" means an interface that either is an official
+//standard defined by a recognized standards body, or, in the case of
+//interfaces specified for a particular programming language, one that
+//is widely used among developers working in that language.
+
+// The "System Libraries" of an executable work include anything, other
+//than the work as a whole, that (a) is included in the normal form of
+//packaging a Major Component, but which is not part of that Major
+//Component, and (b) serves only to enable use of the work with that
+//Major Component, or to implement a Standard Interface for which an
+//implementation is available to the public in source code form. A
+//"Major Component", in this context, means a major essential component
+//(kernel, window system, and so on) of the specific operating system
+//(if any) on which the executable work runs, or a compiler used to
+//produce the work, or an object code interpreter used to run it.
+
+// The "Corresponding Source" for a work in object code form means all
+//the source code needed to generate, install, and (for an executable
+//work) run the object code and to modify the work, including scripts to
+//control those activities. However, it does not include the work's
+//System Libraries, or general-purpose tools or generally available free
+//programs which are used unmodified in performing those activities but
+//which are not part of the work. For example, Corresponding Source
+//includes interface definition files associated with source files for
+//the work, and the source code for shared libraries and dynamically
+//linked subprograms that the work is specifically designed to require,
+//such as by intimate data communication or control flow between those
+//subprograms and other parts of the work.
+
+// The Corresponding Source need not include anything that users
+//can regenerate automatically from other parts of the Corresponding
+//Source.
+
+// The Corresponding Source for a work in source code form is that
+//same work.
+
+// 2. Basic Permissions.
+
+// All rights granted under this License are granted for the term of
+//copyright on the Program, and are irrevocable provided the stated
+//conditions are met. This License explicitly affirms your unlimited
+//permission to run the unmodified Program. The output from running a
+//covered work is covered by this License only if the output, given its
+//content, constitutes a covered work. This License acknowledges your
+//rights of fair use or other equivalent, as provided by copyright law.
+
+// You may make, run and propagate covered works that you do not
+//convey, without conditions so long as your license otherwise remains
+//in force. You may convey covered works to others for the sole purpose
+//of having them make modifications exclusively for you, or provide you
+//with facilities for running those works, provided that you comply with
+//the terms of this License in conveying all material for which you do
+//not control copyright. Those thus making or running the covered works
+//for you must do so exclusively on your behalf, under your direction
+//and control, on terms that prohibit them from making any copies of
+//your copyrighted material outside their relationship with you.
+
+// Conveying under any other circumstances is permitted solely under
+//the conditions stated below. Sublicensing is not allowed; section 10
+//makes it unnecessary.
+
+// 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+// No covered work shall be deemed part of an effective technological
+//measure under any applicable law fulfilling obligations under article
+//11 of the WIPO copyright treaty adopted on 20 December 1996, or
+//similar laws prohibiting or restricting circumvention of such
+//measures.
+
+// When you convey a covered work, you waive any legal power to forbid
+//circumvention of technological measures to the extent such circumvention
+//is effected by exercising rights under this License with respect to
+//the covered work, and you disclaim any intention to limit operation or
+//modification of the work as a means of enforcing, against the work's
+//users, your or third parties' legal rights to forbid circumvention of
+//technological measures.
+
+// 4. Conveying Verbatim Copies.
+
+// You may convey verbatim copies of the Program's source code as you
+//receive it, in any medium, provided that you conspicuously and
+//appropriately publish on each copy an appropriate copyright notice;
+//keep intact all notices stating that this License and any
+//non-permissive terms added in accord with section 7 apply to the code;
+//keep intact all notices of the absence of any warranty; and give all
+//recipients a copy of this License along with the Program.
+
+// You may charge any price or no price for each copy that you convey,
+//and you may offer support or warranty protection for a fee.
+
+// 5. Conveying Modified Source Versions.
+
+// You may convey a work based on the Program, or the modifications to
+//produce it from the Program, in the form of source code under the
+//terms of section 4, provided that you also meet all of these conditions:
+
+// a) The work must carry prominent notices stating that you modified
+// it, and giving a relevant date.
+
+// b) The work must carry prominent notices stating that it is
+// released under this License and any conditions added under section
+// 7. This requirement modifies the requirement in section 4 to
+// "keep intact all notices".
+
+// c) You must license the entire work, as a whole, under this
+// License to anyone who comes into possession of a copy. This
+// License will therefore apply, along with any applicable section 7
+// additional terms, to the whole of the work, and all its parts,
+// regardless of how they are packaged. This License gives no
+// permission to license the work in any other way, but it does not
+// invalidate such permission if you have separately received it.
+
+// d) If the work has interactive user interfaces, each must display
+// Appropriate Legal Notices; however, if the Program has interactive
+// interfaces that do not display Appropriate Legal Notices, your
+// work need not make them do so.
+
+// A compilation of a covered work with other separate and independent
+//works, which are not by their nature extensions of the covered work,
+//and which are not combined with it such as to form a larger program,
+//in or on a volume of a storage or distribution medium, is called an
+//"aggregate" if the compilation and its resulting copyright are not
+//used to limit the access or legal rights of the compilation's users
+//beyond what the individual works permit. Inclusion of a covered work
+//in an aggregate does not cause this License to apply to the other
+//parts of the aggregate.
+
+// 6. Conveying Non-Source Forms.
+
+// You may convey a covered work in object code form under the terms
+//of sections 4 and 5, provided that you also convey the
+//machine-readable Corresponding Source under the terms of this License,
+//in one of these ways:
+
+// a) Convey the object code in, or embodied in, a physical product
+// (including a physical distribution medium), accompanied by the
+// Corresponding Source fixed on a durable physical medium
+// customarily used for software interchange.
+
+// b) Convey the object code in, or embodied in, a physical product
+// (including a physical distribution medium), accompanied by a
+// written offer, valid for at least three years and valid for as
+// long as you offer spare parts or customer support for that product
+// model, to give anyone who possesses the object code either (1) a
+// copy of the Corresponding Source for all the software in the
+// product that is covered by this License, on a durable physical
+// medium customarily used for software interchange, for a price no
+// more than your reasonable cost of physically performing this
+// conveying of source, or (2) access to copy the
+// Corresponding Source from a network server at no charge.
+
+// c) Convey individual copies of the object code with a copy of the
+// written offer to provide the Corresponding Source. This
+// alternative is allowed only occasionally and noncommercially, and
+// only if you received the object code with such an offer, in accord
+// with subsection 6b.
+
+// d) Convey the object code by offering access from a designated
+// place (gratis or for a charge), and offer equivalent access to the
+// Corresponding Source in the same way through the same place at no
+// further charge. You need not require recipients to copy the
+// Corresponding Source along with the object code. If the place to
+// copy the object code is a network server, the Corresponding Source
+// may be on a different server (operated by you or a third party)
+// that supports equivalent copying facilities, provided you maintain
+// clear directions next to the object code saying where to find the
+// Corresponding Source. Regardless of what server hosts the
+// Corresponding Source, you remain obligated to ensure that it is
+// available for as long as needed to satisfy these requirements.
+
+// e) Convey the object code using peer-to-peer transmission, provided
+// you inform other peers where the object code and Corresponding
+// Source of the work are being offered to the general public at no
+// charge under subsection 6d.
+
+// A separable portion of the object code, whose source code is excluded
+//from the Corresponding Source as a System Library, need not be
+//included in conveying the object code work.
+
+// A "User Product" is either (1) a "consumer product", which means any
+//tangible personal property which is normally used for personal, family,
+//or household purposes, or (2) anything designed or sold for incorporation
+//into a dwelling. In determining whether a product is a consumer product,
+//doubtful cases shall be resolved in favor of coverage. For a particular
+//product received by a particular user, "normally used" refers to a
+//typical or common use of that class of product, regardless of the status
+//of the particular user or of the way in which the particular user
+//actually uses, or expects or is expected to use, the product. A product
+//is a consumer product regardless of whether the product has substantial
+//commercial, industrial or non-consumer uses, unless such uses represent
+//the only significant mode of use of the product.
+
+// "Installation Information" for a User Product means any methods,
+//procedures, authorization keys, or other information required to install
+//and execute modified versions of a covered work in that User Product from
+//a modified version of its Corresponding Source. The information must
+//suffice to ensure that the continued functioning of the modified object
+//code is in no case prevented or interfered with solely because
+//modification has been made.
+
+// If you convey an object code work under this section in, or with, or
+//specifically for use in, a User Product, and the conveying occurs as
+//part of a transaction in which the right of possession and use of the
+//User Product is transferred to the recipient in perpetuity or for a
+//fixed term (regardless of how the transaction is characterized), the
+//Corresponding Source conveyed under this section must be accompanied
+//by the Installation Information. But this requirement does not apply
+//if neither you nor any third party retains the ability to install
+//modified object code on the User Product (for example, the work has
+//been installed in ROM).
+
+// The requirement to provide Installation Information does not include a
+//requirement to continue to provide support service, warranty, or updates
+//for a work that has been modified or installed by the recipient, or for
+//the User Product in which it has been modified or installed. Access to a
+//network may be denied when the modification itself materially and
+//adversely affects the operation of the network or violates the rules and
+//protocols for communication across the network.
+
+// Corresponding Source conveyed, and Installation Information provided,
+//in accord with this section must be in a format that is publicly
+//documented (and with an implementation available to the public in
+//source code form), and must require no special password or key for
+//unpacking, reading or copying.
+
+// 7. Additional Terms.
+
+// "Additional permissions" are terms that supplement the terms of this
+//License by making exceptions from one or more of its conditions.
+//Additional permissions that are applicable to the entire Program shall
+//be treated as though they were included in this License, to the extent
+//that they are valid under applicable law. If additional permissions
+//apply only to part of the Program, that part may be used separately
+//under those permissions, but the entire Program remains governed by
+//this License without regard to the additional permissions.
+
+// When you convey a copy of a covered work, you may at your option
+//remove any additional permissions from that copy, or from any part of
+//it. (Additional permissions may be written to require their own
+//removal in certain cases when you modify the work.) You may place
+//additional permissions on material, added by you to a covered work,
+//for which you have or can give appropriate copyright permission.
+
+// Notwithstanding any other provision of this License, for material you
+//add to a covered work, you may (if authorized by the copyright holders of
+//that material) supplement the terms of this License with terms:
+
+// a) Disclaiming warranty or limiting liability differently from the
+// terms of sections 15 and 16 of this License; or
+
+// b) Requiring preservation of specified reasonable legal notices or
+// author attributions in that material or in the Appropriate Legal
+// Notices displayed by works containing it; or
+
+// c) Prohibiting misrepresentation of the origin of that material, or
+// requiring that modified versions of such material be marked in
+// reasonable ways as different from the original version; or
+
+// d) Limiting the use for publicity purposes of names of licensors or
+// authors of the material; or
+
+// e) Declining to grant rights under trademark law for use of some
+// trade names, trademarks, or service marks; or
+
+// f) Requiring indemnification of licensors and authors of that
+// material by anyone who conveys the material (or modified versions of
+// it) with contractual assumptions of liability to the recipient, for
+// any liability that these contractual assumptions directly impose on
+// those licensors and authors.
+
+// All other non-permissive additional terms are considered "further
+//restrictions" within the meaning of section 10. If the Program as you
+//received it, or any part of it, contains a notice stating that it is
+//governed by this License along with a term that is a further
+//restriction, you may remove that term. If a license document contains
+//a further restriction but permits relicensing or conveying under this
+//License, you may add to a covered work material governed by the terms
+//of that license document, provided that the further restriction does
+//not survive such relicensing or conveying.
+
+// If you add terms to a covered work in accord with this section, you
+//must place, in the relevant source files, a statement of the
+//additional terms that apply to those files, or a notice indicating
+//where to find the applicable terms.
+
+// Additional terms, permissive or non-permissive, may be stated in the
+//form of a separately written license, or stated as exceptions;
+//the above requirements apply either way.
+
+// 8. Termination.
+
+// You may not propagate or modify a covered work except as expressly
+//provided under this License. Any attempt otherwise to propagate or
+//modify it is void, and will automatically terminate your rights under
+//this License (including any patent licenses granted under the third
+//paragraph of section 11).
+
+// However, if you cease all violation of this License, then your
+//license from a particular copyright holder is reinstated (a)
+//provisionally, unless and until the copyright holder explicitly and
+//finally terminates your license, and (b) permanently, if the copyright
+//holder fails to notify you of the violation by some reasonable means
+//prior to 60 days after the cessation.
+
+// Moreover, your license from a particular copyright holder is
+//reinstated permanently if the copyright holder notifies you of the
+//violation by some reasonable means, this is the first time you have
+//received notice of violation of this License (for any work) from that
+//copyright holder, and you cure the violation prior to 30 days after
+//your receipt of the notice.
+
+// Termination of your rights under this section does not terminate the
+//licenses of parties who have received copies or rights from you under
+//this License. If your rights have been terminated and not permanently
+//reinstated, you do not qualify to receive new licenses for the same
+//material under section 10.
+
+// 9. Acceptance Not Required for Having Copies.
+
+// You are not required to accept this License in order to receive or
+//run a copy of the Program. Ancillary propagation of a covered work
+//occurring solely as a consequence of using peer-to-peer transmission
+//to receive a copy likewise does not require acceptance. However,
+//nothing other than this License grants you permission to propagate or
+//modify any covered work. These actions infringe copyright if you do
+//not accept this License. Therefore, by modifying or propagating a
+//covered work, you indicate your acceptance of this License to do so.
+
+// 10. Automatic Licensing of Downstream Recipients.
+
+// Each time you convey a covered work, the recipient automatically
+//receives a license from the original licensors, to run, modify and
+//propagate that work, subject to this License. You are not responsible
+//for enforcing compliance by third parties with this License.
+
+// An "entity transaction" is a transaction transferring control of an
+//organization, or substantially all assets of one, or subdividing an
+//organization, or merging organizations. If propagation of a covered
+//work results from an entity transaction, each party to that
+//transaction who receives a copy of the work also receives whatever
+//licenses to the work the party's predecessor in interest had or could
+//give under the previous paragraph, plus a right to possession of the
+//Corresponding Source of the work from the predecessor in interest, if
+//the predecessor has it or can get it with reasonable efforts.
+
+// You may not impose any further restrictions on the exercise of the
+//rights granted or affirmed under this License. For example, you may
+//not impose a license fee, royalty, or other charge for exercise of
+//rights granted under this License, and you may not initiate litigation
+//(including a cross-claim or counterclaim in a lawsuit) alleging that
+//any patent claim is infringed by making, using, selling, offering for
+//sale, or importing the Program or any portion of it.
+
+// 11. Patents.
+
+// A "contributor" is a copyright holder who authorizes use under this
+//License of the Program or a work on which the Program is based. The
+//work thus licensed is called the contributor's "contributor version".
+
+// A contributor's "essential patent claims" are all patent claims
+//owned or controlled by the contributor, whether already acquired or
+//hereafter acquired, that would be infringed by some manner, permitted
+//by this License, of making, using, or selling its contributor version,
+//but do not include claims that would be infringed only as a
+//consequence of further modification of the contributor version. For
+//purposes of this definition, "control" includes the right to grant
+//patent sublicenses in a manner consistent with the requirements of
+//this License.
+
+// Each contributor grants you a non-exclusive, worldwide, royalty-free
+//patent license under the contributor's essential patent claims, to
+//make, use, sell, offer for sale, import and otherwise run, modify and
+//propagate the contents of its contributor version.
+
+// In the following three paragraphs, a "patent license" is any express
+//agreement or commitment, however denominated, not to enforce a patent
+//(such as an express permission to practice a patent or covenant not to
+//sue for patent infringement). To "grant" such a patent license to a
+//party means to make such an agreement or commitment not to enforce a
+//patent against the party.
+
+// If you convey a covered work, knowingly relying on a patent license,
+//and the Corresponding Source of the work is not available for anyone
+//to copy, free of charge and under the terms of this License, through a
+//publicly available network server or other readily accessible means,
+//then you must either (1) cause the Corresponding Source to be so
+//available, or (2) arrange to deprive yourself of the benefit of the
+//patent license for this particular work, or (3) arrange, in a manner
+//consistent with the requirements of this License, to extend the patent
+//license to downstream recipients. "Knowingly relying" means you have
+//actual knowledge that, but for the patent license, your conveying the
+//covered work in a country, or your recipient's use of the covered work
+//in a country, would infringe one or more identifiable patents in that
+//country that you have reason to believe are valid.
+
+// If, pursuant to or in connection with a single transaction or
+//arrangement, you convey, or propagate by procuring conveyance of, a
+//covered work, and grant a patent license to some of the parties
+//receiving the covered work authorizing them to use, propagate, modify
+//or convey a specific copy of the covered work, then the patent license
+//you grant is automatically extended to all recipients of the covered
+//work and works based on it.
+
+// A patent license is "discriminatory" if it does not include within
+//the scope of its coverage, prohibits the exercise of, or is
+//conditioned on the non-exercise of one or more of the rights that are
+//specifically granted under this License. You may not convey a covered
+//work if you are a party to an arrangement with a third party that is
+//in the business of distributing software, under which you make payment
+//to the third party based on the extent of your activity of conveying
+//the work, and under which the third party grants, to any of the
+//parties who would receive the covered work from you, a discriminatory
+//patent license (a) in connection with copies of the covered work
+//conveyed by you (or copies made from those copies), or (b) primarily
+//for and in connection with specific products or compilations that
+//contain the covered work, unless you entered into that arrangement,
+//or that patent license was granted, prior to 28 March 2007.
+
+// Nothing in this License shall be construed as excluding or limiting
+//any implied license or other defenses to infringement that may
+//otherwise be available to you under applicable patent law.
+
+// 12. No Surrender of Others' Freedom.
+
+// If conditions are imposed on you (whether by court order, agreement or
+//otherwise) that contradict the conditions of this License, they do not
+//excuse you from the conditions of this License. If you cannot convey a
+//covered work so as to satisfy simultaneously your obligations under this
+//License and any other pertinent obligations, then as a consequence you may
+//not convey it at all. For example, if you agree to terms that obligate you
+//to collect a royalty for further conveying from those to whom you convey
+//the Program, the only way you could satisfy both those terms and this
+//License would be to refrain entirely from conveying the Program.
+
+// 13. Use with the GNU Affero General Public License.
+
+// Notwithstanding any other provision of this License, you have
+//permission to link or combine any covered work with a work licensed
+//under version 3 of the GNU Affero General Public License into a single
+//combined work, and to convey the resulting work. The terms of this
+//License will continue to apply to the part which is the covered work,
+//but the special requirements of the GNU Affero General Public License,
+//section 13, concerning interaction through a network will apply to the
+//combination as such.
+
+// 14. Revised Versions of this License.
+
+// The Free Software Foundation may publish revised and/or new versions of
+//the GNU General Public License from time to time. Such new versions will
+//be similar in spirit to the present version, but may differ in detail to
+//address new problems or concerns.
+
+// Each version is given a distinguishing version number. If the
+//Program specifies that a certain numbered version of the GNU General
+//Public License "or any later version" applies to it, you have the
+//option of following the terms and conditions either of that numbered
+//version or of any later version published by the Free Software
+//Foundation. If the Program does not specify a version number of the
+//GNU General Public License, you may choose any version ever published
+//by the Free Software Foundation.
+
+// If the Program specifies that a proxy can decide which future
+//versions of the GNU General Public License can be used, that proxy's
+//public statement of acceptance of a version permanently authorizes you
+//to choose that version for the Program.
+
+// Later license versions may give you additional or different
+//permissions. However, no additional obligations are imposed on any
+//author or copyright holder as a result of your choosing to follow a
+//later version.
+
+// 15. Disclaimer of Warranty.
+
+// THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+//APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+//HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+//OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+//THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+//IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+//ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+// 16. Limitation of Liability.
+
+// IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+//WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+//THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+//GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+//USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+//DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+//PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+//EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+//SUCH DAMAGES.
+
+// 17. Interpretation of Sections 15 and 16.
+
+// If the disclaimer of warranty and limitation of liability provided
+//above cannot be given local legal effect according to their terms,
+//reviewing courts shall apply local law that most closely approximates
+//an absolute waiver of all civil liability in connection with the
+//Program, unless a warranty or assumption of liability accompanies a
+//copy of the Program in return for a fee.
+
+// END OF TERMS AND CONDITIONS
+
+// How to Apply These Terms to Your New Programs
+
+// If you develop a new program, and you want it to be of the greatest
+//possible use to the public, the best way to achieve this is to make it
+//free software which everyone can redistribute and change under these terms.
+
+// To do so, attach the following notices to the program. It is safest
+//to attach them to the start of each source file to most effectively
+//state the exclusion of warranty; and each file should have at least
+//the "copyright" line and a pointer to where the full notice is found.
+
+//
+// Copyright (C)
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+//Also add information on how to contact you by electronic and paper mail.
+
+// If the program does terminal interaction, make it output a short
+//notice like this when it starts in an interactive mode:
+
+// Copyright (C)
+// This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+// This is free software, and you are welcome to redistribute it
+// under certain conditions; type `show c' for details.
+//
+
+//The hypothetical commands `show w' and `show c' should show the appropriate
+//parts of the General Public License. Of course, your program's commands
+//might be different; for a GUI interface, you would use an "about box".
+
+// You should also get your employer (if you work as a programmer) or school,
+//if any, to sign a "copyright disclaimer" for the program, if necessary.
+//For more information on this, and how to apply and follow the GNU GPL, see
+//.
+
+// The GNU General Public License does not permit incorporating your program
+//into proprietary programs. If your program is a subroutine library, you
+//may consider it more useful to permit linking proprietary applications with
+//the library. If this is what you want to do, use the GNU Lesser General
+//Public License instead of this License. But first, please read
+//.
+
+
+// 1.8d notes. tab/space/comma separated input files
+// fixed error relating to jmean and min time step.
+// 5960 - added baseflow instead of j_mean in get_catchment_input_points() make it similar to 1.7a
+// 6001 - edited numberof points counter - was possibly overwriting by one...
+
+// 1.8f notes - now speeds up if running with less than 9 grainsizes, vectors in outputs returns..
+
+
+
+using System.IO;
+using System;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Data;
+using System.Text;
+using System.Net;
+using System.Xml; //JMW
+using System.Threading;
+using System.Threading.Tasks;
+
+
+namespace caesar1
+{
+ ///
+ /// Summary description for Form1.
+ ///
+ ///
+
+
+
+ public class Form1 : System.Windows.Forms.Form
+ {
+
+
+ private System.Drawing.Bitmap m_objDrawingSurface;
+ //JMW
+ [System.Runtime.InteropServices.DllImport("gdi32.dll")]
+ public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth,
+ int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwROP);
+
+ private System.ComponentModel.IContainer components;
+
+ //Jorge variables
+
+ public static double magnifyValue = 0;
+ public static int updateClick = 0;
+ private double[] zoomFactor = { .25, .33, .50, .66, .80, 1, 1.25, 1.5, 2.0, 2.5, 3.0 };
+ private double[] contrastFactor = { 1, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3 };
+ private double contrastMultiplier = 0;
+ public int imageCount = 1;
+ public int imageCount2 = 0;
+ int coordinateDone = 0;
+ double urfinalLati, urfinalLongi, llfinalLati, llfinalLongi, yurcorner, xurcorner = 0;
+ public string kml = "";
+ public string KML_FILE_NAME = "animation\\animation.kml";
+ int save_time2, save_interval2 = 0;
+ public string startDate, kmlTime;
+ public DateTime googleTime;
+ public string[] DateArray;
+ public string[] DateArray2;
+
+
+ // toms global variables
+ double gravity = 9.81;
+ const Single g = 9.81F;
+ const Single kappa = 0.4F;
+ double water_depth_erosion_threshold=0.01;
+ int input_time_step=60;
+ int number_of_points=0;
+ double globalsediq=0;
+ double time_1=1;
+ double save_time=0;
+ double creep_time=1;
+ double creep_time2 = 1;
+ double soil_erosion_time = 1;
+ double soil_development_time = 1;
+
+ double bedrock_erosion_threshold = 0;
+ double bedrock_erosion_rate = 0;
+
+ //int tot_number_of_tracer_points=0;
+ int input_type_flag=0; // 0 is water input from points, 1 is input from hydrograph or rainfall file.
+ double failureangle=45;
+ double saveinterval=1000;
+ int counter=0;
+ System.Windows.Forms.Timer gameClock;
+ bool googleoutputflag = false;
+ double waterinput = 0;
+ double waterOut = 0;
+ double in_out_difference = 0;
+ double mannings = 0.04;
+ int rfnum = 1;
+
+ int xmax, ymax;
+ double xll, yll;
+
+ int maxcycle;
+ const int ACTIVE_FACTOR=1;
+ const int TRUE=1;
+ const int FALSE=0;
+ double ERODEFACTOR=0.05;
+ double DX=5;
+ double root=7.07;
+
+ int LIMIT=1;
+ double MIN_Q=0.01;
+ double CREEP_RATE=0.0025;
+ double SOIL_RATE = 0.0025;
+ double active=0.2;
+ int G_MAX=10;
+ double lateral_constant=0.0000002;
+ int grain_array_tot=1;
+
+ double time_factor = 1;
+ double[] j, jo, j_mean, old_j_mean, new_j_mean, dprop, M;
+ //double M=0.005;
+ double baseflow=0.00000005; //end of hyd model variables usually 0.0000005 changed 2/11/05
+ public static double cycle=0;
+ double rain_factor=1;
+ double sediQ=0;
+ double grow_grass_time=0;
+ double duneupdatetime = 0;
+
+ double output_file_save_interval=60;
+ double min_time_step=0;
+ double vegTauCrit=100;
+ public static int graphics_scale = 2; // value that controls the number of bmp pixels per model pixel for the output images.
+ int max_time_step = 0;
+ int dune_mult = 5;
+ double dune_time = 1;
+ double max_vel = 5;
+ double sand_out = 0;
+ double maxdepth = 10;
+ double courant_number = 0.7;
+ double erode_call = 0;
+ double erode_mult = 1;
+ double lateralcounter = 1;
+ double edgeslope = 0.001;
+ double bed_proportion = 0.01;
+ double veg_lat_restriction = 0.1;
+ double lateral_cross_channel_smoothing = 0.0001;
+ double froude_limit = 0.8;
+ double recirculate_proportion = 1;
+
+ double Csuspmax = 0.05; // max concentration of SS allowed in a cell (proportion)
+ double hflow_threshold = 0.001;
+
+ // KAtharine
+ int variable_m_value_flag = 0;
+
+ // grain size variables - the sizes
+ double d1=0.0005;
+ double d2=0.001;
+ double d3=0.002;
+ double d4=0.004;
+ double d5=0.008;
+ double d6=0.016;
+ double d7=0.032;
+ double d8=0.064;
+ double d9=0.128;
+
+
+ // Gez
+ double previous;
+ int hours = 0;
+ double new_cycle = 0;
+ double old_cycle = 0;
+ double tx = 60;
+ double Tx = 0;
+ double tlastcalc = 0;
+ double Qs_step = 0;
+ double Qs_hour = 0;
+ double Qs_over = 0;
+ double Qs_last = 0;
+ double Qw_newvol = 0;
+ double Qw_oldvol = 0;
+ double Qw_lastvol = 0;
+ double Qw_stepvol = 0;
+ double Qw_hourvol = 0;
+ double Qw_hour = 0;
+ double Qw_overvol = 0;
+ double temptotal = 0;
+ double old_sediq = 0;
+ double[] sum_grain, sum_grain2, old_sum_grain,old_sum_grain2, Qg_step, Qg_step2, Qg_hour, Qg_hour2, Qg_over, Qg_over2, Qg_last,Qg_last2;
+ string CATCH_FILE = "catchment.dat";
+ // end gez
+
+ // toms global arrays
+ public static double[,] elev, bedrock, init_elevs, water_depth, area, tempcreep, Tau, Vel, qx, qy, qxs, qys,
+ /* dune arrays */ area_depth, sand, elev2, sand2, grain, elev_diff, spat_var_mannings, erodetot, erodetot3, temp_elev;
+ int[,] index,cross_scan,down_scan, rfarea;
+ bool[,] inputpointsarray;
+ int[] catchment_input_x_coord, catchment_input_y_coord;
+
+ double[,,] vel_dir;
+ double[,,] strata;
+ double[] temp_grain;
+ double[,] hydrograph, dischargeinput, hourly_rain_data, hourly_m_value;
+ double[,,] inputfile;
+ int[,] inpoints;
+ public static double[,,] veg;
+ double[,] edge, edge2; //TJC 27/1/05 array for edges
+ double[] old_j_mean_store;
+ double[,] climate_data;
+ double[, ,] sr, sl, su, sd;
+ double[,] ss;
+
+
+ // MJ global vars
+ double[] fallVelocity;
+ bool[] isSuspended;
+ double[,] Vsusptot;
+ int[] deltaX = new int[9] {0,0,1,1,1,0,-1,-1,-1};
+ int[] deltaY = new int[9] {0,-1,-1,0,1,1,1,0,-1};
+ int [] nActualGridCells;
+ double Jw_newvol = 0.0;
+ double Jw_oldvol = 0.0;
+ double Jw_lastvol = 0.0;
+ double Jw_stepvol = 0.0;
+ double Jw_hourvol = 0.0;
+ double Jw_hour = 0.0;
+ double Jw_overvol = 0.0;
+ double k_evap = 0.0;
+
+ // JOE global vars
+ string[] inputheader; //Read from ASCII DEM
+ double[,] slopeAnalysis; // Initially calculated in percent slope, coverted to radians
+ double[,] aspect; // Radians
+ double[,] hillshade; // 0 to 255
+ double hue = 360.0; // Ranges between 0 and 360 degrees
+ double sat = 0.90; // Ranges between 0 and 1.0 (where 1 is 100%)
+ double val = 1.0; // Ranges between 0 and 1.0 (where 1 is 100%)
+ double red = 0.0;
+ double green = 0.0;
+ double blue = 0.0;
+
+ // siberia submodel parameters
+ double m1 = 1.70;
+ double n1 = 0.69;
+ double Beta3 = 0.000186;
+ double m3 = 0.79;
+ double Beta1 = 1067;
+
+ // sedi tpt flags
+ int einstein = 0;
+ int wilcock = 0;
+ int meyer = 0;
+ int div_inputs = 1;
+ double rain_data_time_step = 60; // time step for rain data - default is 60.
+ double mfiletimestep = 1440; // tiem step for variable M value file
+
+
+ // lisflood caesar adaptation globals
+ int [] catchment_input_counter;
+ int totalinputpoints = 0;
+
+ //JMW Vars
+ string basetext = "CAESAR - Lisflood 1.9j (06/08/2019)";
+ string cfgname = null ; //Config file name
+ string workdir = "c:\\program files\\Caesar\\work\\";
+
+ // stage/tidal variables
+ int fromx, tox, fromy, toy;
+ double stage_input_time_step = 1;
+ double[] stage_inputfile;
+
+ // Soil generation variables
+ double P1, b1, k1, c1, c2, k2, c3, c4;
+
+
+ private Graphics mygraphics;
+ //private Boolean DoingGraphics; //
+ //Form2 form2; //
+ // JMW end
+
+ #region windows_forms_and_controls
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.MainMenu mainMenu1;
+ private System.Windows.Forms.MenuItem menuItem1;
+ private System.Windows.Forms.MenuItem menuItem3;
+ private System.Windows.Forms.MenuItem menuItem4;
+ private System.Windows.Forms.MenuItem menuItem5;
+ private System.Windows.Forms.MenuItem menuItem11;
+ private System.Windows.Forms.MenuItem menuItem12;
+ private System.Windows.Forms.MenuItem menuItem13;
+ private System.Windows.Forms.MenuItem menuItem14;
+ private System.Windows.Forms.MenuItem menuItem25;
+ private System.Windows.Forms.MenuItem menuItemConfigFile;
+ private System.Windows.Forms.MenuItem menuItemConfigFileOpen;
+ private System.Windows.Forms.MenuItem menuItemConfigFileSave;
+ private System.Windows.Forms.MenuItem menuItemConfigFileSaveAs;
+ private System.Windows.Forms.MenuItem menuItem2;
+ private System.Windows.Forms.MenuItem menuItem9;
+ private System.Windows.Forms.MenuItem menuItem8;
+ private System.Windows.Forms.MenuItem menuItem7;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage GridTab;
+ private System.Windows.Forms.TabPage NumericalTab;
+ private System.Windows.Forms.TabPage GrainTab;
+ private System.Windows.Forms.TabPage HydrologyTab;
+ private System.Windows.Forms.TextBox gp3box;
+ private System.Windows.Forms.TextBox gp4box;
+ private System.Windows.Forms.TextBox gp5box;
+ private System.Windows.Forms.TextBox gp6box;
+ private System.Windows.Forms.TextBox gp7box;
+ private System.Windows.Forms.TextBox gp8box;
+ private System.Windows.Forms.TextBox gp9box;
+ private System.Windows.Forms.TextBox gp2box;
+ private System.Windows.Forms.TextBox gp1box;
+ private System.Windows.Forms.TextBox g3box;
+ private System.Windows.Forms.TextBox g4box;
+ private System.Windows.Forms.TextBox g5box;
+ private System.Windows.Forms.TextBox g6box;
+ private System.Windows.Forms.TextBox g7box;
+ private System.Windows.Forms.TextBox g8box;
+ private System.Windows.Forms.TextBox g9box;
+ private System.Windows.Forms.TextBox g2box;
+ private System.Windows.Forms.TextBox g1box;
+ private System.Windows.Forms.Label label22;
+ private System.Windows.Forms.Label label21;
+ private System.Windows.Forms.Label label20;
+ private System.Windows.Forms.Label label19;
+ private System.Windows.Forms.Label label18;
+ private System.Windows.Forms.Label label17;
+ private System.Windows.Forms.Label label16;
+ private System.Windows.Forms.Label label15;
+ private System.Windows.Forms.Label label14;
+ private System.Windows.Forms.Label label13;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.TextBox input_time_step_box;
+ private System.Windows.Forms.TextBox infile4;
+ private System.Windows.Forms.TextBox infile3;
+ private System.Windows.Forms.TextBox infile2;
+ private System.Windows.Forms.TextBox infile1;
+ private System.Windows.Forms.TextBox ybox1;
+ private System.Windows.Forms.TextBox ybox2;
+ private System.Windows.Forms.TextBox ybox3;
+ private System.Windows.Forms.TextBox ybox4;
+ private System.Windows.Forms.TextBox xbox2;
+ private System.Windows.Forms.TextBox xbox3;
+ private System.Windows.Forms.TextBox xbox4;
+ private System.Windows.Forms.TextBox xbox1;
+ private System.Windows.Forms.Label label29;
+ private System.Windows.Forms.Label label44;
+ private System.Windows.Forms.Label label43;
+ private System.Windows.Forms.Label label41;
+ private System.Windows.Forms.CheckBox inbox2;
+ private System.Windows.Forms.CheckBox inbox3;
+ private System.Windows.Forms.CheckBox inbox4;
+ private System.Windows.Forms.CheckBox inbox1;
+ private System.Windows.Forms.Label label42;
+ private System.Windows.Forms.TabPage DescriptionTab;
+ private System.Windows.Forms.TextBox DescBox;
+ private System.Windows.Forms.TextBox ytextbox;
+ private System.Windows.Forms.TextBox xtextbox;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox dxbox;
+ private System.Windows.Forms.Label label11;
+ private System.Windows.Forms.Label label49;
+ private System.Windows.Forms.TextBox mintimestepbox;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.TextBox smoothbox;
+ private System.Windows.Forms.TextBox cyclemaxbox;
+ private System.Windows.Forms.TextBox itermaxbox;
+ private System.Windows.Forms.TextBox limitbox;
+ private System.Windows.Forms.Label label31;
+ private System.Windows.Forms.Label label27;
+ private System.Windows.Forms.Label label26;
+ private System.Windows.Forms.Label label10;
+ private System.Windows.Forms.Label label47;
+ private System.Windows.Forms.StatusBar statusBar1;
+ private System.Windows.Forms.StatusBarPanel IterationStatusPanel;
+ private System.Windows.Forms.StatusBarPanel TimeStatusPanel;
+ private System.Windows.Forms.StatusBarPanel QwStatusPanel;
+ private System.Windows.Forms.StatusBarPanel QsStatusPanel;
+ private System.Windows.Forms.StatusBarPanel InfoStatusPanel;
+ private System.Windows.Forms.StatusBarPanel tempStatusPanel;
+ private System.Windows.Forms.Button start_button;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.MenuItem menuItem26;
+ private System.Windows.Forms.MenuItem menuItem27;
+ private System.Windows.Forms.MenuItem menuItem28;
+ private System.Windows.Forms.MenuItem menuItem29;
+ private System.Windows.Forms.CheckBox suspGS1box;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Label label28;
+ private System.Windows.Forms.TextBox fallGS2box;
+ private System.Windows.Forms.TextBox fallGS1box;
+ private System.Windows.Forms.CheckBox suspGS2box;
+ private System.Windows.Forms.CheckBox suspGS3box;
+ private System.Windows.Forms.CheckBox suspGS4box;
+ private System.Windows.Forms.CheckBox suspGS5box;
+ private System.Windows.Forms.CheckBox suspGS6box;
+ private System.Windows.Forms.CheckBox suspGS7box;
+ private System.Windows.Forms.CheckBox suspGS8box;
+ private System.Windows.Forms.CheckBox suspGS9box;
+ private System.Windows.Forms.Label gpSumLabel;
+ private System.Windows.Forms.Label gpSumLabel2;
+ private System.Windows.Forms.TextBox fallGS3box;
+ private System.Windows.Forms.TextBox fallGS4box;
+ private System.Windows.Forms.TextBox fallGS5box;
+ private System.Windows.Forms.TextBox fallGS6box;
+ private System.Windows.Forms.TextBox fallGS7box;
+ private System.Windows.Forms.TextBox fallGS8box;
+ private System.Windows.Forms.TextBox fallGS9box;
+ private System.Windows.Forms.MenuItem menuItem30;
+ private System.Windows.Forms.MenuItem menuItem31;
+ private System.Windows.Forms.MenuItem menuItem33;
+ private System.Windows.Forms.MenuItem menuItem34;
+ private System.Windows.Forms.CheckBox overrideheaderBox;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.CheckBox recirculatebox;
+ private System.Windows.Forms.Panel Panel1;
+ private System.Windows.Forms.Label label52;
+ private System.Windows.Forms.CheckBox bedslope_box;
+ private System.Windows.Forms.ToolTip toolTip1;
+ private System.Windows.Forms.TextBox tempdata1;
+ private System.Windows.Forms.TextBox tempdata2;
+ private System.Windows.Forms.CheckBox veltaubox;
+ private System.Windows.Forms.TabPage tabPage2;
+ private System.Windows.Forms.TextBox vegTauCritBox;
+ private System.Windows.Forms.Label label36;
+ private System.Windows.Forms.TextBox infile5;
+ private System.Windows.Forms.TextBox ybox5;
+ private System.Windows.Forms.TextBox xbox5;
+ private System.Windows.Forms.CheckBox inbox5;
+ private System.Windows.Forms.TextBox infile6;
+ private System.Windows.Forms.TextBox ybox6;
+ private System.Windows.Forms.TextBox xbox6;
+ private System.Windows.Forms.CheckBox inbox6;
+ private System.Windows.Forms.TextBox infile7;
+ private System.Windows.Forms.TextBox ybox7;
+ private System.Windows.Forms.TextBox xbox7;
+ private System.Windows.Forms.CheckBox inbox7;
+ private System.Windows.Forms.TextBox infile8;
+ private System.Windows.Forms.TextBox ybox8;
+ private System.Windows.Forms.TextBox xbox8;
+ private System.Windows.Forms.CheckBox inbox8;
+ private TabPage FilesTab;
+ private CheckBox reach_mode_box;
+ private CheckBox catchment_mode_box;
+ private CheckBox checkBoxGenerateTimeSeries;
+ private CheckBox checkBoxGenerateIterations;
+ private TextBox IterationOutbox;
+ private TextBox TimeseriesOutBox;
+ private TextBox outputfilesaveintervalbox;
+ private TextBox saveintervalbox;
+ private Label label45;
+ private Label label33;
+ private CheckBox uniquefilecheck;
+ private Label label32;
+ private TextBox tracerhydrofile;
+ private TextBox tracerfile;
+ private TextBox bedrockbox;
+ private TextBox graindataloadbox;
+ private TextBox openfiletextbox;
+ private CheckBox tracerbox;
+ private Label label30;
+ private Label label39;
+ private Label label24;
+ private Label label23;
+ private CheckBox flowonlybox;
+ private Smallwisdom.Windows.Forms.ZoomPanImageBox zoomPanImageBox1;
+ private TrackBar trackBar1;
+ private Label label61;
+ private GroupBox groupBox2;
+ private ComboBox comboBox1;
+ private Label label62;
+ private GroupBox groupBox3;
+ private Label label63;
+ private TrackBar trackBar2;
+ private TextBox tracerOutputtextBox;
+ private CheckBox tracerOutcheckBox;
+ private TextBox mvaluebox;
+ private Label label37;
+ private TextBox grasstextbox;
+ private Label label40;
+ private TabPage tabPage4;
+ private Label label67;
+ private TextBox soil_ratebox;
+ private TextBox slopebox;
+ private TextBox creepratebox;
+ private Label label34;
+ private Label label8;
+ private Label label69;
+ private Label label68;
+ private Label label70;
+ private Label label73;
+ private Label label72;
+ private Label label71;
+ private TextBox m3Box;
+ private TextBox n1Box;
+ private TextBox m1Box;
+ private TextBox Beta3Box;
+ private TextBox Beta1Box;
+ private CheckBox SiberiaBox;
+ private Label label75;
+ private Label label74;
+ private TextBox max_time_step_Box;
+ private Label label76;
+ private TextBox googleBeginDate;
+ private Label label78;
+ private TextBox googAnimationSaveInterval;
+ private Label label79;
+ private TextBox googleAnimationTextBox;
+ private CheckBox googleAnimationCheckbox;
+ private Button graphicToGoogleEarthButton;
+ private CheckBox einsteinbox;
+ private CheckBox wilcockbox;
+ private Label label83;
+ private TextBox div_inputs_box;
+ private CheckBox checkBox1;
+ private TabPage tabPage5;
+ private CheckBox DuneBox;
+ private Label label89;
+ private Label label88;
+ private Label label87;
+ private Label label86;
+ private Label label85;
+ private Label label84;
+ private TextBox slab_depth_box;
+ private TextBox shadow_angle_box;
+ private TextBox upstream_check_box;
+ private TextBox depo_prob_box;
+ private TextBox offset_box;
+ private TextBox init_depth_box;
+ private CheckBox bedslopebox2;
+ private Label label56;
+ private TextBox dune_time_box;
+ private Label label57;
+ private TextBox dune_grid_size_box;
+ private GroupBox groupBox4;
+ private TextBox textBox6;
+ private CheckBox UTMsouthcheck;
+ private TextBox UTMzonebox;
+ private CheckBox UTMgridcheckbox;
+ private TextBox textBox5;
+ private CheckBox soilerosionBox;
+ private CheckBox landslidesBox;
+ private TextBox fraction_dune;
+ private Label label54;
+ private TextBox propremaining;
+ private Label label50;
+ private TextBox activebox;
+ private TextBox erodefactorbox;
+ private Label label12;
+ private Label label48;
+ private BackgroundWorker backgroundWorker1;
+ private TextBox lateralratebox;
+ private TextBox textBox3;
+ private Label label60;
+ private TextBox avge_smoothbox;
+ private CheckBox newlateral;
+ private Label label7;
+ private TabPage tabPage1;
+ private TextBox courantbox;
+ private Label label38;
+ private Label label53;
+ private TextBox Q2box;
+ private Label label3;
+ private TextBox k_evapBox;
+ private TextBox textBox2;
+ private Label label46;
+ private TextBox minqbox;
+ private TextBox initscansbox;
+ private Label label9;
+ private Label label5;
+ private CheckBox nolateral;
+ private Label label55;
+ private TextBox max_vel_box;
+ private TextBox veg_lat_box;
+ private Label label51;
+ private Label label58;
+ private TextBox downstreamshiftbox;
+ private TextBox textBox4;
+ private Label label64;
+ private Label label65;
+ private TextBox textBox7;
+ private TextBox textBox8;
+ private TextBox textBox9;
+ private Label label77;
+ public static CheckBox checkBox2;
+ private TextBox MinQmaxvalue;
+ private CheckBox checkBox3;
+ private Label label90;
+ private TextBox TidalFileName;
+ private TextBox TidalInputStep;
+ private Label label82;
+ private TextBox TidalYmin;
+ private TextBox TidalYmax;
+ private TextBox TidalXmax;
+ private TextBox TidalXmin;
+ private Label label80;
+ private Label label81;
+ private GroupBox groupBox5;
+ private GroupBox groupBox1;
+ private GroupBox groupBox6;
+ private Label label91;
+ private TextBox textBox10;
+ private TextBox bedrock_erosion_threshold_box;
+ private TextBox bedrock_erosion_rate_box;
+ private Label label92;
+ private Label label93;
+ private TabPage tabPage3;
+ private Label label101;
+ private Label label100;
+ private Label label99;
+ private TextBox textBox18;
+ private TextBox textBox17;
+ private TextBox textBox16;
+ private Label label98;
+ private Label label97;
+ private Label label96;
+ private TextBox textBox15;
+ private TextBox textBox14;
+ private TextBox textBox13;
+ private Label label95;
+ private Label label94;
+ private TextBox textBox12;
+ private TextBox textBox11;
+ private CheckBox checkBox6;
+ private CheckBox checkBox5;
+ private CheckBox checkBox4;
+ private CheckBox soildevbox;
+ private GroupBox groupBox7;
+ private Label label35;
+ private TextBox raintimestepbox;
+ private CheckBox jmeaninputfilebox;
+ private Label label59;
+ private TextBox mvalueloadbox;
+ private TextBox raindataloadbox;
+ private Label label25;
+ private TextBox hydroindexBox;
+ private Label label103;
+ private Label label102;
+ private TextBox rfnumBox;
+ private CheckBox checkBox7;
+ private CheckBox checkBox8;
+ private TextBox textBox19;
+ private Label label104;
+ private CheckBox SpatVarManningsCheckbox;
+ private Label label105;
+ private TextBox mfiletimestepbox;
+ private CheckBox meyerbox;
+ private RadioButton radioButton1;
+ private GroupBox groupBox8;
+ private RadioButton radioButton2;
+ private Label label66;
+ #endregion
+
+
+ public Form1()
+ {
+ //
+ // Required for Windows Form Designer support
+ //
+ InitializeComponent();
+
+ //
+ // TODO: Add any constructor code after InitializeComponent call
+ //
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if( disposing )
+ {
+ if (components != null)
+ {
+ components.Dispose();
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.button2 = new System.Windows.Forms.Button();
+ this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components);
+ this.menuItemConfigFile = new System.Windows.Forms.MenuItem();
+ this.menuItemConfigFileOpen = new System.Windows.Forms.MenuItem();
+ this.menuItemConfigFileSaveAs = new System.Windows.Forms.MenuItem();
+ this.menuItemConfigFileSave = new System.Windows.Forms.MenuItem();
+ this.menuItem1 = new System.Windows.Forms.MenuItem();
+ this.menuItem30 = new System.Windows.Forms.MenuItem();
+ this.menuItem3 = new System.Windows.Forms.MenuItem();
+ this.menuItem4 = new System.Windows.Forms.MenuItem();
+ this.menuItem5 = new System.Windows.Forms.MenuItem();
+ this.menuItem2 = new System.Windows.Forms.MenuItem();
+ this.menuItem7 = new System.Windows.Forms.MenuItem();
+ this.menuItem8 = new System.Windows.Forms.MenuItem();
+ this.menuItem9 = new System.Windows.Forms.MenuItem();
+ this.menuItem26 = new System.Windows.Forms.MenuItem();
+ this.menuItem27 = new System.Windows.Forms.MenuItem();
+ this.menuItem28 = new System.Windows.Forms.MenuItem();
+ this.menuItem31 = new System.Windows.Forms.MenuItem();
+ this.menuItem11 = new System.Windows.Forms.MenuItem();
+ this.menuItem12 = new System.Windows.Forms.MenuItem();
+ this.menuItem13 = new System.Windows.Forms.MenuItem();
+ this.menuItem14 = new System.Windows.Forms.MenuItem();
+ this.menuItem25 = new System.Windows.Forms.MenuItem();
+ this.menuItem29 = new System.Windows.Forms.MenuItem();
+ this.menuItem33 = new System.Windows.Forms.MenuItem();
+ this.menuItem34 = new System.Windows.Forms.MenuItem();
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.FilesTab = new System.Windows.Forms.TabPage();
+ this.groupBox6 = new System.Windows.Forms.GroupBox();
+ this.groupBox4 = new System.Windows.Forms.GroupBox();
+ this.textBox6 = new System.Windows.Forms.TextBox();
+ this.UTMsouthcheck = new System.Windows.Forms.CheckBox();
+ this.UTMzonebox = new System.Windows.Forms.TextBox();
+ this.UTMgridcheckbox = new System.Windows.Forms.CheckBox();
+ this.textBox5 = new System.Windows.Forms.TextBox();
+ this.googleBeginDate = new System.Windows.Forms.TextBox();
+ this.label78 = new System.Windows.Forms.Label();
+ this.googAnimationSaveInterval = new System.Windows.Forms.TextBox();
+ this.label79 = new System.Windows.Forms.Label();
+ this.googleAnimationTextBox = new System.Windows.Forms.TextBox();
+ this.googleAnimationCheckbox = new System.Windows.Forms.CheckBox();
+ this.checkBox3 = new System.Windows.Forms.CheckBox();
+ this.outputfilesaveintervalbox = new System.Windows.Forms.TextBox();
+ this.TimeseriesOutBox = new System.Windows.Forms.TextBox();
+ this.tracerOutputtextBox = new System.Windows.Forms.TextBox();
+ this.tracerOutcheckBox = new System.Windows.Forms.CheckBox();
+ this.reach_mode_box = new System.Windows.Forms.CheckBox();
+ this.catchment_mode_box = new System.Windows.Forms.CheckBox();
+ this.checkBoxGenerateTimeSeries = new System.Windows.Forms.CheckBox();
+ this.checkBoxGenerateIterations = new System.Windows.Forms.CheckBox();
+ this.IterationOutbox = new System.Windows.Forms.TextBox();
+ this.saveintervalbox = new System.Windows.Forms.TextBox();
+ this.label45 = new System.Windows.Forms.Label();
+ this.label33 = new System.Windows.Forms.Label();
+ this.uniquefilecheck = new System.Windows.Forms.CheckBox();
+ this.label32 = new System.Windows.Forms.Label();
+ this.tracerhydrofile = new System.Windows.Forms.TextBox();
+ this.tracerfile = new System.Windows.Forms.TextBox();
+ this.bedrockbox = new System.Windows.Forms.TextBox();
+ this.graindataloadbox = new System.Windows.Forms.TextBox();
+ this.openfiletextbox = new System.Windows.Forms.TextBox();
+ this.tracerbox = new System.Windows.Forms.CheckBox();
+ this.label30 = new System.Windows.Forms.Label();
+ this.label39 = new System.Windows.Forms.Label();
+ this.label24 = new System.Windows.Forms.Label();
+ this.label23 = new System.Windows.Forms.Label();
+ this.NumericalTab = new System.Windows.Forms.TabPage();
+ this.bedslopebox2 = new System.Windows.Forms.CheckBox();
+ this.max_time_step_Box = new System.Windows.Forms.TextBox();
+ this.label76 = new System.Windows.Forms.Label();
+ this.veltaubox = new System.Windows.Forms.CheckBox();
+ this.label52 = new System.Windows.Forms.Label();
+ this.bedslope_box = new System.Windows.Forms.CheckBox();
+ this.label47 = new System.Windows.Forms.Label();
+ this.mintimestepbox = new System.Windows.Forms.TextBox();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.smoothbox = new System.Windows.Forms.TextBox();
+ this.cyclemaxbox = new System.Windows.Forms.TextBox();
+ this.itermaxbox = new System.Windows.Forms.TextBox();
+ this.limitbox = new System.Windows.Forms.TextBox();
+ this.label31 = new System.Windows.Forms.Label();
+ this.label27 = new System.Windows.Forms.Label();
+ this.label26 = new System.Windows.Forms.Label();
+ this.label10 = new System.Windows.Forms.Label();
+ this.label49 = new System.Windows.Forms.Label();
+ this.GrainTab = new System.Windows.Forms.TabPage();
+ this.meyerbox = new System.Windows.Forms.CheckBox();
+ this.checkBox8 = new System.Windows.Forms.CheckBox();
+ this.bedrock_erosion_threshold_box = new System.Windows.Forms.TextBox();
+ this.bedrock_erosion_rate_box = new System.Windows.Forms.TextBox();
+ this.label92 = new System.Windows.Forms.Label();
+ this.label93 = new System.Windows.Forms.Label();
+ this.label65 = new System.Windows.Forms.Label();
+ this.textBox7 = new System.Windows.Forms.TextBox();
+ this.label58 = new System.Windows.Forms.Label();
+ this.downstreamshiftbox = new System.Windows.Forms.TextBox();
+ this.label55 = new System.Windows.Forms.Label();
+ this.max_vel_box = new System.Windows.Forms.TextBox();
+ this.textBox3 = new System.Windows.Forms.TextBox();
+ this.label60 = new System.Windows.Forms.Label();
+ this.avge_smoothbox = new System.Windows.Forms.TextBox();
+ this.nolateral = new System.Windows.Forms.CheckBox();
+ this.newlateral = new System.Windows.Forms.CheckBox();
+ this.label7 = new System.Windows.Forms.Label();
+ this.lateralratebox = new System.Windows.Forms.TextBox();
+ this.label48 = new System.Windows.Forms.Label();
+ this.label54 = new System.Windows.Forms.Label();
+ this.propremaining = new System.Windows.Forms.TextBox();
+ this.label50 = new System.Windows.Forms.Label();
+ this.activebox = new System.Windows.Forms.TextBox();
+ this.erodefactorbox = new System.Windows.Forms.TextBox();
+ this.label12 = new System.Windows.Forms.Label();
+ this.einsteinbox = new System.Windows.Forms.CheckBox();
+ this.wilcockbox = new System.Windows.Forms.CheckBox();
+ this.fallGS9box = new System.Windows.Forms.TextBox();
+ this.fallGS8box = new System.Windows.Forms.TextBox();
+ this.fallGS7box = new System.Windows.Forms.TextBox();
+ this.fallGS6box = new System.Windows.Forms.TextBox();
+ this.fallGS5box = new System.Windows.Forms.TextBox();
+ this.fallGS4box = new System.Windows.Forms.TextBox();
+ this.fallGS3box = new System.Windows.Forms.TextBox();
+ this.gpSumLabel = new System.Windows.Forms.Label();
+ this.gpSumLabel2 = new System.Windows.Forms.Label();
+ this.suspGS9box = new System.Windows.Forms.CheckBox();
+ this.suspGS8box = new System.Windows.Forms.CheckBox();
+ this.suspGS7box = new System.Windows.Forms.CheckBox();
+ this.suspGS6box = new System.Windows.Forms.CheckBox();
+ this.suspGS5box = new System.Windows.Forms.CheckBox();
+ this.suspGS4box = new System.Windows.Forms.CheckBox();
+ this.suspGS3box = new System.Windows.Forms.CheckBox();
+ this.suspGS2box = new System.Windows.Forms.CheckBox();
+ this.fallGS2box = new System.Windows.Forms.TextBox();
+ this.fallGS1box = new System.Windows.Forms.TextBox();
+ this.label28 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.suspGS1box = new System.Windows.Forms.CheckBox();
+ this.gp3box = new System.Windows.Forms.TextBox();
+ this.gp4box = new System.Windows.Forms.TextBox();
+ this.gp5box = new System.Windows.Forms.TextBox();
+ this.gp6box = new System.Windows.Forms.TextBox();
+ this.gp7box = new System.Windows.Forms.TextBox();
+ this.gp8box = new System.Windows.Forms.TextBox();
+ this.gp9box = new System.Windows.Forms.TextBox();
+ this.gp2box = new System.Windows.Forms.TextBox();
+ this.gp1box = new System.Windows.Forms.TextBox();
+ this.g3box = new System.Windows.Forms.TextBox();
+ this.g4box = new System.Windows.Forms.TextBox();
+ this.g5box = new System.Windows.Forms.TextBox();
+ this.g6box = new System.Windows.Forms.TextBox();
+ this.g7box = new System.Windows.Forms.TextBox();
+ this.g8box = new System.Windows.Forms.TextBox();
+ this.g9box = new System.Windows.Forms.TextBox();
+ this.g2box = new System.Windows.Forms.TextBox();
+ this.g1box = new System.Windows.Forms.TextBox();
+ this.label22 = new System.Windows.Forms.Label();
+ this.label21 = new System.Windows.Forms.Label();
+ this.label20 = new System.Windows.Forms.Label();
+ this.label19 = new System.Windows.Forms.Label();
+ this.label18 = new System.Windows.Forms.Label();
+ this.label17 = new System.Windows.Forms.Label();
+ this.label16 = new System.Windows.Forms.Label();
+ this.label15 = new System.Windows.Forms.Label();
+ this.label14 = new System.Windows.Forms.Label();
+ this.label13 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.DescriptionTab = new System.Windows.Forms.TabPage();
+ this.DescBox = new System.Windows.Forms.TextBox();
+ this.GridTab = new System.Windows.Forms.TabPage();
+ this.overrideheaderBox = new System.Windows.Forms.CheckBox();
+ this.dxbox = new System.Windows.Forms.TextBox();
+ this.label11 = new System.Windows.Forms.Label();
+ this.ytextbox = new System.Windows.Forms.TextBox();
+ this.xtextbox = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label1 = new System.Windows.Forms.Label();
+ this.HydrologyTab = new System.Windows.Forms.TabPage();
+ this.groupBox7 = new System.Windows.Forms.GroupBox();
+ this.label105 = new System.Windows.Forms.Label();
+ this.mfiletimestepbox = new System.Windows.Forms.TextBox();
+ this.hydroindexBox = new System.Windows.Forms.TextBox();
+ this.label103 = new System.Windows.Forms.Label();
+ this.label37 = new System.Windows.Forms.Label();
+ this.mvaluebox = new System.Windows.Forms.TextBox();
+ this.label102 = new System.Windows.Forms.Label();
+ this.rfnumBox = new System.Windows.Forms.TextBox();
+ this.checkBox7 = new System.Windows.Forms.CheckBox();
+ this.label35 = new System.Windows.Forms.Label();
+ this.raintimestepbox = new System.Windows.Forms.TextBox();
+ this.jmeaninputfilebox = new System.Windows.Forms.CheckBox();
+ this.label59 = new System.Windows.Forms.Label();
+ this.mvalueloadbox = new System.Windows.Forms.TextBox();
+ this.raindataloadbox = new System.Windows.Forms.TextBox();
+ this.label25 = new System.Windows.Forms.Label();
+ this.groupBox5 = new System.Windows.Forms.GroupBox();
+ this.label83 = new System.Windows.Forms.Label();
+ this.div_inputs_box = new System.Windows.Forms.TextBox();
+ this.infile8 = new System.Windows.Forms.TextBox();
+ this.ybox8 = new System.Windows.Forms.TextBox();
+ this.xbox8 = new System.Windows.Forms.TextBox();
+ this.inbox8 = new System.Windows.Forms.CheckBox();
+ this.infile7 = new System.Windows.Forms.TextBox();
+ this.ybox7 = new System.Windows.Forms.TextBox();
+ this.xbox7 = new System.Windows.Forms.TextBox();
+ this.inbox7 = new System.Windows.Forms.CheckBox();
+ this.infile6 = new System.Windows.Forms.TextBox();
+ this.ybox6 = new System.Windows.Forms.TextBox();
+ this.xbox6 = new System.Windows.Forms.TextBox();
+ this.inbox6 = new System.Windows.Forms.CheckBox();
+ this.infile5 = new System.Windows.Forms.TextBox();
+ this.ybox5 = new System.Windows.Forms.TextBox();
+ this.xbox5 = new System.Windows.Forms.TextBox();
+ this.inbox5 = new System.Windows.Forms.CheckBox();
+ this.input_time_step_box = new System.Windows.Forms.TextBox();
+ this.infile4 = new System.Windows.Forms.TextBox();
+ this.infile3 = new System.Windows.Forms.TextBox();
+ this.infile2 = new System.Windows.Forms.TextBox();
+ this.infile1 = new System.Windows.Forms.TextBox();
+ this.ybox1 = new System.Windows.Forms.TextBox();
+ this.ybox2 = new System.Windows.Forms.TextBox();
+ this.ybox3 = new System.Windows.Forms.TextBox();
+ this.ybox4 = new System.Windows.Forms.TextBox();
+ this.xbox2 = new System.Windows.Forms.TextBox();
+ this.xbox3 = new System.Windows.Forms.TextBox();
+ this.xbox4 = new System.Windows.Forms.TextBox();
+ this.xbox1 = new System.Windows.Forms.TextBox();
+ this.label29 = new System.Windows.Forms.Label();
+ this.label44 = new System.Windows.Forms.Label();
+ this.label43 = new System.Windows.Forms.Label();
+ this.label41 = new System.Windows.Forms.Label();
+ this.inbox2 = new System.Windows.Forms.CheckBox();
+ this.inbox3 = new System.Windows.Forms.CheckBox();
+ this.inbox4 = new System.Windows.Forms.CheckBox();
+ this.inbox1 = new System.Windows.Forms.CheckBox();
+ this.label42 = new System.Windows.Forms.Label();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.label90 = new System.Windows.Forms.Label();
+ this.TidalFileName = new System.Windows.Forms.TextBox();
+ this.TidalInputStep = new System.Windows.Forms.TextBox();
+ this.label82 = new System.Windows.Forms.Label();
+ this.TidalYmin = new System.Windows.Forms.TextBox();
+ this.TidalYmax = new System.Windows.Forms.TextBox();
+ this.TidalXmax = new System.Windows.Forms.TextBox();
+ this.TidalXmin = new System.Windows.Forms.TextBox();
+ this.label80 = new System.Windows.Forms.Label();
+ this.label81 = new System.Windows.Forms.Label();
+ this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.groupBox8 = new System.Windows.Forms.GroupBox();
+ this.radioButton2 = new System.Windows.Forms.RadioButton();
+ this.radioButton1 = new System.Windows.Forms.RadioButton();
+ this.veg_lat_box = new System.Windows.Forms.TextBox();
+ this.label51 = new System.Windows.Forms.Label();
+ this.grasstextbox = new System.Windows.Forms.TextBox();
+ this.label40 = new System.Windows.Forms.Label();
+ this.label36 = new System.Windows.Forms.Label();
+ this.vegTauCritBox = new System.Windows.Forms.TextBox();
+ this.tabPage4 = new System.Windows.Forms.TabPage();
+ this.soilerosionBox = new System.Windows.Forms.CheckBox();
+ this.landslidesBox = new System.Windows.Forms.CheckBox();
+ this.label75 = new System.Windows.Forms.Label();
+ this.label74 = new System.Windows.Forms.Label();
+ this.label73 = new System.Windows.Forms.Label();
+ this.label72 = new System.Windows.Forms.Label();
+ this.label71 = new System.Windows.Forms.Label();
+ this.m3Box = new System.Windows.Forms.TextBox();
+ this.n1Box = new System.Windows.Forms.TextBox();
+ this.m1Box = new System.Windows.Forms.TextBox();
+ this.Beta3Box = new System.Windows.Forms.TextBox();
+ this.Beta1Box = new System.Windows.Forms.TextBox();
+ this.SiberiaBox = new System.Windows.Forms.CheckBox();
+ this.label70 = new System.Windows.Forms.Label();
+ this.label69 = new System.Windows.Forms.Label();
+ this.label68 = new System.Windows.Forms.Label();
+ this.label67 = new System.Windows.Forms.Label();
+ this.soil_ratebox = new System.Windows.Forms.TextBox();
+ this.slopebox = new System.Windows.Forms.TextBox();
+ this.creepratebox = new System.Windows.Forms.TextBox();
+ this.label34 = new System.Windows.Forms.Label();
+ this.label8 = new System.Windows.Forms.Label();
+ this.tabPage5 = new System.Windows.Forms.TabPage();
+ this.label91 = new System.Windows.Forms.Label();
+ this.textBox10 = new System.Windows.Forms.TextBox();
+ this.fraction_dune = new System.Windows.Forms.TextBox();
+ this.label57 = new System.Windows.Forms.Label();
+ this.dune_grid_size_box = new System.Windows.Forms.TextBox();
+ this.label56 = new System.Windows.Forms.Label();
+ this.dune_time_box = new System.Windows.Forms.TextBox();
+ this.label89 = new System.Windows.Forms.Label();
+ this.label88 = new System.Windows.Forms.Label();
+ this.label87 = new System.Windows.Forms.Label();
+ this.label86 = new System.Windows.Forms.Label();
+ this.label85 = new System.Windows.Forms.Label();
+ this.label84 = new System.Windows.Forms.Label();
+ this.slab_depth_box = new System.Windows.Forms.TextBox();
+ this.shadow_angle_box = new System.Windows.Forms.TextBox();
+ this.upstream_check_box = new System.Windows.Forms.TextBox();
+ this.depo_prob_box = new System.Windows.Forms.TextBox();
+ this.offset_box = new System.Windows.Forms.TextBox();
+ this.init_depth_box = new System.Windows.Forms.TextBox();
+ this.DuneBox = new System.Windows.Forms.CheckBox();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.textBox19 = new System.Windows.Forms.TextBox();
+ this.label104 = new System.Windows.Forms.Label();
+ this.SpatVarManningsCheckbox = new System.Windows.Forms.CheckBox();
+ this.MinQmaxvalue = new System.Windows.Forms.TextBox();
+ this.textBox9 = new System.Windows.Forms.TextBox();
+ this.label77 = new System.Windows.Forms.Label();
+ this.textBox8 = new System.Windows.Forms.TextBox();
+ this.label66 = new System.Windows.Forms.Label();
+ this.textBox4 = new System.Windows.Forms.TextBox();
+ this.label64 = new System.Windows.Forms.Label();
+ this.courantbox = new System.Windows.Forms.TextBox();
+ this.label38 = new System.Windows.Forms.Label();
+ this.label53 = new System.Windows.Forms.Label();
+ this.Q2box = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.k_evapBox = new System.Windows.Forms.TextBox();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.label46 = new System.Windows.Forms.Label();
+ this.minqbox = new System.Windows.Forms.TextBox();
+ this.initscansbox = new System.Windows.Forms.TextBox();
+ this.label9 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.tabPage3 = new System.Windows.Forms.TabPage();
+ this.label101 = new System.Windows.Forms.Label();
+ this.label100 = new System.Windows.Forms.Label();
+ this.label99 = new System.Windows.Forms.Label();
+ this.textBox18 = new System.Windows.Forms.TextBox();
+ this.textBox17 = new System.Windows.Forms.TextBox();
+ this.textBox16 = new System.Windows.Forms.TextBox();
+ this.label98 = new System.Windows.Forms.Label();
+ this.label97 = new System.Windows.Forms.Label();
+ this.label96 = new System.Windows.Forms.Label();
+ this.textBox15 = new System.Windows.Forms.TextBox();
+ this.textBox14 = new System.Windows.Forms.TextBox();
+ this.textBox13 = new System.Windows.Forms.TextBox();
+ this.label95 = new System.Windows.Forms.Label();
+ this.label94 = new System.Windows.Forms.Label();
+ this.textBox12 = new System.Windows.Forms.TextBox();
+ this.textBox11 = new System.Windows.Forms.TextBox();
+ this.checkBox6 = new System.Windows.Forms.CheckBox();
+ this.checkBox5 = new System.Windows.Forms.CheckBox();
+ this.checkBox4 = new System.Windows.Forms.CheckBox();
+ this.soildevbox = new System.Windows.Forms.CheckBox();
+ this.Panel1 = new System.Windows.Forms.Panel();
+ this.tempdata2 = new System.Windows.Forms.TextBox();
+ this.tempdata1 = new System.Windows.Forms.TextBox();
+ this.graphicToGoogleEarthButton = new System.Windows.Forms.Button();
+ this.button4 = new System.Windows.Forms.Button();
+ this.button3 = new System.Windows.Forms.Button();
+ this.recirculatebox = new System.Windows.Forms.CheckBox();
+ this.flowonlybox = new System.Windows.Forms.CheckBox();
+ this.statusBar1 = new System.Windows.Forms.StatusBar();
+ this.InfoStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.IterationStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.TimeStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.QwStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.QsStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.tempStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.start_button = new System.Windows.Forms.Button();
+ this.button1 = new System.Windows.Forms.Button();
+ checkBox2 = new System.Windows.Forms.CheckBox();
+ this.checkBox1 = new System.Windows.Forms.CheckBox();
+ this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+ this.trackBar1 = new System.Windows.Forms.TrackBar();
+ this.label61 = new System.Windows.Forms.Label();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.label62 = new System.Windows.Forms.Label();
+ this.comboBox1 = new System.Windows.Forms.ComboBox();
+ this.groupBox3 = new System.Windows.Forms.GroupBox();
+ this.label63 = new System.Windows.Forms.Label();
+ this.trackBar2 = new System.Windows.Forms.TrackBar();
+ this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
+ this.zoomPanImageBox1 = new Smallwisdom.Windows.Forms.ZoomPanImageBox();
+ this.tabControl1.SuspendLayout();
+ this.FilesTab.SuspendLayout();
+ this.groupBox6.SuspendLayout();
+ this.groupBox4.SuspendLayout();
+ this.NumericalTab.SuspendLayout();
+ this.GrainTab.SuspendLayout();
+ this.DescriptionTab.SuspendLayout();
+ this.GridTab.SuspendLayout();
+ this.HydrologyTab.SuspendLayout();
+ this.groupBox7.SuspendLayout();
+ this.groupBox5.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ this.tabPage2.SuspendLayout();
+ this.groupBox8.SuspendLayout();
+ this.tabPage4.SuspendLayout();
+ this.tabPage5.SuspendLayout();
+ this.tabPage1.SuspendLayout();
+ this.tabPage3.SuspendLayout();
+ this.Panel1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.InfoStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.IterationStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.TimeStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.QwStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.QsStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.tempStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit();
+ this.groupBox2.SuspendLayout();
+ this.groupBox3.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.trackBar2)).BeginInit();
+ this.SuspendLayout();
+ //
+ // button2
+ //
+ this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.button2.Location = new System.Drawing.Point(9, 513);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(100, 25);
+ this.button2.TabIndex = 7;
+ this.button2.Text = "load data";
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // mainMenu1
+ //
+ this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+ this.menuItemConfigFile,
+ this.menuItem1,
+ this.menuItem2,
+ this.menuItem11});
+ //
+ // menuItemConfigFile
+ //
+ this.menuItemConfigFile.Index = 0;
+ this.menuItemConfigFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+ this.menuItemConfigFileOpen,
+ this.menuItemConfigFileSaveAs,
+ this.menuItemConfigFileSave});
+ this.menuItemConfigFile.Text = "Config &File";
+ //
+ // menuItemConfigFileOpen
+ //
+ this.menuItemConfigFileOpen.Index = 0;
+ this.menuItemConfigFileOpen.Text = "&Open";
+ this.menuItemConfigFileOpen.Click += new System.EventHandler(this.menuItemConfigFileOpen_Click);
+ //
+ // menuItemConfigFileSaveAs
+ //
+ this.menuItemConfigFileSaveAs.Index = 1;
+ this.menuItemConfigFileSaveAs.Text = "Save &As";
+ this.menuItemConfigFileSaveAs.Click += new System.EventHandler(this.menuItemConfigFileSave_Click);
+ //
+ // menuItemConfigFileSave
+ //
+ this.menuItemConfigFileSave.Index = 2;
+ this.menuItemConfigFileSave.Text = "&Save";
+ this.menuItemConfigFileSave.Click += new System.EventHandler(this.menuItemConfigFileSave_Click);
+ //
+ // menuItem1
+ //
+ this.menuItem1.Index = 1;
+ this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+ this.menuItem30,
+ this.menuItem3,
+ this.menuItem4,
+ this.menuItem5});
+ this.menuItem1.Text = "&Top Graphics";
+ //
+ // menuItem30
+ //
+ this.menuItem30.Index = 0;
+ this.menuItem30.Text = "DEM";
+ this.menuItem30.Click += new System.EventHandler(this.menuItem30_Click);
+ //
+ // menuItem3
+ //
+ this.menuItem3.Checked = true;
+ this.menuItem3.Index = 1;
+ this.menuItem3.Text = "water depth (low scale)";
+ this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click);
+ //
+ // menuItem4
+ //
+ this.menuItem4.Index = 2;
+ this.menuItem4.Text = "erosion/dep";
+ this.menuItem4.Click += new System.EventHandler(this.menuItem4_Click);
+ //
+ // menuItem5
+ //
+ this.menuItem5.Index = 3;
+ this.menuItem5.Text = "Grass/veg cover";
+ this.menuItem5.Click += new System.EventHandler(this.menuItem5_Click);
+ //
+ // menuItem2
+ //
+ this.menuItem2.Index = 2;
+ this.menuItem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+ this.menuItem7,
+ this.menuItem8,
+ this.menuItem9,
+ this.menuItem26,
+ this.menuItem27,
+ this.menuItem28,
+ this.menuItem31});
+ this.menuItem2.Text = "&Top graphics II";
+ //
+ // menuItem7
+ //
+ this.menuItem7.Index = 0;
+ this.menuItem7.Text = "lateral gradient";
+ this.menuItem7.Click += new System.EventHandler(this.menuItem7_Click);
+ //
+ // menuItem8
+ //
+ this.menuItem8.Index = 1;
+ this.menuItem8.Text = "Bed sheer stress";
+ this.menuItem8.Click += new System.EventHandler(this.menuItem8_Click);
+ //
+ // menuItem9
+ //
+ this.menuItem9.Index = 2;
+ this.menuItem9.Text = "grainsize (new scale)";
+ this.menuItem9.Click += new System.EventHandler(this.menuItem9_Click);
+ //
+ // menuItem26
+ //
+ this.menuItem26.Index = 3;
+ this.menuItem26.Text = "Drainage area";
+ this.menuItem26.Click += new System.EventHandler(this.menuItem26_Click);
+ //
+ // menuItem27
+ //
+ this.menuItem27.Index = 4;
+ this.menuItem27.Text = "susp conc";
+ this.menuItem27.Click += new System.EventHandler(this.menuItem27_Click);
+ //
+ // menuItem28
+ //
+ this.menuItem28.Index = 5;
+ this.menuItem28.Text = "soil depth";
+ this.menuItem28.Click += new System.EventHandler(this.menuItem28_Click);
+ //
+ // menuItem31
+ //
+ this.menuItem31.Index = 6;
+ this.menuItem31.Text = "flow velocity";
+ this.menuItem31.Click += new System.EventHandler(this.menuItem31_Click);
+ //
+ // menuItem11
+ //
+ this.menuItem11.Index = 3;
+ this.menuItem11.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+ this.menuItem12,
+ this.menuItem13,
+ this.menuItem14,
+ this.menuItem25,
+ this.menuItem29,
+ this.menuItem33,
+ this.menuItem34});
+ this.menuItem11.Text = "Save Options";
+ //
+ // menuItem12
+ //
+ this.menuItem12.Checked = true;
+ this.menuItem12.Index = 0;
+ this.menuItem12.Text = "elevations";
+ this.menuItem12.Click += new System.EventHandler(this.menuItem12_Click);
+ //
+ // menuItem13
+ //
+ this.menuItem13.Checked = true;
+ this.menuItem13.Index = 1;
+ this.menuItem13.Text = "elev diff";
+ this.menuItem13.Click += new System.EventHandler(this.menuItem13_Click);
+ //
+ // menuItem14
+ //
+ this.menuItem14.Checked = true;
+ this.menuItem14.Index = 2;
+ this.menuItem14.Text = "grainsize";
+ this.menuItem14.Click += new System.EventHandler(this.menuItem14_Click);
+ //
+ // menuItem25
+ //
+ this.menuItem25.Index = 3;
+ this.menuItem25.Text = "water depth";
+ this.menuItem25.Click += new System.EventHandler(this.menuItem25_Click);
+ //
+ // menuItem29
+ //
+ this.menuItem29.Checked = true;
+ this.menuItem29.Index = 4;
+ this.menuItem29.Text = "d50 top layer";
+ this.menuItem29.Click += new System.EventHandler(this.menuItem29_Click);
+ //
+ // menuItem33
+ //
+ this.menuItem33.Index = 5;
+ this.menuItem33.Text = "flow velocity";
+ this.menuItem33.Click += new System.EventHandler(this.menuItem33_Click);
+ //
+ // menuItem34
+ //
+ this.menuItem34.Index = 6;
+ this.menuItem34.Text = "Veloc vectors";
+ this.menuItem34.Click += new System.EventHandler(this.menuItem34_Click);
+ //
+ // tabControl1
+ //
+ this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tabControl1.Controls.Add(this.FilesTab);
+ this.tabControl1.Controls.Add(this.NumericalTab);
+ this.tabControl1.Controls.Add(this.GrainTab);
+ this.tabControl1.Controls.Add(this.DescriptionTab);
+ this.tabControl1.Controls.Add(this.GridTab);
+ this.tabControl1.Controls.Add(this.HydrologyTab);
+ this.tabControl1.Controls.Add(this.tabPage2);
+ this.tabControl1.Controls.Add(this.tabPage4);
+ this.tabControl1.Controls.Add(this.tabPage5);
+ this.tabControl1.Controls.Add(this.tabPage1);
+ this.tabControl1.Controls.Add(this.tabPage3);
+ this.tabControl1.Location = new System.Drawing.Point(3, -1);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(1331, 513);
+ this.tabControl1.TabIndex = 143;
+ this.tabControl1.Tag = "Flow Model";
+ //
+ // FilesTab
+ //
+ this.FilesTab.Controls.Add(this.groupBox6);
+ this.FilesTab.Controls.Add(this.checkBox3);
+ this.FilesTab.Controls.Add(this.outputfilesaveintervalbox);
+ this.FilesTab.Controls.Add(this.TimeseriesOutBox);
+ this.FilesTab.Controls.Add(this.tracerOutputtextBox);
+ this.FilesTab.Controls.Add(this.tracerOutcheckBox);
+ this.FilesTab.Controls.Add(this.reach_mode_box);
+ this.FilesTab.Controls.Add(this.catchment_mode_box);
+ this.FilesTab.Controls.Add(this.checkBoxGenerateTimeSeries);
+ this.FilesTab.Controls.Add(this.checkBoxGenerateIterations);
+ this.FilesTab.Controls.Add(this.IterationOutbox);
+ this.FilesTab.Controls.Add(this.saveintervalbox);
+ this.FilesTab.Controls.Add(this.label45);
+ this.FilesTab.Controls.Add(this.label33);
+ this.FilesTab.Controls.Add(this.uniquefilecheck);
+ this.FilesTab.Controls.Add(this.label32);
+ this.FilesTab.Controls.Add(this.tracerhydrofile);
+ this.FilesTab.Controls.Add(this.tracerfile);
+ this.FilesTab.Controls.Add(this.bedrockbox);
+ this.FilesTab.Controls.Add(this.graindataloadbox);
+ this.FilesTab.Controls.Add(this.openfiletextbox);
+ this.FilesTab.Controls.Add(this.tracerbox);
+ this.FilesTab.Controls.Add(this.label30);
+ this.FilesTab.Controls.Add(this.label39);
+ this.FilesTab.Controls.Add(this.label24);
+ this.FilesTab.Controls.Add(this.label23);
+ this.FilesTab.Location = new System.Drawing.Point(4, 22);
+ this.FilesTab.Name = "FilesTab";
+ this.FilesTab.Size = new System.Drawing.Size(1323, 487);
+ this.FilesTab.TabIndex = 0;
+ this.FilesTab.Text = "Files";
+ this.FilesTab.UseVisualStyleBackColor = true;
+ //
+ // groupBox6
+ //
+ this.groupBox6.Controls.Add(this.groupBox4);
+ this.groupBox6.Controls.Add(this.UTMgridcheckbox);
+ this.groupBox6.Controls.Add(this.textBox5);
+ this.groupBox6.Controls.Add(this.googleBeginDate);
+ this.groupBox6.Controls.Add(this.label78);
+ this.groupBox6.Controls.Add(this.googAnimationSaveInterval);
+ this.groupBox6.Controls.Add(this.label79);
+ this.groupBox6.Controls.Add(this.googleAnimationTextBox);
+ this.groupBox6.Controls.Add(this.googleAnimationCheckbox);
+ this.groupBox6.Location = new System.Drawing.Point(367, 192);
+ this.groupBox6.Name = "groupBox6";
+ this.groupBox6.Size = new System.Drawing.Size(418, 236);
+ this.groupBox6.TabIndex = 205;
+ this.groupBox6.TabStop = false;
+ this.groupBox6.Text = "Google Earth output variables";
+ //
+ // groupBox4
+ //
+ this.groupBox4.Controls.Add(this.textBox6);
+ this.groupBox4.Controls.Add(this.UTMsouthcheck);
+ this.groupBox4.Controls.Add(this.UTMzonebox);
+ this.groupBox4.Location = new System.Drawing.Point(220, 137);
+ this.groupBox4.Name = "groupBox4";
+ this.groupBox4.Size = new System.Drawing.Size(144, 65);
+ this.groupBox4.TabIndex = 201;
+ this.groupBox4.TabStop = false;
+ this.groupBox4.Visible = false;
+ //
+ // textBox6
+ //
+ this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.textBox6.Location = new System.Drawing.Point(6, 17);
+ this.textBox6.Multiline = true;
+ this.textBox6.Name = "textBox6";
+ this.textBox6.ReadOnly = true;
+ this.textBox6.Size = new System.Drawing.Size(87, 22);
+ this.textBox6.TabIndex = 196;
+ this.textBox6.Text = "UTM zone (1-60)";
+ this.textBox6.Visible = false;
+ //
+ // UTMsouthcheck
+ //
+ this.UTMsouthcheck.AutoSize = true;
+ this.UTMsouthcheck.Location = new System.Drawing.Point(6, 42);
+ this.UTMsouthcheck.Name = "UTMsouthcheck";
+ this.UTMsouthcheck.Size = new System.Drawing.Size(128, 17);
+ this.UTMsouthcheck.TabIndex = 197;
+ this.UTMsouthcheck.Text = "Southern Hemisphere";
+ this.UTMsouthcheck.UseVisualStyleBackColor = true;
+ this.UTMsouthcheck.Visible = false;
+ //
+ // UTMzonebox
+ //
+ this.UTMzonebox.Location = new System.Drawing.Point(99, 16);
+ this.UTMzonebox.Name = "UTMzonebox";
+ this.UTMzonebox.Size = new System.Drawing.Size(39, 20);
+ this.UTMzonebox.TabIndex = 194;
+ this.UTMzonebox.Tag = "UTM zone";
+ this.toolTip1.SetToolTip(this.UTMzonebox, "Enter the UTM zone");
+ this.UTMzonebox.Visible = false;
+ //
+ // UTMgridcheckbox
+ //
+ this.UTMgridcheckbox.AutoSize = true;
+ this.UTMgridcheckbox.Location = new System.Drawing.Point(225, 116);
+ this.UTMgridcheckbox.Name = "UTMgridcheckbox";
+ this.UTMgridcheckbox.Size = new System.Drawing.Size(82, 17);
+ this.UTMgridcheckbox.TabIndex = 200;
+ this.UTMgridcheckbox.Text = "Grid is UTM";
+ this.UTMgridcheckbox.UseVisualStyleBackColor = true;
+ this.UTMgridcheckbox.CheckedChanged += new System.EventHandler(this.UTMgridcheckbox_CheckedChanged);
+ //
+ // textBox5
+ //
+ this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.textBox5.Location = new System.Drawing.Point(26, 112);
+ this.textBox5.Multiline = true;
+ this.textBox5.Name = "textBox5";
+ this.textBox5.ReadOnly = true;
+ this.textBox5.Size = new System.Drawing.Size(190, 35);
+ this.textBox5.TabIndex = 199;
+ this.textBox5.Text = "For DTMs using British National Grid or UTM WGS84";
+ //
+ // googleBeginDate
+ //
+ this.googleBeginDate.AcceptsTab = true;
+ this.googleBeginDate.Location = new System.Drawing.Point(222, 84);
+ this.googleBeginDate.Name = "googleBeginDate";
+ this.googleBeginDate.Size = new System.Drawing.Size(106, 20);
+ this.googleBeginDate.TabIndex = 191;
+ //
+ // label78
+ //
+ this.label78.AutoSize = true;
+ this.label78.Location = new System.Drawing.Point(96, 87);
+ this.label78.Name = "label78";
+ this.label78.Size = new System.Drawing.Size(120, 13);
+ this.label78.TabIndex = 190;
+ this.label78.Text = "begin date (yyyy-mm-dd)";
+ //
+ // googAnimationSaveInterval
+ //
+ this.googAnimationSaveInterval.Location = new System.Drawing.Point(222, 58);
+ this.googAnimationSaveInterval.Name = "googAnimationSaveInterval";
+ this.googAnimationSaveInterval.Size = new System.Drawing.Size(56, 20);
+ this.googAnimationSaveInterval.TabIndex = 188;
+ this.googAnimationSaveInterval.Text = "1000";
+ //
+ // label79
+ //
+ this.label79.Location = new System.Drawing.Point(64, 58);
+ this.label79.Name = "label79";
+ this.label79.Size = new System.Drawing.Size(152, 25);
+ this.label79.TabIndex = 189;
+ this.label79.Text = "Save file every * mins";
+ this.label79.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label79, "How often the avi file AND the other data files are saved");
+ //
+ // googleAnimationTextBox
+ //
+ this.googleAnimationTextBox.Location = new System.Drawing.Point(222, 32);
+ this.googleAnimationTextBox.Name = "googleAnimationTextBox";
+ this.googleAnimationTextBox.Size = new System.Drawing.Size(106, 20);
+ this.googleAnimationTextBox.TabIndex = 185;
+ this.googleAnimationTextBox.Text = "animation.kmz";
+ this.toolTip1.SetToolTip(this.googleAnimationTextBox, "File name for avi file");
+ //
+ // googleAnimationCheckbox
+ //
+ this.googleAnimationCheckbox.Location = new System.Drawing.Point(27, 31);
+ this.googleAnimationCheckbox.Name = "googleAnimationCheckbox";
+ this.googleAnimationCheckbox.Size = new System.Drawing.Size(195, 24);
+ this.googleAnimationCheckbox.TabIndex = 184;
+ this.googleAnimationCheckbox.Text = "Generate Google Earth Animation";
+ this.toolTip1.SetToolTip(this.googleAnimationCheckbox, "Check to generate a movie file of the screen display");
+ //
+ // checkBox3
+ //
+ this.checkBox3.Location = new System.Drawing.Point(307, 5);
+ this.checkBox3.Name = "checkBox3";
+ this.checkBox3.Size = new System.Drawing.Size(147, 42);
+ this.checkBox3.TabIndex = 204;
+ this.checkBox3.Text = "Stage/Tidal input";
+ this.toolTip1.SetToolTip(this.checkBox3, "CAESAR can run in both catchment and reach mode combined. But if you have reach m" +
+ "ode selected, you should enter an input file in the hydrology tab");
+ //
+ // outputfilesaveintervalbox
+ //
+ this.outputfilesaveintervalbox.Location = new System.Drawing.Point(208, 327);
+ this.outputfilesaveintervalbox.Name = "outputfilesaveintervalbox";
+ this.outputfilesaveintervalbox.Size = new System.Drawing.Size(56, 20);
+ this.outputfilesaveintervalbox.TabIndex = 166;
+ this.outputfilesaveintervalbox.Text = "60";
+ //
+ // TimeseriesOutBox
+ //
+ this.TimeseriesOutBox.Location = new System.Drawing.Point(208, 303);
+ this.TimeseriesOutBox.Name = "TimeseriesOutBox";
+ this.TimeseriesOutBox.Size = new System.Drawing.Size(112, 20);
+ this.TimeseriesOutBox.TabIndex = 168;
+ this.TimeseriesOutBox.Text = "catchment.dat";
+ //
+ // tracerOutputtextBox
+ //
+ this.tracerOutputtextBox.Location = new System.Drawing.Point(760, 55);
+ this.tracerOutputtextBox.Name = "tracerOutputtextBox";
+ this.tracerOutputtextBox.Size = new System.Drawing.Size(112, 20);
+ this.tracerOutputtextBox.TabIndex = 181;
+ this.tracerOutputtextBox.Text = "tracer_output.txt";
+ this.tracerOutputtextBox.Visible = false;
+ //
+ // tracerOutcheckBox
+ //
+ this.tracerOutcheckBox.Location = new System.Drawing.Point(720, 81);
+ this.tracerOutcheckBox.Name = "tracerOutcheckBox";
+ this.tracerOutcheckBox.Size = new System.Drawing.Size(160, 24);
+ this.tracerOutcheckBox.TabIndex = 180;
+ this.tracerOutcheckBox.Text = "Generate tracer output";
+ this.tracerOutcheckBox.Visible = false;
+ //
+ // reach_mode_box
+ //
+ this.reach_mode_box.Checked = true;
+ this.reach_mode_box.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.reach_mode_box.Location = new System.Drawing.Point(196, 5);
+ this.reach_mode_box.Name = "reach_mode_box";
+ this.reach_mode_box.Size = new System.Drawing.Size(147, 42);
+ this.reach_mode_box.TabIndex = 175;
+ this.reach_mode_box.Text = "Reach Mode";
+ this.toolTip1.SetToolTip(this.reach_mode_box, "CAESAR can run in both catchment and reach mode combined. But if you have reach m" +
+ "ode selected, you should enter an input file in the hydrology tab");
+ //
+ // catchment_mode_box
+ //
+ this.catchment_mode_box.Location = new System.Drawing.Point(54, 9);
+ this.catchment_mode_box.Name = "catchment_mode_box";
+ this.catchment_mode_box.Size = new System.Drawing.Size(147, 34);
+ this.catchment_mode_box.TabIndex = 174;
+ this.catchment_mode_box.Text = "Catchment mode";
+ this.toolTip1.SetToolTip(this.catchment_mode_box, "CAESAR can run in both catchment and reach mode, but if you have catchment mode c" +
+ "hecked, you should input a rainfall data file");
+ this.catchment_mode_box.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
+ //
+ // checkBoxGenerateTimeSeries
+ //
+ this.checkBoxGenerateTimeSeries.Location = new System.Drawing.Point(44, 304);
+ this.checkBoxGenerateTimeSeries.Name = "checkBoxGenerateTimeSeries";
+ this.checkBoxGenerateTimeSeries.Size = new System.Drawing.Size(170, 24);
+ this.checkBoxGenerateTimeSeries.TabIndex = 173;
+ this.checkBoxGenerateTimeSeries.Text = "Generate time series output";
+ //
+ // checkBoxGenerateIterations
+ //
+ this.checkBoxGenerateIterations.Location = new System.Drawing.Point(45, 367);
+ this.checkBoxGenerateIterations.Name = "checkBoxGenerateIterations";
+ this.checkBoxGenerateIterations.Size = new System.Drawing.Size(152, 24);
+ this.checkBoxGenerateIterations.TabIndex = 172;
+ this.checkBoxGenerateIterations.Text = "Generate iteration output";
+ this.checkBoxGenerateIterations.Visible = false;
+ //
+ // IterationOutbox
+ //
+ this.IterationOutbox.Location = new System.Drawing.Point(208, 367);
+ this.IterationOutbox.Name = "IterationOutbox";
+ this.IterationOutbox.Size = new System.Drawing.Size(112, 20);
+ this.IterationOutbox.TabIndex = 170;
+ this.IterationOutbox.Text = "iterout.dat";
+ this.IterationOutbox.Visible = false;
+ //
+ // saveintervalbox
+ //
+ this.saveintervalbox.Location = new System.Drawing.Point(175, 224);
+ this.saveintervalbox.Name = "saveintervalbox";
+ this.saveintervalbox.Size = new System.Drawing.Size(56, 20);
+ this.saveintervalbox.TabIndex = 163;
+ this.saveintervalbox.Text = "1000";
+ //
+ // label45
+ //
+ this.label45.Location = new System.Drawing.Point(48, 327);
+ this.label45.Name = "label45";
+ this.label45.Size = new System.Drawing.Size(152, 24);
+ this.label45.TabIndex = 167;
+ this.label45.Text = "Save file every * mins";
+ this.label45.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label33
+ //
+ this.label33.Location = new System.Drawing.Point(17, 221);
+ this.label33.Name = "label33";
+ this.label33.Size = new System.Drawing.Size(152, 25);
+ this.label33.TabIndex = 165;
+ this.label33.Text = "Save file every * mins";
+ this.label33.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label33, "How often the avi file AND the other data files are saved");
+ //
+ // uniquefilecheck
+ //
+ this.uniquefilecheck.Location = new System.Drawing.Point(44, 245);
+ this.uniquefilecheck.Name = "uniquefilecheck";
+ this.uniquefilecheck.Size = new System.Drawing.Size(120, 25);
+ this.uniquefilecheck.TabIndex = 164;
+ this.uniquefilecheck.Text = "unique file name?";
+ this.toolTip1.SetToolTip(this.uniquefilecheck, "Whether the data files are given a unqiu file name - ");
+ //
+ // label32
+ //
+ this.label32.Location = new System.Drawing.Point(603, 19);
+ this.label32.Name = "label32";
+ this.label32.Size = new System.Drawing.Size(128, 24);
+ this.label32.TabIndex = 106;
+ this.label32.Text = "tracer sediment vol file";
+ this.label32.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.label32.Visible = false;
+ //
+ // tracerhydrofile
+ //
+ this.tracerhydrofile.Location = new System.Drawing.Point(656, 42);
+ this.tracerhydrofile.Name = "tracerhydrofile";
+ this.tracerhydrofile.Size = new System.Drawing.Size(120, 20);
+ this.tracerhydrofile.TabIndex = 105;
+ this.tracerhydrofile.Text = "null";
+ this.tracerhydrofile.Visible = false;
+ //
+ // tracerfile
+ //
+ this.tracerfile.Location = new System.Drawing.Point(752, 16);
+ this.tracerfile.Name = "tracerfile";
+ this.tracerfile.Size = new System.Drawing.Size(120, 20);
+ this.tracerfile.TabIndex = 104;
+ this.tracerfile.Text = "null";
+ this.tracerfile.Visible = false;
+ //
+ // bedrockbox
+ //
+ this.bedrockbox.Location = new System.Drawing.Point(131, 97);
+ this.bedrockbox.Name = "bedrockbox";
+ this.bedrockbox.Size = new System.Drawing.Size(120, 20);
+ this.bedrockbox.TabIndex = 102;
+ this.bedrockbox.Text = "null";
+ //
+ // graindataloadbox
+ //
+ this.graindataloadbox.Location = new System.Drawing.Point(131, 73);
+ this.graindataloadbox.Name = "graindataloadbox";
+ this.graindataloadbox.Size = new System.Drawing.Size(120, 20);
+ this.graindataloadbox.TabIndex = 101;
+ this.graindataloadbox.Text = "null";
+ //
+ // openfiletextbox
+ //
+ this.openfiletextbox.Location = new System.Drawing.Point(131, 49);
+ this.openfiletextbox.Name = "openfiletextbox";
+ this.openfiletextbox.Size = new System.Drawing.Size(120, 20);
+ this.openfiletextbox.TabIndex = 100;
+ this.openfiletextbox.Text = "whole9.dat";
+ //
+ // tracerbox
+ //
+ this.tracerbox.Location = new System.Drawing.Point(760, 16);
+ this.tracerbox.Name = "tracerbox";
+ this.tracerbox.Size = new System.Drawing.Size(88, 23);
+ this.tracerbox.TabIndex = 99;
+ this.tracerbox.Text = "tracer run?";
+ this.toolTip1.SetToolTip(this.tracerbox, "Check to run in \'tracer mode\'");
+ this.tracerbox.Visible = false;
+ //
+ // label30
+ //
+ this.label30.Location = new System.Drawing.Point(732, 16);
+ this.label30.Name = "label30";
+ this.label30.Size = new System.Drawing.Size(128, 24);
+ this.label30.TabIndex = 98;
+ this.label30.Text = "tracer input file";
+ this.label30.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.label30.Visible = false;
+ //
+ // label39
+ //
+ this.label39.Location = new System.Drawing.Point(19, 97);
+ this.label39.Name = "label39";
+ this.label39.Size = new System.Drawing.Size(104, 24);
+ this.label39.TabIndex = 96;
+ this.label39.Text = "Bedrock data file";
+ this.label39.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label39, "A DEM of the bedrock - below which the model cannot erode");
+ //
+ // label24
+ //
+ this.label24.Location = new System.Drawing.Point(19, 73);
+ this.label24.Name = "label24";
+ this.label24.Size = new System.Drawing.Size(104, 24);
+ this.label24.TabIndex = 58;
+ this.label24.Text = "Grain data file";
+ this.label24.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label23
+ //
+ this.label23.Location = new System.Drawing.Point(19, 49);
+ this.label23.Name = "label23";
+ this.label23.Size = new System.Drawing.Size(104, 24);
+ this.label23.TabIndex = 56;
+ this.label23.Text = "DEM data file";
+ this.label23.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // NumericalTab
+ //
+ this.NumericalTab.Controls.Add(this.bedslopebox2);
+ this.NumericalTab.Controls.Add(this.max_time_step_Box);
+ this.NumericalTab.Controls.Add(this.label76);
+ this.NumericalTab.Controls.Add(this.veltaubox);
+ this.NumericalTab.Controls.Add(this.label52);
+ this.NumericalTab.Controls.Add(this.bedslope_box);
+ this.NumericalTab.Controls.Add(this.label47);
+ this.NumericalTab.Controls.Add(this.mintimestepbox);
+ this.NumericalTab.Controls.Add(this.textBox1);
+ this.NumericalTab.Controls.Add(this.smoothbox);
+ this.NumericalTab.Controls.Add(this.cyclemaxbox);
+ this.NumericalTab.Controls.Add(this.itermaxbox);
+ this.NumericalTab.Controls.Add(this.limitbox);
+ this.NumericalTab.Controls.Add(this.label31);
+ this.NumericalTab.Controls.Add(this.label27);
+ this.NumericalTab.Controls.Add(this.label26);
+ this.NumericalTab.Controls.Add(this.label10);
+ this.NumericalTab.Controls.Add(this.label49);
+ this.NumericalTab.Location = new System.Drawing.Point(4, 22);
+ this.NumericalTab.Name = "NumericalTab";
+ this.NumericalTab.Size = new System.Drawing.Size(1323, 487);
+ this.NumericalTab.TabIndex = 2;
+ this.NumericalTab.Text = "Numerical";
+ this.NumericalTab.UseVisualStyleBackColor = true;
+ //
+ // bedslopebox2
+ //
+ this.bedslopebox2.Location = new System.Drawing.Point(84, 298);
+ this.bedslopebox2.Name = "bedslopebox2";
+ this.bedslopebox2.Size = new System.Drawing.Size(153, 35);
+ this.bedslopebox2.TabIndex = 189;
+ this.bedslopebox2.Text = "redundant now hidden";
+ this.bedslopebox2.Visible = false;
+ this.bedslopebox2.CheckedChanged += new System.EventHandler(this.bedslopebox2_CheckedChanged);
+ //
+ // max_time_step_Box
+ //
+ this.max_time_step_Box.Location = new System.Drawing.Point(184, 80);
+ this.max_time_step_Box.Name = "max_time_step_Box";
+ this.max_time_step_Box.Size = new System.Drawing.Size(64, 20);
+ this.max_time_step_Box.TabIndex = 186;
+ this.max_time_step_Box.Text = "3600";
+ //
+ // label76
+ //
+ this.label76.Location = new System.Drawing.Point(40, 80);
+ this.label76.Name = "label76";
+ this.label76.Size = new System.Drawing.Size(136, 24);
+ this.label76.TabIndex = 187;
+ this.label76.Text = "Max time step (secs)";
+ this.label76.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // veltaubox
+ //
+ this.veltaubox.Location = new System.Drawing.Point(77, 368);
+ this.veltaubox.Name = "veltaubox";
+ this.veltaubox.Size = new System.Drawing.Size(160, 27);
+ this.veltaubox.TabIndex = 183;
+ this.veltaubox.Text = "Tau based on velocity";
+ this.veltaubox.Visible = false;
+ this.veltaubox.CheckedChanged += new System.EventHandler(this.veltaubox_CheckedChanged);
+ //
+ // label52
+ //
+ this.label52.Location = new System.Drawing.Point(81, 342);
+ this.label52.Name = "label52";
+ this.label52.Size = new System.Drawing.Size(133, 28);
+ this.label52.TabIndex = 182;
+ this.label52.Text = "Slope used to calc Tau (for erosion)";
+ this.toolTip1.SetToolTip(this.label52, "See notes on lateral tab for more. ");
+ this.label52.Visible = false;
+ //
+ // bedslope_box
+ //
+ this.bedslope_box.Checked = true;
+ this.bedslope_box.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.bedslope_box.Location = new System.Drawing.Point(22, 345);
+ this.bedslope_box.Name = "bedslope_box";
+ this.bedslope_box.Size = new System.Drawing.Size(192, 35);
+ this.bedslope_box.TabIndex = 180;
+ this.bedslope_box.Text = "Bedslope (original method)";
+ this.bedslope_box.Visible = false;
+ this.bedslope_box.CheckedChanged += new System.EventHandler(this.bedslope_box_CheckedChanged);
+ //
+ // label47
+ //
+ this.label47.Location = new System.Drawing.Point(256, 53);
+ this.label47.Name = "label47";
+ this.label47.Size = new System.Drawing.Size(66, 23);
+ this.label47.TabIndex = 176;
+ this.label47.Text = "(caution !)";
+ this.label47.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // mintimestepbox
+ //
+ this.mintimestepbox.Location = new System.Drawing.Point(184, 53);
+ this.mintimestepbox.Name = "mintimestepbox";
+ this.mintimestepbox.Size = new System.Drawing.Size(64, 20);
+ this.mintimestepbox.TabIndex = 166;
+ this.mintimestepbox.Text = "1";
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(184, 118);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(64, 20);
+ this.textBox1.TabIndex = 164;
+ this.textBox1.Text = "0";
+ //
+ // smoothbox
+ //
+ this.smoothbox.Location = new System.Drawing.Point(163, 360);
+ this.smoothbox.Name = "smoothbox";
+ this.smoothbox.Size = new System.Drawing.Size(40, 20);
+ this.smoothbox.TabIndex = 160;
+ this.smoothbox.Text = "1";
+ this.smoothbox.Visible = false;
+ //
+ // cyclemaxbox
+ //
+ this.cyclemaxbox.Location = new System.Drawing.Point(184, 142);
+ this.cyclemaxbox.Name = "cyclemaxbox";
+ this.cyclemaxbox.Size = new System.Drawing.Size(64, 20);
+ this.cyclemaxbox.TabIndex = 155;
+ this.cyclemaxbox.Text = "1000";
+ //
+ // itermaxbox
+ //
+ this.itermaxbox.Location = new System.Drawing.Point(200, 318);
+ this.itermaxbox.Name = "itermaxbox";
+ this.itermaxbox.Size = new System.Drawing.Size(64, 20);
+ this.itermaxbox.TabIndex = 154;
+ this.itermaxbox.Text = "100000";
+ this.itermaxbox.Visible = false;
+ //
+ // limitbox
+ //
+ this.limitbox.Location = new System.Drawing.Point(184, 179);
+ this.limitbox.Name = "limitbox";
+ this.limitbox.Size = new System.Drawing.Size(40, 20);
+ this.limitbox.TabIndex = 144;
+ this.limitbox.Text = "1";
+ //
+ // label31
+ //
+ this.label31.Location = new System.Drawing.Point(56, 118);
+ this.label31.Name = "label31";
+ this.label31.Size = new System.Drawing.Size(120, 24);
+ this.label31.TabIndex = 165;
+ this.label31.Text = "run start time (h)";
+ this.label31.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label27
+ //
+ this.label27.Location = new System.Drawing.Point(64, 142);
+ this.label27.Name = "label27";
+ this.label27.Size = new System.Drawing.Size(112, 24);
+ this.label27.TabIndex = 157;
+ this.label27.Text = "max run duration (h)";
+ this.label27.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label26
+ //
+ this.label26.Location = new System.Drawing.Point(56, 318);
+ this.label26.Name = "label26";
+ this.label26.Size = new System.Drawing.Size(136, 24);
+ this.label26.TabIndex = 156;
+ this.label26.Text = "max # of iterations";
+ this.label26.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.label26.Visible = false;
+ //
+ // label10
+ //
+ this.label10.Location = new System.Drawing.Point(56, 175);
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size(120, 24);
+ this.label10.TabIndex = 152;
+ this.label10.Text = "memory limit";
+ this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label49
+ //
+ this.label49.Location = new System.Drawing.Point(40, 53);
+ this.label49.Name = "label49";
+ this.label49.Size = new System.Drawing.Size(136, 24);
+ this.label49.TabIndex = 167;
+ this.label49.Text = "Min time step (s)";
+ this.label49.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // GrainTab
+ //
+ this.GrainTab.Controls.Add(this.meyerbox);
+ this.GrainTab.Controls.Add(this.checkBox8);
+ this.GrainTab.Controls.Add(this.bedrock_erosion_threshold_box);
+ this.GrainTab.Controls.Add(this.bedrock_erosion_rate_box);
+ this.GrainTab.Controls.Add(this.label92);
+ this.GrainTab.Controls.Add(this.label93);
+ this.GrainTab.Controls.Add(this.label65);
+ this.GrainTab.Controls.Add(this.textBox7);
+ this.GrainTab.Controls.Add(this.label58);
+ this.GrainTab.Controls.Add(this.downstreamshiftbox);
+ this.GrainTab.Controls.Add(this.label55);
+ this.GrainTab.Controls.Add(this.max_vel_box);
+ this.GrainTab.Controls.Add(this.textBox3);
+ this.GrainTab.Controls.Add(this.label60);
+ this.GrainTab.Controls.Add(this.avge_smoothbox);
+ this.GrainTab.Controls.Add(this.nolateral);
+ this.GrainTab.Controls.Add(this.newlateral);
+ this.GrainTab.Controls.Add(this.label7);
+ this.GrainTab.Controls.Add(this.lateralratebox);
+ this.GrainTab.Controls.Add(this.label48);
+ this.GrainTab.Controls.Add(this.label54);
+ this.GrainTab.Controls.Add(this.propremaining);
+ this.GrainTab.Controls.Add(this.label50);
+ this.GrainTab.Controls.Add(this.activebox);
+ this.GrainTab.Controls.Add(this.erodefactorbox);
+ this.GrainTab.Controls.Add(this.label12);
+ this.GrainTab.Controls.Add(this.einsteinbox);
+ this.GrainTab.Controls.Add(this.wilcockbox);
+ this.GrainTab.Controls.Add(this.fallGS9box);
+ this.GrainTab.Controls.Add(this.fallGS8box);
+ this.GrainTab.Controls.Add(this.fallGS7box);
+ this.GrainTab.Controls.Add(this.fallGS6box);
+ this.GrainTab.Controls.Add(this.fallGS5box);
+ this.GrainTab.Controls.Add(this.fallGS4box);
+ this.GrainTab.Controls.Add(this.fallGS3box);
+ this.GrainTab.Controls.Add(this.gpSumLabel);
+ this.GrainTab.Controls.Add(this.gpSumLabel2);
+ this.GrainTab.Controls.Add(this.suspGS9box);
+ this.GrainTab.Controls.Add(this.suspGS8box);
+ this.GrainTab.Controls.Add(this.suspGS7box);
+ this.GrainTab.Controls.Add(this.suspGS6box);
+ this.GrainTab.Controls.Add(this.suspGS5box);
+ this.GrainTab.Controls.Add(this.suspGS4box);
+ this.GrainTab.Controls.Add(this.suspGS3box);
+ this.GrainTab.Controls.Add(this.suspGS2box);
+ this.GrainTab.Controls.Add(this.fallGS2box);
+ this.GrainTab.Controls.Add(this.fallGS1box);
+ this.GrainTab.Controls.Add(this.label28);
+ this.GrainTab.Controls.Add(this.label4);
+ this.GrainTab.Controls.Add(this.suspGS1box);
+ this.GrainTab.Controls.Add(this.gp3box);
+ this.GrainTab.Controls.Add(this.gp4box);
+ this.GrainTab.Controls.Add(this.gp5box);
+ this.GrainTab.Controls.Add(this.gp6box);
+ this.GrainTab.Controls.Add(this.gp7box);
+ this.GrainTab.Controls.Add(this.gp8box);
+ this.GrainTab.Controls.Add(this.gp9box);
+ this.GrainTab.Controls.Add(this.gp2box);
+ this.GrainTab.Controls.Add(this.gp1box);
+ this.GrainTab.Controls.Add(this.g3box);
+ this.GrainTab.Controls.Add(this.g4box);
+ this.GrainTab.Controls.Add(this.g5box);
+ this.GrainTab.Controls.Add(this.g6box);
+ this.GrainTab.Controls.Add(this.g7box);
+ this.GrainTab.Controls.Add(this.g8box);
+ this.GrainTab.Controls.Add(this.g9box);
+ this.GrainTab.Controls.Add(this.g2box);
+ this.GrainTab.Controls.Add(this.g1box);
+ this.GrainTab.Controls.Add(this.label22);
+ this.GrainTab.Controls.Add(this.label21);
+ this.GrainTab.Controls.Add(this.label20);
+ this.GrainTab.Controls.Add(this.label19);
+ this.GrainTab.Controls.Add(this.label18);
+ this.GrainTab.Controls.Add(this.label17);
+ this.GrainTab.Controls.Add(this.label16);
+ this.GrainTab.Controls.Add(this.label15);
+ this.GrainTab.Controls.Add(this.label14);
+ this.GrainTab.Controls.Add(this.label13);
+ this.GrainTab.Controls.Add(this.label6);
+ this.GrainTab.Location = new System.Drawing.Point(4, 22);
+ this.GrainTab.Name = "GrainTab";
+ this.GrainTab.Size = new System.Drawing.Size(1323, 487);
+ this.GrainTab.TabIndex = 3;
+ this.GrainTab.Text = "Sediment";
+ this.GrainTab.UseVisualStyleBackColor = true;
+ //
+ // meyerbox
+ //
+ this.meyerbox.AutoSize = true;
+ this.meyerbox.Location = new System.Drawing.Point(605, 71);
+ this.meyerbox.Name = "meyerbox";
+ this.meyerbox.Size = new System.Drawing.Size(114, 17);
+ this.meyerbox.TabIndex = 107;
+ this.meyerbox.Text = "Meyer Peter Muller";
+ this.meyerbox.UseVisualStyleBackColor = true;
+ this.meyerbox.CheckedChanged += new System.EventHandler(this.meyerbox_CheckedChanged);
+ //
+ // checkBox8
+ //
+ this.checkBox8.Checked = true;
+ this.checkBox8.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.checkBox8.Location = new System.Drawing.Point(27, 322);
+ this.checkBox8.Name = "checkBox8";
+ this.checkBox8.Size = new System.Drawing.Size(169, 28);
+ this.checkBox8.TabIndex = 218;
+ this.checkBox8.Text = "All 9 grainsizes?";
+ //
+ // bedrock_erosion_threshold_box
+ //
+ this.bedrock_erosion_threshold_box.Location = new System.Drawing.Point(27, 362);
+ this.bedrock_erosion_threshold_box.Name = "bedrock_erosion_threshold_box";
+ this.bedrock_erosion_threshold_box.Size = new System.Drawing.Size(100, 20);
+ this.bedrock_erosion_threshold_box.TabIndex = 214;
+ this.bedrock_erosion_threshold_box.Text = "0";
+ //
+ // bedrock_erosion_rate_box
+ //
+ this.bedrock_erosion_rate_box.Location = new System.Drawing.Point(27, 395);
+ this.bedrock_erosion_rate_box.Name = "bedrock_erosion_rate_box";
+ this.bedrock_erosion_rate_box.Size = new System.Drawing.Size(100, 20);
+ this.bedrock_erosion_rate_box.TabIndex = 215;
+ this.bedrock_erosion_rate_box.Text = "0";
+ //
+ // label92
+ //
+ this.label92.Location = new System.Drawing.Point(133, 358);
+ this.label92.Name = "label92";
+ this.label92.Size = new System.Drawing.Size(167, 33);
+ this.label92.TabIndex = 217;
+ this.label92.Text = "Bedrock erosion threshold (Pa)";
+ this.label92.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label93
+ //
+ this.label93.Location = new System.Drawing.Point(138, 393);
+ this.label93.Name = "label93";
+ this.label93.Size = new System.Drawing.Size(162, 24);
+ this.label93.TabIndex = 216;
+ this.label93.Text = "Bedrock erosion rate (m/Pa/Yr)";
+ this.label93.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label65
+ //
+ this.label65.Location = new System.Drawing.Point(686, 415);
+ this.label65.Name = "label65";
+ this.label65.Size = new System.Drawing.Size(131, 27);
+ this.label65.TabIndex = 213;
+ this.label65.Text = "Max difference allowed in cross channel smoothing";
+ //
+ // textBox7
+ //
+ this.textBox7.Location = new System.Drawing.Point(605, 415);
+ this.textBox7.Name = "textBox7";
+ this.textBox7.Size = new System.Drawing.Size(73, 20);
+ this.textBox7.TabIndex = 212;
+ this.textBox7.Text = "0.0001";
+ //
+ // label58
+ //
+ this.label58.Location = new System.Drawing.Point(686, 384);
+ this.label58.Name = "label58";
+ this.label58.Size = new System.Drawing.Size(131, 27);
+ this.label58.TabIndex = 211;
+ this.label58.Text = "Number of cells to shift lat erosion downstream";
+ //
+ // downstreamshiftbox
+ //
+ this.downstreamshiftbox.Location = new System.Drawing.Point(605, 384);
+ this.downstreamshiftbox.Name = "downstreamshiftbox";
+ this.downstreamshiftbox.Size = new System.Drawing.Size(73, 20);
+ this.downstreamshiftbox.TabIndex = 210;
+ this.downstreamshiftbox.Text = "5";
+ //
+ // label55
+ //
+ this.label55.Location = new System.Drawing.Point(683, 103);
+ this.label55.Name = "label55";
+ this.label55.Size = new System.Drawing.Size(195, 27);
+ this.label55.TabIndex = 209;
+ this.label55.Text = "Max velocity used to calc Tau from vel.";
+ //
+ // max_vel_box
+ //
+ this.max_vel_box.Location = new System.Drawing.Point(603, 104);
+ this.max_vel_box.Name = "max_vel_box";
+ this.max_vel_box.Size = new System.Drawing.Size(40, 20);
+ this.max_vel_box.TabIndex = 208;
+ this.max_vel_box.Text = "5";
+ //
+ // textBox3
+ //
+ this.textBox3.Location = new System.Drawing.Point(604, 324);
+ this.textBox3.Name = "textBox3";
+ this.textBox3.Size = new System.Drawing.Size(40, 20);
+ this.textBox3.TabIndex = 202;
+ this.textBox3.Text = "0";
+ //
+ // label60
+ //
+ this.label60.Location = new System.Drawing.Point(683, 350);
+ this.label60.Name = "label60";
+ this.label60.Size = new System.Drawing.Size(131, 27);
+ this.label60.TabIndex = 201;
+ this.label60.Text = "Number of passes for edge smoothing filter";
+ //
+ // avge_smoothbox
+ //
+ this.avge_smoothbox.Location = new System.Drawing.Point(604, 353);
+ this.avge_smoothbox.Name = "avge_smoothbox";
+ this.avge_smoothbox.Size = new System.Drawing.Size(73, 20);
+ this.avge_smoothbox.TabIndex = 200;
+ this.avge_smoothbox.Text = "100";
+ //
+ // nolateral
+ //
+ this.nolateral.Checked = true;
+ this.nolateral.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.nolateral.Location = new System.Drawing.Point(386, 334);
+ this.nolateral.Name = "nolateral";
+ this.nolateral.Size = new System.Drawing.Size(121, 28);
+ this.nolateral.TabIndex = 199;
+ this.nolateral.Text = "No Lateral erosion";
+ this.nolateral.Visible = false;
+ //
+ // newlateral
+ //
+ this.newlateral.Location = new System.Drawing.Point(606, 290);
+ this.newlateral.Name = "newlateral";
+ this.newlateral.Size = new System.Drawing.Size(106, 28);
+ this.newlateral.TabIndex = 198;
+ this.newlateral.Text = "Lateral Erosion";
+ //
+ // label7
+ //
+ this.label7.Location = new System.Drawing.Point(671, 323);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(95, 24);
+ this.label7.TabIndex = 197;
+ this.label7.Text = "Lat erosion rate";
+ this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label7, "Lateral erosion constant that is applied to method 1 (old laterla) and method 2 (" +
+ "new lateral)");
+ //
+ // lateralratebox
+ //
+ this.lateralratebox.Location = new System.Drawing.Point(603, 256);
+ this.lateralratebox.Name = "lateralratebox";
+ this.lateralratebox.Size = new System.Drawing.Size(64, 20);
+ this.lateralratebox.TabIndex = 196;
+ this.lateralratebox.Text = "20";
+ //
+ // label48
+ //
+ this.label48.Location = new System.Drawing.Point(683, 253);
+ this.label48.Name = "label48";
+ this.label48.Size = new System.Drawing.Size(152, 24);
+ this.label48.TabIndex = 195;
+ this.label48.Text = "in channel lateral erosion rate";
+ this.label48.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // label54
+ //
+ this.label54.Location = new System.Drawing.Point(683, 214);
+ this.label54.Name = "label54";
+ this.label54.Size = new System.Drawing.Size(195, 27);
+ this.label54.TabIndex = 193;
+ this.label54.Text = "Proportion re-circulated if recirculate box is checked";
+ //
+ // propremaining
+ //
+ this.propremaining.Location = new System.Drawing.Point(603, 217);
+ this.propremaining.Name = "propremaining";
+ this.propremaining.Size = new System.Drawing.Size(64, 20);
+ this.propremaining.TabIndex = 192;
+ this.propremaining.Text = "1.0";
+ //
+ // label50
+ //
+ this.label50.Location = new System.Drawing.Point(678, 154);
+ this.label50.Name = "label50";
+ this.label50.Size = new System.Drawing.Size(172, 48);
+ this.label50.TabIndex = 173;
+ this.label50.Text = "Active layer thickness (m) must be at least 4 times max erode limit";
+ this.label50.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // activebox
+ //
+ this.activebox.Location = new System.Drawing.Point(603, 160);
+ this.activebox.Name = "activebox";
+ this.activebox.Size = new System.Drawing.Size(64, 20);
+ this.activebox.TabIndex = 172;
+ this.activebox.Text = "0.1";
+ //
+ // erodefactorbox
+ //
+ this.erodefactorbox.Location = new System.Drawing.Point(603, 133);
+ this.erodefactorbox.Name = "erodefactorbox";
+ this.erodefactorbox.Size = new System.Drawing.Size(40, 20);
+ this.erodefactorbox.TabIndex = 170;
+ this.erodefactorbox.Text = "0.02";
+ //
+ // label12
+ //
+ this.label12.Location = new System.Drawing.Point(673, 130);
+ this.label12.Name = "label12";
+ this.label12.Size = new System.Drawing.Size(87, 24);
+ this.label12.TabIndex = 171;
+ this.label12.Text = "Max erode limit";
+ this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // einsteinbox
+ //
+ this.einsteinbox.AutoSize = true;
+ this.einsteinbox.Location = new System.Drawing.Point(605, 51);
+ this.einsteinbox.Name = "einsteinbox";
+ this.einsteinbox.Size = new System.Drawing.Size(63, 17);
+ this.einsteinbox.TabIndex = 107;
+ this.einsteinbox.Text = "Einstein";
+ this.einsteinbox.UseVisualStyleBackColor = true;
+ this.einsteinbox.CheckedChanged += new System.EventHandler(this.einsteinbox_CheckedChanged);
+ //
+ // wilcockbox
+ //
+ this.wilcockbox.AutoSize = true;
+ this.wilcockbox.Checked = true;
+ this.wilcockbox.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.wilcockbox.Location = new System.Drawing.Point(604, 32);
+ this.wilcockbox.Name = "wilcockbox";
+ this.wilcockbox.Size = new System.Drawing.Size(119, 17);
+ this.wilcockbox.TabIndex = 106;
+ this.wilcockbox.Text = "Wilcock and Crowe";
+ this.wilcockbox.UseVisualStyleBackColor = true;
+ this.wilcockbox.CheckedChanged += new System.EventHandler(this.wilcockbox_CheckedChanged);
+ //
+ // fallGS9box
+ //
+ this.fallGS9box.Enabled = false;
+ this.fallGS9box.Location = new System.Drawing.Point(416, 378);
+ this.fallGS9box.Name = "fallGS9box";
+ this.fallGS9box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS9box.TabIndex = 90;
+ this.fallGS9box.Text = "1.357";
+ this.fallGS9box.Visible = false;
+ //
+ // fallGS8box
+ //
+ this.fallGS8box.Enabled = false;
+ this.fallGS8box.Location = new System.Drawing.Point(376, 378);
+ this.fallGS8box.Name = "fallGS8box";
+ this.fallGS8box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS8box.TabIndex = 89;
+ this.fallGS8box.Text = "0.959";
+ this.fallGS8box.Visible = false;
+ //
+ // fallGS7box
+ //
+ this.fallGS7box.Enabled = false;
+ this.fallGS7box.Location = new System.Drawing.Point(424, 343);
+ this.fallGS7box.Name = "fallGS7box";
+ this.fallGS7box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS7box.TabIndex = 88;
+ this.fallGS7box.Text = "0.678";
+ this.fallGS7box.Visible = false;
+ //
+ // fallGS6box
+ //
+ this.fallGS6box.Enabled = false;
+ this.fallGS6box.Location = new System.Drawing.Point(386, 364);
+ this.fallGS6box.Name = "fallGS6box";
+ this.fallGS6box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS6box.TabIndex = 87;
+ this.fallGS6box.Text = "0.479";
+ this.fallGS6box.Visible = false;
+ //
+ // fallGS5box
+ //
+ this.fallGS5box.Enabled = false;
+ this.fallGS5box.Location = new System.Drawing.Point(386, 364);
+ this.fallGS5box.Name = "fallGS5box";
+ this.fallGS5box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS5box.TabIndex = 86;
+ this.fallGS5box.Text = "0.338";
+ this.fallGS5box.Visible = false;
+ //
+ // fallGS4box
+ //
+ this.fallGS4box.Enabled = false;
+ this.fallGS4box.Location = new System.Drawing.Point(393, 368);
+ this.fallGS4box.Name = "fallGS4box";
+ this.fallGS4box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS4box.TabIndex = 85;
+ this.fallGS4box.Text = "0.237";
+ this.fallGS4box.Visible = false;
+ //
+ // fallGS3box
+ //
+ this.fallGS3box.Enabled = false;
+ this.fallGS3box.Location = new System.Drawing.Point(386, 364);
+ this.fallGS3box.Name = "fallGS3box";
+ this.fallGS3box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS3box.TabIndex = 84;
+ this.fallGS3box.Text = "0.164";
+ this.fallGS3box.Visible = false;
+ //
+ // gpSumLabel
+ //
+ this.gpSumLabel.Location = new System.Drawing.Point(229, 343);
+ this.gpSumLabel.Name = "gpSumLabel";
+ this.gpSumLabel.Size = new System.Drawing.Size(96, 16);
+ this.gpSumLabel.TabIndex = 105;
+ this.gpSumLabel.Text = "OK";
+ this.gpSumLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // gpSumLabel2
+ //
+ this.gpSumLabel2.ForeColor = System.Drawing.SystemColors.ControlText;
+ this.gpSumLabel2.Location = new System.Drawing.Point(229, 319);
+ this.gpSumLabel2.Name = "gpSumLabel2";
+ this.gpSumLabel2.Size = new System.Drawing.Size(112, 16);
+ this.gpSumLabel2.TabIndex = 104;
+ this.gpSumLabel2.Text = "sum must equal 1.0";
+ this.gpSumLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // suspGS9box
+ //
+ this.suspGS9box.Location = new System.Drawing.Point(401, 374);
+ this.suspGS9box.Name = "suspGS9box";
+ this.suspGS9box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS9box.TabIndex = 81;
+ this.suspGS9box.Visible = false;
+ this.suspGS9box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS8box
+ //
+ this.suspGS8box.Location = new System.Drawing.Point(394, 368);
+ this.suspGS8box.Name = "suspGS8box";
+ this.suspGS8box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS8box.TabIndex = 80;
+ this.suspGS8box.Visible = false;
+ this.suspGS8box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS7box
+ //
+ this.suspGS7box.Location = new System.Drawing.Point(394, 368);
+ this.suspGS7box.Name = "suspGS7box";
+ this.suspGS7box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS7box.TabIndex = 79;
+ this.suspGS7box.Visible = false;
+ this.suspGS7box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS6box
+ //
+ this.suspGS6box.Location = new System.Drawing.Point(401, 372);
+ this.suspGS6box.Name = "suspGS6box";
+ this.suspGS6box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS6box.TabIndex = 78;
+ this.suspGS6box.Visible = false;
+ this.suspGS6box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS5box
+ //
+ this.suspGS5box.Location = new System.Drawing.Point(416, 372);
+ this.suspGS5box.Name = "suspGS5box";
+ this.suspGS5box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS5box.TabIndex = 77;
+ this.suspGS5box.Visible = false;
+ this.suspGS5box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS4box
+ //
+ this.suspGS4box.Location = new System.Drawing.Point(399, 368);
+ this.suspGS4box.Name = "suspGS4box";
+ this.suspGS4box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS4box.TabIndex = 76;
+ this.suspGS4box.Visible = false;
+ this.suspGS4box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS3box
+ //
+ this.suspGS3box.Location = new System.Drawing.Point(423, 368);
+ this.suspGS3box.Name = "suspGS3box";
+ this.suspGS3box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS3box.TabIndex = 75;
+ this.suspGS3box.Visible = false;
+ this.suspGS3box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS2box
+ //
+ this.suspGS2box.Location = new System.Drawing.Point(416, 371);
+ this.suspGS2box.Name = "suspGS2box";
+ this.suspGS2box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS2box.TabIndex = 74;
+ this.suspGS2box.Visible = false;
+ this.suspGS2box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // fallGS2box
+ //
+ this.fallGS2box.Location = new System.Drawing.Point(386, 364);
+ this.fallGS2box.Name = "fallGS2box";
+ this.fallGS2box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS2box.TabIndex = 83;
+ this.fallGS2box.Text = "0.109";
+ this.fallGS2box.Visible = false;
+ //
+ // fallGS1box
+ //
+ this.fallGS1box.Location = new System.Drawing.Point(424, 40);
+ this.fallGS1box.Name = "fallGS1box";
+ this.fallGS1box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS1box.TabIndex = 82;
+ this.fallGS1box.Text = "0.066";
+ //
+ // label28
+ //
+ this.label28.Location = new System.Drawing.Point(432, 16);
+ this.label28.Name = "label28";
+ this.label28.Size = new System.Drawing.Size(88, 16);
+ this.label28.TabIndex = 95;
+ this.label28.Text = "fall velocity (m/s)";
+ this.label28.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label4
+ //
+ this.label4.Location = new System.Drawing.Point(336, 16);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(96, 16);
+ this.label4.TabIndex = 85;
+ this.label4.Text = "suspended ?";
+ this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // suspGS1box
+ //
+ this.suspGS1box.Location = new System.Drawing.Point(376, 40);
+ this.suspGS1box.Name = "suspGS1box";
+ this.suspGS1box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS1box.TabIndex = 73;
+ this.suspGS1box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // gp3box
+ //
+ this.gp3box.Location = new System.Drawing.Point(232, 104);
+ this.gp3box.Name = "gp3box";
+ this.gp3box.Size = new System.Drawing.Size(100, 20);
+ this.gp3box.TabIndex = 66;
+ this.gp3box.Text = "0.019";
+ this.gp3box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp4box
+ //
+ this.gp4box.Location = new System.Drawing.Point(232, 136);
+ this.gp4box.Name = "gp4box";
+ this.gp4box.Size = new System.Drawing.Size(100, 20);
+ this.gp4box.TabIndex = 67;
+ this.gp4box.Text = "0.029";
+ this.gp4box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp5box
+ //
+ this.gp5box.Location = new System.Drawing.Point(232, 168);
+ this.gp5box.Name = "gp5box";
+ this.gp5box.Size = new System.Drawing.Size(100, 20);
+ this.gp5box.TabIndex = 68;
+ this.gp5box.Text = "0.068";
+ this.gp5box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp6box
+ //
+ this.gp6box.Location = new System.Drawing.Point(232, 200);
+ this.gp6box.Name = "gp6box";
+ this.gp6box.Size = new System.Drawing.Size(100, 20);
+ this.gp6box.TabIndex = 69;
+ this.gp6box.Text = "0.146";
+ this.gp6box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp7box
+ //
+ this.gp7box.Location = new System.Drawing.Point(232, 232);
+ this.gp7box.Name = "gp7box";
+ this.gp7box.Size = new System.Drawing.Size(100, 20);
+ this.gp7box.TabIndex = 70;
+ this.gp7box.Text = "0.220";
+ this.gp7box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp8box
+ //
+ this.gp8box.Location = new System.Drawing.Point(232, 264);
+ this.gp8box.Name = "gp8box";
+ this.gp8box.Size = new System.Drawing.Size(100, 20);
+ this.gp8box.TabIndex = 71;
+ this.gp8box.Text = "0.231";
+ this.gp8box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp9box
+ //
+ this.gp9box.Location = new System.Drawing.Point(232, 296);
+ this.gp9box.Name = "gp9box";
+ this.gp9box.Size = new System.Drawing.Size(100, 20);
+ this.gp9box.TabIndex = 72;
+ this.gp9box.Text = "0.121";
+ this.gp9box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp2box
+ //
+ this.gp2box.Location = new System.Drawing.Point(232, 72);
+ this.gp2box.Name = "gp2box";
+ this.gp2box.Size = new System.Drawing.Size(100, 20);
+ this.gp2box.TabIndex = 65;
+ this.gp2box.Text = "0.022";
+ this.gp2box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp1box
+ //
+ this.gp1box.Location = new System.Drawing.Point(232, 40);
+ this.gp1box.Name = "gp1box";
+ this.gp1box.Size = new System.Drawing.Size(100, 20);
+ this.gp1box.TabIndex = 64;
+ this.gp1box.Text = "0.144";
+ this.gp1box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // g3box
+ //
+ this.g3box.Location = new System.Drawing.Point(96, 104);
+ this.g3box.Name = "g3box";
+ this.g3box.Size = new System.Drawing.Size(100, 20);
+ this.g3box.TabIndex = 57;
+ this.g3box.Text = "0.002";
+ //
+ // g4box
+ //
+ this.g4box.Location = new System.Drawing.Point(96, 136);
+ this.g4box.Name = "g4box";
+ this.g4box.Size = new System.Drawing.Size(100, 20);
+ this.g4box.TabIndex = 58;
+ this.g4box.Text = "0.004";
+ //
+ // g5box
+ //
+ this.g5box.Location = new System.Drawing.Point(96, 168);
+ this.g5box.Name = "g5box";
+ this.g5box.Size = new System.Drawing.Size(100, 20);
+ this.g5box.TabIndex = 59;
+ this.g5box.Text = "0.008";
+ //
+ // g6box
+ //
+ this.g6box.Location = new System.Drawing.Point(96, 200);
+ this.g6box.Name = "g6box";
+ this.g6box.Size = new System.Drawing.Size(100, 20);
+ this.g6box.TabIndex = 60;
+ this.g6box.Text = "0.016";
+ //
+ // g7box
+ //
+ this.g7box.Location = new System.Drawing.Point(96, 232);
+ this.g7box.Name = "g7box";
+ this.g7box.Size = new System.Drawing.Size(100, 20);
+ this.g7box.TabIndex = 61;
+ this.g7box.Text = "0.032";
+ //
+ // g8box
+ //
+ this.g8box.Location = new System.Drawing.Point(96, 264);
+ this.g8box.Name = "g8box";
+ this.g8box.Size = new System.Drawing.Size(100, 20);
+ this.g8box.TabIndex = 62;
+ this.g8box.Text = "0.064";
+ //
+ // g9box
+ //
+ this.g9box.Location = new System.Drawing.Point(96, 296);
+ this.g9box.Name = "g9box";
+ this.g9box.Size = new System.Drawing.Size(100, 20);
+ this.g9box.TabIndex = 63;
+ this.g9box.Text = "0.128";
+ //
+ // g2box
+ //
+ this.g2box.Location = new System.Drawing.Point(96, 72);
+ this.g2box.Name = "g2box";
+ this.g2box.Size = new System.Drawing.Size(100, 20);
+ this.g2box.TabIndex = 56;
+ this.g2box.Text = "0.001";
+ //
+ // g1box
+ //
+ this.g1box.Location = new System.Drawing.Point(96, 40);
+ this.g1box.Name = "g1box";
+ this.g1box.Size = new System.Drawing.Size(100, 20);
+ this.g1box.TabIndex = 55;
+ this.g1box.Text = "0.0005";
+ //
+ // label22
+ //
+ this.label22.Location = new System.Drawing.Point(232, 16);
+ this.label22.Name = "label22";
+ this.label22.Size = new System.Drawing.Size(96, 16);
+ this.label22.TabIndex = 83;
+ this.label22.Text = "proportion";
+ this.label22.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label21
+ //
+ this.label21.Location = new System.Drawing.Point(96, 16);
+ this.label21.Name = "label21";
+ this.label21.Size = new System.Drawing.Size(96, 16);
+ this.label21.TabIndex = 82;
+ this.label21.Text = "grain size (m)";
+ this.label21.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label20
+ //
+ this.label20.Location = new System.Drawing.Point(24, 72);
+ this.label20.Name = "label20";
+ this.label20.Size = new System.Drawing.Size(40, 24);
+ this.label20.TabIndex = 81;
+ this.label20.Text = "size2";
+ this.label20.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label19
+ //
+ this.label19.Location = new System.Drawing.Point(24, 104);
+ this.label19.Name = "label19";
+ this.label19.Size = new System.Drawing.Size(40, 24);
+ this.label19.TabIndex = 80;
+ this.label19.Text = "size3";
+ this.label19.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label18
+ //
+ this.label18.Location = new System.Drawing.Point(24, 136);
+ this.label18.Name = "label18";
+ this.label18.Size = new System.Drawing.Size(40, 24);
+ this.label18.TabIndex = 79;
+ this.label18.Text = "size4";
+ this.label18.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label17
+ //
+ this.label17.Location = new System.Drawing.Point(24, 168);
+ this.label17.Name = "label17";
+ this.label17.Size = new System.Drawing.Size(40, 24);
+ this.label17.TabIndex = 78;
+ this.label17.Text = "size5";
+ this.label17.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label16
+ //
+ this.label16.Location = new System.Drawing.Point(24, 200);
+ this.label16.Name = "label16";
+ this.label16.Size = new System.Drawing.Size(40, 24);
+ this.label16.TabIndex = 77;
+ this.label16.Text = "size6";
+ this.label16.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label15
+ //
+ this.label15.Location = new System.Drawing.Point(24, 232);
+ this.label15.Name = "label15";
+ this.label15.Size = new System.Drawing.Size(40, 24);
+ this.label15.TabIndex = 76;
+ this.label15.Text = "size7";
+ this.label15.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label14
+ //
+ this.label14.Location = new System.Drawing.Point(24, 264);
+ this.label14.Name = "label14";
+ this.label14.Size = new System.Drawing.Size(40, 24);
+ this.label14.TabIndex = 75;
+ this.label14.Text = "size8";
+ this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label13
+ //
+ this.label13.Location = new System.Drawing.Point(24, 296);
+ this.label13.Name = "label13";
+ this.label13.Size = new System.Drawing.Size(40, 24);
+ this.label13.TabIndex = 74;
+ this.label13.Text = "size9";
+ this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label6
+ //
+ this.label6.Location = new System.Drawing.Point(24, 40);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(40, 24);
+ this.label6.TabIndex = 73;
+ this.label6.Text = "size1";
+ this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // DescriptionTab
+ //
+ this.DescriptionTab.Controls.Add(this.DescBox);
+ this.DescriptionTab.Location = new System.Drawing.Point(4, 22);
+ this.DescriptionTab.Name = "DescriptionTab";
+ this.DescriptionTab.Size = new System.Drawing.Size(1323, 487);
+ this.DescriptionTab.TabIndex = 5;
+ this.DescriptionTab.Text = "Description";
+ this.DescriptionTab.UseVisualStyleBackColor = true;
+ //
+ // DescBox
+ //
+ this.DescBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.DescBox.Location = new System.Drawing.Point(16, 16);
+ this.DescBox.Multiline = true;
+ this.DescBox.Name = "DescBox";
+ this.DescBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.DescBox.Size = new System.Drawing.Size(1126, 664);
+ this.DescBox.TabIndex = 132;
+ //
+ // GridTab
+ //
+ this.GridTab.Controls.Add(this.overrideheaderBox);
+ this.GridTab.Controls.Add(this.dxbox);
+ this.GridTab.Controls.Add(this.label11);
+ this.GridTab.Controls.Add(this.ytextbox);
+ this.GridTab.Controls.Add(this.xtextbox);
+ this.GridTab.Controls.Add(this.label2);
+ this.GridTab.Controls.Add(this.label1);
+ this.GridTab.Location = new System.Drawing.Point(4, 22);
+ this.GridTab.Name = "GridTab";
+ this.GridTab.Size = new System.Drawing.Size(1323, 487);
+ this.GridTab.TabIndex = 1;
+ this.GridTab.Text = "Grid";
+ this.GridTab.UseVisualStyleBackColor = true;
+ //
+ // overrideheaderBox
+ //
+ this.overrideheaderBox.Location = new System.Drawing.Point(16, 16);
+ this.overrideheaderBox.Name = "overrideheaderBox";
+ this.overrideheaderBox.Size = new System.Drawing.Size(200, 24);
+ this.overrideheaderBox.TabIndex = 27;
+ this.overrideheaderBox.Text = "override header file";
+ this.overrideheaderBox.CheckedChanged += new System.EventHandler(this.overrideheaderBox_CheckedChanged);
+ //
+ // dxbox
+ //
+ this.dxbox.Enabled = false;
+ this.dxbox.Location = new System.Drawing.Point(120, 88);
+ this.dxbox.Name = "dxbox";
+ this.dxbox.Size = new System.Drawing.Size(40, 20);
+ this.dxbox.TabIndex = 25;
+ this.dxbox.Text = "5";
+ //
+ // label11
+ //
+ this.label11.Enabled = false;
+ this.label11.Location = new System.Drawing.Point(16, 88);
+ this.label11.Name = "label11";
+ this.label11.Size = new System.Drawing.Size(96, 24);
+ this.label11.TabIndex = 26;
+ this.label11.Text = "Cell size";
+ this.label11.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // ytextbox
+ //
+ this.ytextbox.Enabled = false;
+ this.ytextbox.Location = new System.Drawing.Point(120, 64);
+ this.ytextbox.Name = "ytextbox";
+ this.ytextbox.Size = new System.Drawing.Size(56, 20);
+ this.ytextbox.TabIndex = 5;
+ this.ytextbox.Text = "358";
+ //
+ // xtextbox
+ //
+ this.xtextbox.Enabled = false;
+ this.xtextbox.Location = new System.Drawing.Point(120, 40);
+ this.xtextbox.Name = "xtextbox";
+ this.xtextbox.Size = new System.Drawing.Size(56, 20);
+ this.xtextbox.TabIndex = 4;
+ this.xtextbox.Text = "593";
+ //
+ // label2
+ //
+ this.label2.Enabled = false;
+ this.label2.Location = new System.Drawing.Point(16, 64);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(96, 24);
+ this.label2.TabIndex = 7;
+ this.label2.Text = "Y coordinates";
+ this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label1
+ //
+ this.label1.Enabled = false;
+ this.label1.Location = new System.Drawing.Point(24, 40);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(88, 24);
+ this.label1.TabIndex = 6;
+ this.label1.Text = "X coordinates";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // HydrologyTab
+ //
+ this.HydrologyTab.Controls.Add(this.groupBox7);
+ this.HydrologyTab.Controls.Add(this.groupBox5);
+ this.HydrologyTab.Controls.Add(this.groupBox1);
+ this.HydrologyTab.Location = new System.Drawing.Point(4, 22);
+ this.HydrologyTab.Name = "HydrologyTab";
+ this.HydrologyTab.Size = new System.Drawing.Size(1323, 487);
+ this.HydrologyTab.TabIndex = 4;
+ this.HydrologyTab.Text = "Hydrology";
+ this.HydrologyTab.UseVisualStyleBackColor = true;
+ this.HydrologyTab.Click += new System.EventHandler(this.HydrologyTab_Click);
+ //
+ // groupBox7
+ //
+ this.groupBox7.Controls.Add(this.label105);
+ this.groupBox7.Controls.Add(this.mfiletimestepbox);
+ this.groupBox7.Controls.Add(this.hydroindexBox);
+ this.groupBox7.Controls.Add(this.label103);
+ this.groupBox7.Controls.Add(this.label37);
+ this.groupBox7.Controls.Add(this.mvaluebox);
+ this.groupBox7.Controls.Add(this.label102);
+ this.groupBox7.Controls.Add(this.rfnumBox);
+ this.groupBox7.Controls.Add(this.checkBox7);
+ this.groupBox7.Controls.Add(this.label35);
+ this.groupBox7.Controls.Add(this.raintimestepbox);
+ this.groupBox7.Controls.Add(this.jmeaninputfilebox);
+ this.groupBox7.Controls.Add(this.label59);
+ this.groupBox7.Controls.Add(this.mvalueloadbox);
+ this.groupBox7.Controls.Add(this.raindataloadbox);
+ this.groupBox7.Controls.Add(this.label25);
+ this.groupBox7.Location = new System.Drawing.Point(526, 17);
+ this.groupBox7.Name = "groupBox7";
+ this.groupBox7.Size = new System.Drawing.Size(467, 281);
+ this.groupBox7.TabIndex = 222;
+ this.groupBox7.TabStop = false;
+ this.groupBox7.Text = "Rainfall input variables";
+ //
+ // label105
+ //
+ this.label105.Location = new System.Drawing.Point(288, 113);
+ this.label105.Name = "label105";
+ this.label105.Size = new System.Drawing.Size(104, 39);
+ this.label105.TabIndex = 235;
+ this.label105.Text = "Time varying M file time step (min)";
+ this.label105.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // mfiletimestepbox
+ //
+ this.mfiletimestepbox.Location = new System.Drawing.Point(398, 120);
+ this.mfiletimestepbox.Name = "mfiletimestepbox";
+ this.mfiletimestepbox.Size = new System.Drawing.Size(56, 20);
+ this.mfiletimestepbox.TabIndex = 234;
+ this.mfiletimestepbox.Text = "1440";
+ //
+ // hydroindexBox
+ //
+ this.hydroindexBox.Location = new System.Drawing.Point(152, 227);
+ this.hydroindexBox.Name = "hydroindexBox";
+ this.hydroindexBox.Size = new System.Drawing.Size(118, 20);
+ this.hydroindexBox.TabIndex = 233;
+ this.hydroindexBox.Text = "null";
+ this.hydroindexBox.Visible = false;
+ //
+ // label103
+ //
+ this.label103.AutoSize = true;
+ this.label103.Location = new System.Drawing.Point(40, 230);
+ this.label103.Name = "label103";
+ this.label103.Size = new System.Drawing.Size(74, 13);
+ this.label103.TabIndex = 232;
+ this.label103.Text = "hydroindex file";
+ this.label103.Visible = false;
+ //
+ // label37
+ //
+ this.label37.Location = new System.Drawing.Point(16, 81);
+ this.label37.Name = "label37";
+ this.label37.Size = new System.Drawing.Size(128, 24);
+ this.label37.TabIndex = 200;
+ this.label37.Text = "\'m\' value";
+ this.label37.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // mvaluebox
+ //
+ this.mvaluebox.Location = new System.Drawing.Point(153, 85);
+ this.mvaluebox.Name = "mvaluebox";
+ this.mvaluebox.Size = new System.Drawing.Size(40, 20);
+ this.mvaluebox.TabIndex = 199;
+ this.mvaluebox.Text = "0.01";
+ //
+ // label102
+ //
+ this.label102.AutoSize = true;
+ this.label102.Location = new System.Drawing.Point(40, 202);
+ this.label102.Name = "label102";
+ this.label102.Size = new System.Drawing.Size(98, 13);
+ this.label102.TabIndex = 231;
+ this.label102.Text = "number of rain cells";
+ this.label102.Visible = false;
+ //
+ // rfnumBox
+ //
+ this.rfnumBox.Location = new System.Drawing.Point(152, 199);
+ this.rfnumBox.Name = "rfnumBox";
+ this.rfnumBox.Size = new System.Drawing.Size(56, 20);
+ this.rfnumBox.TabIndex = 230;
+ this.rfnumBox.Text = "1";
+ this.rfnumBox.Visible = false;
+ //
+ // checkBox7
+ //
+ this.checkBox7.AutoSize = true;
+ this.checkBox7.Location = new System.Drawing.Point(43, 177);
+ this.checkBox7.Name = "checkBox7";
+ this.checkBox7.Size = new System.Drawing.Size(297, 17);
+ this.checkBox7.TabIndex = 229;
+ this.checkBox7.Text = "Spatially variable rainfall and M value (if M value file used)";
+ this.checkBox7.UseVisualStyleBackColor = true;
+ this.checkBox7.CheckedChanged += new System.EventHandler(this.checkBox7_CheckedChanged);
+ //
+ // label35
+ //
+ this.label35.Location = new System.Drawing.Point(40, 47);
+ this.label35.Name = "label35";
+ this.label35.Size = new System.Drawing.Size(104, 39);
+ this.label35.TabIndex = 228;
+ this.label35.Text = "Rainfall data file time step (min)";
+ this.label35.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // raintimestepbox
+ //
+ this.raintimestepbox.Location = new System.Drawing.Point(153, 51);
+ this.raintimestepbox.Name = "raintimestepbox";
+ this.raintimestepbox.Size = new System.Drawing.Size(56, 20);
+ this.raintimestepbox.TabIndex = 227;
+ this.raintimestepbox.Text = "60";
+ //
+ // jmeaninputfilebox
+ //
+ this.jmeaninputfilebox.AutoSize = true;
+ this.jmeaninputfilebox.Location = new System.Drawing.Point(43, 151);
+ this.jmeaninputfilebox.Name = "jmeaninputfilebox";
+ this.jmeaninputfilebox.Size = new System.Drawing.Size(263, 17);
+ this.jmeaninputfilebox.TabIndex = 226;
+ this.jmeaninputfilebox.Text = "if checked, discharge is read direct from rainfall file";
+ this.jmeaninputfilebox.UseVisualStyleBackColor = true;
+ //
+ // label59
+ //
+ this.label59.AutoSize = true;
+ this.label59.Location = new System.Drawing.Point(40, 126);
+ this.label59.Name = "label59";
+ this.label59.Size = new System.Drawing.Size(95, 13);
+ this.label59.TabIndex = 225;
+ this.label59.Text = "Time varying M file";
+ //
+ // mvalueloadbox
+ //
+ this.mvalueloadbox.Location = new System.Drawing.Point(153, 120);
+ this.mvalueloadbox.Name = "mvalueloadbox";
+ this.mvalueloadbox.Size = new System.Drawing.Size(118, 20);
+ this.mvalueloadbox.TabIndex = 224;
+ this.mvalueloadbox.Text = "null";
+ //
+ // raindataloadbox
+ //
+ this.raindataloadbox.Location = new System.Drawing.Point(152, 25);
+ this.raindataloadbox.Name = "raindataloadbox";
+ this.raindataloadbox.Size = new System.Drawing.Size(120, 20);
+ this.raindataloadbox.TabIndex = 223;
+ this.raindataloadbox.Text = "null";
+ //
+ // label25
+ //
+ this.label25.Location = new System.Drawing.Point(40, 25);
+ this.label25.Name = "label25";
+ this.label25.Size = new System.Drawing.Size(104, 24);
+ this.label25.TabIndex = 222;
+ this.label25.Text = "Rainfall data file";
+ this.label25.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label25, "Hourly rainfall data - in an ascii format");
+ //
+ // groupBox5
+ //
+ this.groupBox5.Controls.Add(this.label83);
+ this.groupBox5.Controls.Add(this.div_inputs_box);
+ this.groupBox5.Controls.Add(this.infile8);
+ this.groupBox5.Controls.Add(this.ybox8);
+ this.groupBox5.Controls.Add(this.xbox8);
+ this.groupBox5.Controls.Add(this.inbox8);
+ this.groupBox5.Controls.Add(this.infile7);
+ this.groupBox5.Controls.Add(this.ybox7);
+ this.groupBox5.Controls.Add(this.xbox7);
+ this.groupBox5.Controls.Add(this.inbox7);
+ this.groupBox5.Controls.Add(this.infile6);
+ this.groupBox5.Controls.Add(this.ybox6);
+ this.groupBox5.Controls.Add(this.xbox6);
+ this.groupBox5.Controls.Add(this.inbox6);
+ this.groupBox5.Controls.Add(this.infile5);
+ this.groupBox5.Controls.Add(this.ybox5);
+ this.groupBox5.Controls.Add(this.xbox5);
+ this.groupBox5.Controls.Add(this.inbox5);
+ this.groupBox5.Controls.Add(this.input_time_step_box);
+ this.groupBox5.Controls.Add(this.infile4);
+ this.groupBox5.Controls.Add(this.infile3);
+ this.groupBox5.Controls.Add(this.infile2);
+ this.groupBox5.Controls.Add(this.infile1);
+ this.groupBox5.Controls.Add(this.ybox1);
+ this.groupBox5.Controls.Add(this.ybox2);
+ this.groupBox5.Controls.Add(this.ybox3);
+ this.groupBox5.Controls.Add(this.ybox4);
+ this.groupBox5.Controls.Add(this.xbox2);
+ this.groupBox5.Controls.Add(this.xbox3);
+ this.groupBox5.Controls.Add(this.xbox4);
+ this.groupBox5.Controls.Add(this.xbox1);
+ this.groupBox5.Controls.Add(this.label29);
+ this.groupBox5.Controls.Add(this.label44);
+ this.groupBox5.Controls.Add(this.label43);
+ this.groupBox5.Controls.Add(this.label41);
+ this.groupBox5.Controls.Add(this.inbox2);
+ this.groupBox5.Controls.Add(this.inbox3);
+ this.groupBox5.Controls.Add(this.inbox4);
+ this.groupBox5.Controls.Add(this.inbox1);
+ this.groupBox5.Controls.Add(this.label42);
+ this.groupBox5.Location = new System.Drawing.Point(32, 17);
+ this.groupBox5.Name = "groupBox5";
+ this.groupBox5.Size = new System.Drawing.Size(463, 332);
+ this.groupBox5.TabIndex = 214;
+ this.groupBox5.TabStop = false;
+ this.groupBox5.Text = "Reach input variables";
+ //
+ // label83
+ //
+ this.label83.Location = new System.Drawing.Point(118, 275);
+ this.label83.Name = "label83";
+ this.label83.Size = new System.Drawing.Size(100, 32);
+ this.label83.TabIndex = 202;
+ this.label83.Text = "Divide inputs by..";
+ //
+ // div_inputs_box
+ //
+ this.div_inputs_box.Location = new System.Drawing.Point(224, 272);
+ this.div_inputs_box.Name = "div_inputs_box";
+ this.div_inputs_box.Size = new System.Drawing.Size(31, 20);
+ this.div_inputs_box.TabIndex = 201;
+ this.div_inputs_box.Text = "1";
+ //
+ // infile8
+ //
+ this.infile8.Location = new System.Drawing.Point(166, 236);
+ this.infile8.Name = "infile8";
+ this.infile8.Size = new System.Drawing.Size(120, 20);
+ this.infile8.TabIndex = 198;
+ //
+ // ybox8
+ //
+ this.ybox8.Location = new System.Drawing.Point(120, 236);
+ this.ybox8.Name = "ybox8";
+ this.ybox8.Size = new System.Drawing.Size(31, 20);
+ this.ybox8.TabIndex = 197;
+ //
+ // xbox8
+ //
+ this.xbox8.Location = new System.Drawing.Point(73, 236);
+ this.xbox8.Name = "xbox8";
+ this.xbox8.Size = new System.Drawing.Size(32, 20);
+ this.xbox8.TabIndex = 196;
+ //
+ // inbox8
+ //
+ this.inbox8.Location = new System.Drawing.Point(9, 236);
+ this.inbox8.Name = "inbox8";
+ this.inbox8.Size = new System.Drawing.Size(64, 16);
+ this.inbox8.TabIndex = 195;
+ this.inbox8.Text = "Input 8";
+ //
+ // infile7
+ //
+ this.infile7.Location = new System.Drawing.Point(166, 208);
+ this.infile7.Name = "infile7";
+ this.infile7.Size = new System.Drawing.Size(120, 20);
+ this.infile7.TabIndex = 194;
+ //
+ // ybox7
+ //
+ this.ybox7.Location = new System.Drawing.Point(120, 208);
+ this.ybox7.Name = "ybox7";
+ this.ybox7.Size = new System.Drawing.Size(31, 20);
+ this.ybox7.TabIndex = 193;
+ //
+ // xbox7
+ //
+ this.xbox7.Location = new System.Drawing.Point(73, 208);
+ this.xbox7.Name = "xbox7";
+ this.xbox7.Size = new System.Drawing.Size(32, 20);
+ this.xbox7.TabIndex = 192;
+ //
+ // inbox7
+ //
+ this.inbox7.Location = new System.Drawing.Point(9, 208);
+ this.inbox7.Name = "inbox7";
+ this.inbox7.Size = new System.Drawing.Size(64, 17);
+ this.inbox7.TabIndex = 191;
+ this.inbox7.Text = "Input 7";
+ //
+ // infile6
+ //
+ this.infile6.Location = new System.Drawing.Point(166, 180);
+ this.infile6.Name = "infile6";
+ this.infile6.Size = new System.Drawing.Size(120, 20);
+ this.infile6.TabIndex = 190;
+ //
+ // ybox6
+ //
+ this.ybox6.Location = new System.Drawing.Point(120, 180);
+ this.ybox6.Name = "ybox6";
+ this.ybox6.Size = new System.Drawing.Size(31, 20);
+ this.ybox6.TabIndex = 189;
+ //
+ // xbox6
+ //
+ this.xbox6.Location = new System.Drawing.Point(73, 180);
+ this.xbox6.Name = "xbox6";
+ this.xbox6.Size = new System.Drawing.Size(32, 20);
+ this.xbox6.TabIndex = 188;
+ //
+ // inbox6
+ //
+ this.inbox6.Location = new System.Drawing.Point(9, 180);
+ this.inbox6.Name = "inbox6";
+ this.inbox6.Size = new System.Drawing.Size(64, 17);
+ this.inbox6.TabIndex = 187;
+ this.inbox6.Text = "Input 6";
+ //
+ // infile5
+ //
+ this.infile5.Location = new System.Drawing.Point(166, 153);
+ this.infile5.Name = "infile5";
+ this.infile5.Size = new System.Drawing.Size(120, 20);
+ this.infile5.TabIndex = 186;
+ //
+ // ybox5
+ //
+ this.ybox5.Location = new System.Drawing.Point(120, 153);
+ this.ybox5.Name = "ybox5";
+ this.ybox5.Size = new System.Drawing.Size(31, 20);
+ this.ybox5.TabIndex = 185;
+ //
+ // xbox5
+ //
+ this.xbox5.Location = new System.Drawing.Point(73, 153);
+ this.xbox5.Name = "xbox5";
+ this.xbox5.Size = new System.Drawing.Size(32, 20);
+ this.xbox5.TabIndex = 184;
+ //
+ // inbox5
+ //
+ this.inbox5.Location = new System.Drawing.Point(9, 153);
+ this.inbox5.Name = "inbox5";
+ this.inbox5.Size = new System.Drawing.Size(64, 16);
+ this.inbox5.TabIndex = 183;
+ this.inbox5.Text = "Input 5";
+ //
+ // input_time_step_box
+ //
+ this.input_time_step_box.Location = new System.Drawing.Point(320, 90);
+ this.input_time_step_box.Name = "input_time_step_box";
+ this.input_time_step_box.Size = new System.Drawing.Size(63, 20);
+ this.input_time_step_box.TabIndex = 181;
+ this.input_time_step_box.Text = "1440";
+ //
+ // infile4
+ //
+ this.infile4.Location = new System.Drawing.Point(169, 127);
+ this.infile4.Name = "infile4";
+ this.infile4.Size = new System.Drawing.Size(120, 20);
+ this.infile4.TabIndex = 180;
+ //
+ // infile3
+ //
+ this.infile3.Location = new System.Drawing.Point(169, 103);
+ this.infile3.Name = "infile3";
+ this.infile3.Size = new System.Drawing.Size(120, 20);
+ this.infile3.TabIndex = 179;
+ //
+ // infile2
+ //
+ this.infile2.Location = new System.Drawing.Point(169, 79);
+ this.infile2.Name = "infile2";
+ this.infile2.Size = new System.Drawing.Size(120, 20);
+ this.infile2.TabIndex = 178;
+ //
+ // infile1
+ //
+ this.infile1.Location = new System.Drawing.Point(169, 55);
+ this.infile1.Name = "infile1";
+ this.infile1.Size = new System.Drawing.Size(120, 20);
+ this.infile1.TabIndex = 177;
+ //
+ // ybox1
+ //
+ this.ybox1.Location = new System.Drawing.Point(121, 55);
+ this.ybox1.Name = "ybox1";
+ this.ybox1.Size = new System.Drawing.Size(32, 20);
+ this.ybox1.TabIndex = 175;
+ //
+ // ybox2
+ //
+ this.ybox2.Location = new System.Drawing.Point(121, 79);
+ this.ybox2.Name = "ybox2";
+ this.ybox2.Size = new System.Drawing.Size(32, 20);
+ this.ybox2.TabIndex = 174;
+ //
+ // ybox3
+ //
+ this.ybox3.Location = new System.Drawing.Point(121, 103);
+ this.ybox3.Name = "ybox3";
+ this.ybox3.Size = new System.Drawing.Size(32, 20);
+ this.ybox3.TabIndex = 173;
+ //
+ // ybox4
+ //
+ this.ybox4.Location = new System.Drawing.Point(121, 127);
+ this.ybox4.Name = "ybox4";
+ this.ybox4.Size = new System.Drawing.Size(32, 20);
+ this.ybox4.TabIndex = 172;
+ //
+ // xbox2
+ //
+ this.xbox2.Location = new System.Drawing.Point(73, 79);
+ this.xbox2.Name = "xbox2";
+ this.xbox2.Size = new System.Drawing.Size(32, 20);
+ this.xbox2.TabIndex = 171;
+ //
+ // xbox3
+ //
+ this.xbox3.Location = new System.Drawing.Point(73, 103);
+ this.xbox3.Name = "xbox3";
+ this.xbox3.Size = new System.Drawing.Size(32, 20);
+ this.xbox3.TabIndex = 170;
+ //
+ // xbox4
+ //
+ this.xbox4.Location = new System.Drawing.Point(73, 127);
+ this.xbox4.Name = "xbox4";
+ this.xbox4.Size = new System.Drawing.Size(32, 20);
+ this.xbox4.TabIndex = 169;
+ //
+ // xbox1
+ //
+ this.xbox1.Location = new System.Drawing.Point(73, 55);
+ this.xbox1.Name = "xbox1";
+ this.xbox1.Size = new System.Drawing.Size(32, 20);
+ this.xbox1.TabIndex = 168;
+ //
+ // label29
+ //
+ this.label29.Location = new System.Drawing.Point(317, 60);
+ this.label29.Name = "label29";
+ this.label29.Size = new System.Drawing.Size(100, 32);
+ this.label29.TabIndex = 182;
+ this.label29.Text = "input data time step (mins)";
+ //
+ // label44
+ //
+ this.label44.Location = new System.Drawing.Point(169, 31);
+ this.label44.Name = "label44";
+ this.label44.Size = new System.Drawing.Size(56, 16);
+ this.label44.TabIndex = 176;
+ this.label44.Text = "File Name";
+ //
+ // label43
+ //
+ this.label43.Location = new System.Drawing.Point(129, 31);
+ this.label43.Name = "label43";
+ this.label43.Size = new System.Drawing.Size(16, 16);
+ this.label43.TabIndex = 167;
+ this.label43.Text = "Y";
+ //
+ // label41
+ //
+ this.label41.Location = new System.Drawing.Point(81, 31);
+ this.label41.Name = "label41";
+ this.label41.Size = new System.Drawing.Size(16, 16);
+ this.label41.TabIndex = 165;
+ this.label41.Text = "X";
+ //
+ // inbox2
+ //
+ this.inbox2.Location = new System.Drawing.Point(9, 79);
+ this.inbox2.Name = "inbox2";
+ this.inbox2.Size = new System.Drawing.Size(64, 16);
+ this.inbox2.TabIndex = 164;
+ this.inbox2.Text = "Input 2";
+ //
+ // inbox3
+ //
+ this.inbox3.Location = new System.Drawing.Point(9, 103);
+ this.inbox3.Name = "inbox3";
+ this.inbox3.Size = new System.Drawing.Size(64, 16);
+ this.inbox3.TabIndex = 163;
+ this.inbox3.Text = "Input 3";
+ //
+ // inbox4
+ //
+ this.inbox4.Location = new System.Drawing.Point(9, 127);
+ this.inbox4.Name = "inbox4";
+ this.inbox4.Size = new System.Drawing.Size(64, 16);
+ this.inbox4.TabIndex = 162;
+ this.inbox4.Text = "Input 4";
+ //
+ // inbox1
+ //
+ this.inbox1.Location = new System.Drawing.Point(9, 55);
+ this.inbox1.Name = "inbox1";
+ this.inbox1.Size = new System.Drawing.Size(64, 16);
+ this.inbox1.TabIndex = 161;
+ this.inbox1.Text = "Input 1";
+ //
+ // label42
+ //
+ this.label42.Location = new System.Drawing.Point(81, 31);
+ this.label42.Name = "label42";
+ this.label42.Size = new System.Drawing.Size(16, 16);
+ this.label42.TabIndex = 166;
+ this.label42.Text = "X";
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.label90);
+ this.groupBox1.Controls.Add(this.TidalFileName);
+ this.groupBox1.Controls.Add(this.TidalInputStep);
+ this.groupBox1.Controls.Add(this.label82);
+ this.groupBox1.Controls.Add(this.TidalYmin);
+ this.groupBox1.Controls.Add(this.TidalYmax);
+ this.groupBox1.Controls.Add(this.TidalXmax);
+ this.groupBox1.Controls.Add(this.TidalXmin);
+ this.groupBox1.Controls.Add(this.label80);
+ this.groupBox1.Controls.Add(this.label81);
+ this.groupBox1.Location = new System.Drawing.Point(526, 303);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(364, 202);
+ this.groupBox1.TabIndex = 213;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Stage/Tidal input variables";
+ //
+ // label90
+ //
+ this.label90.Location = new System.Drawing.Point(206, 45);
+ this.label90.Name = "label90";
+ this.label90.Size = new System.Drawing.Size(55, 15);
+ this.label90.TabIndex = 212;
+ this.label90.Text = "File Name";
+ //
+ // TidalFileName
+ //
+ this.TidalFileName.Location = new System.Drawing.Point(207, 62);
+ this.TidalFileName.Name = "TidalFileName";
+ this.TidalFileName.Size = new System.Drawing.Size(120, 20);
+ this.TidalFileName.TabIndex = 211;
+ //
+ // TidalInputStep
+ //
+ this.TidalInputStep.Location = new System.Drawing.Point(52, 121);
+ this.TidalInputStep.Name = "TidalInputStep";
+ this.TidalInputStep.Size = new System.Drawing.Size(63, 20);
+ this.TidalInputStep.TabIndex = 209;
+ this.TidalInputStep.Text = "1440";
+ //
+ // label82
+ //
+ this.label82.Location = new System.Drawing.Point(125, 114);
+ this.label82.Name = "label82";
+ this.label82.Size = new System.Drawing.Size(100, 32);
+ this.label82.TabIndex = 210;
+ this.label82.Text = "input data time step (mins)";
+ //
+ // TidalYmin
+ //
+ this.TidalYmin.Location = new System.Drawing.Point(93, 39);
+ this.TidalYmin.Name = "TidalYmin";
+ this.TidalYmin.Size = new System.Drawing.Size(32, 20);
+ this.TidalYmin.TabIndex = 208;
+ this.TidalYmin.Text = "0";
+ //
+ // TidalYmax
+ //
+ this.TidalYmax.Location = new System.Drawing.Point(93, 87);
+ this.TidalYmax.Name = "TidalYmax";
+ this.TidalYmax.Size = new System.Drawing.Size(32, 20);
+ this.TidalYmax.TabIndex = 207;
+ this.TidalYmax.Text = "0";
+ //
+ // TidalXmax
+ //
+ this.TidalXmax.Location = new System.Drawing.Point(128, 62);
+ this.TidalXmax.Name = "TidalXmax";
+ this.TidalXmax.Size = new System.Drawing.Size(31, 20);
+ this.TidalXmax.TabIndex = 206;
+ this.TidalXmax.Text = "0";
+ //
+ // TidalXmin
+ //
+ this.TidalXmin.Location = new System.Drawing.Point(54, 62);
+ this.TidalXmin.Name = "TidalXmin";
+ this.TidalXmin.Size = new System.Drawing.Size(31, 20);
+ this.TidalXmin.TabIndex = 205;
+ this.TidalXmin.Text = "0";
+ //
+ // label80
+ //
+ this.label80.Location = new System.Drawing.Point(100, 21);
+ this.label80.Name = "label80";
+ this.label80.Size = new System.Drawing.Size(15, 15);
+ this.label80.TabIndex = 204;
+ this.label80.Text = "Y";
+ //
+ // label81
+ //
+ this.label81.Location = new System.Drawing.Point(32, 65);
+ this.label81.Name = "label81";
+ this.label81.Size = new System.Drawing.Size(16, 15);
+ this.label81.TabIndex = 203;
+ this.label81.Text = "X";
+ //
+ // tabPage2
+ //
+ this.tabPage2.Controls.Add(this.groupBox8);
+ this.tabPage2.Controls.Add(this.veg_lat_box);
+ this.tabPage2.Controls.Add(this.label51);
+ this.tabPage2.Controls.Add(this.grasstextbox);
+ this.tabPage2.Controls.Add(this.label40);
+ this.tabPage2.Controls.Add(this.label36);
+ this.tabPage2.Controls.Add(this.vegTauCritBox);
+ this.tabPage2.Location = new System.Drawing.Point(4, 22);
+ this.tabPage2.Name = "tabPage2";
+ this.tabPage2.Size = new System.Drawing.Size(1323, 487);
+ this.tabPage2.TabIndex = 7;
+ this.tabPage2.Text = "Vegetation";
+ this.tabPage2.UseVisualStyleBackColor = true;
+ //
+ // groupBox8
+ //
+ this.groupBox8.Controls.Add(this.radioButton2);
+ this.groupBox8.Controls.Add(this.radioButton1);
+ this.groupBox8.Location = new System.Drawing.Point(284, 32);
+ this.groupBox8.Name = "groupBox8";
+ this.groupBox8.Size = new System.Drawing.Size(117, 77);
+ this.groupBox8.TabIndex = 178;
+ this.groupBox8.TabStop = false;
+ this.groupBox8.Text = "Vegetation model";
+ //
+ // radioButton2
+ //
+ this.radioButton2.AutoSize = true;
+ this.radioButton2.Location = new System.Drawing.Point(17, 43);
+ this.radioButton2.Name = "radioButton2";
+ this.radioButton2.Size = new System.Drawing.Size(84, 17);
+ this.radioButton2.TabIndex = 177;
+ this.radioButton2.Text = "new (>=1.9g)";
+ this.radioButton2.UseVisualStyleBackColor = true;
+ //
+ // radioButton1
+ //
+ this.radioButton1.AutoSize = true;
+ this.radioButton1.Checked = true;
+ this.radioButton1.Location = new System.Drawing.Point(17, 20);
+ this.radioButton1.Name = "radioButton1";
+ this.radioButton1.Size = new System.Drawing.Size(75, 17);
+ this.radioButton1.TabIndex = 176;
+ this.radioButton1.TabStop = true;
+ this.radioButton1.Text = "old (<1.9d)";
+ this.radioButton1.UseVisualStyleBackColor = true;
+ //
+ // veg_lat_box
+ //
+ this.veg_lat_box.Location = new System.Drawing.Point(157, 117);
+ this.veg_lat_box.Name = "veg_lat_box";
+ this.veg_lat_box.Size = new System.Drawing.Size(40, 20);
+ this.veg_lat_box.TabIndex = 175;
+ this.veg_lat_box.Text = "0.1";
+ //
+ // label51
+ //
+ this.label51.Location = new System.Drawing.Point(29, 103);
+ this.label51.Name = "label51";
+ this.label51.Size = new System.Drawing.Size(120, 47);
+ this.label51.TabIndex = 174;
+ this.label51.Text = "Proportion of erosion that can occur when veg is fully grown (0-1)";
+ this.label51.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // grasstextbox
+ //
+ this.grasstextbox.Location = new System.Drawing.Point(157, 68);
+ this.grasstextbox.Name = "grasstextbox";
+ this.grasstextbox.Size = new System.Drawing.Size(40, 20);
+ this.grasstextbox.TabIndex = 172;
+ this.grasstextbox.Text = "5";
+ //
+ // label40
+ //
+ this.label40.Location = new System.Drawing.Point(29, 68);
+ this.label40.Name = "label40";
+ this.label40.Size = new System.Drawing.Size(120, 24);
+ this.label40.TabIndex = 173;
+ this.label40.Text = "Grass maturity (yrs)";
+ this.label40.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label36
+ //
+ this.label36.Location = new System.Drawing.Point(37, 28);
+ this.label36.Name = "label36";
+ this.label36.Size = new System.Drawing.Size(112, 24);
+ this.label36.TabIndex = 108;
+ this.label36.Text = "vegetation crit shear";
+ this.label36.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // vegTauCritBox
+ //
+ this.vegTauCritBox.Location = new System.Drawing.Point(157, 32);
+ this.vegTauCritBox.Name = "vegTauCritBox";
+ this.vegTauCritBox.Size = new System.Drawing.Size(71, 20);
+ this.vegTauCritBox.TabIndex = 92;
+ this.vegTauCritBox.Text = "180.0";
+ //
+ // tabPage4
+ //
+ this.tabPage4.Controls.Add(this.soilerosionBox);
+ this.tabPage4.Controls.Add(this.landslidesBox);
+ this.tabPage4.Controls.Add(this.label75);
+ this.tabPage4.Controls.Add(this.label74);
+ this.tabPage4.Controls.Add(this.label73);
+ this.tabPage4.Controls.Add(this.label72);
+ this.tabPage4.Controls.Add(this.label71);
+ this.tabPage4.Controls.Add(this.m3Box);
+ this.tabPage4.Controls.Add(this.n1Box);
+ this.tabPage4.Controls.Add(this.m1Box);
+ this.tabPage4.Controls.Add(this.Beta3Box);
+ this.tabPage4.Controls.Add(this.Beta1Box);
+ this.tabPage4.Controls.Add(this.SiberiaBox);
+ this.tabPage4.Controls.Add(this.label70);
+ this.tabPage4.Controls.Add(this.label69);
+ this.tabPage4.Controls.Add(this.label68);
+ this.tabPage4.Controls.Add(this.label67);
+ this.tabPage4.Controls.Add(this.soil_ratebox);
+ this.tabPage4.Controls.Add(this.slopebox);
+ this.tabPage4.Controls.Add(this.creepratebox);
+ this.tabPage4.Controls.Add(this.label34);
+ this.tabPage4.Controls.Add(this.label8);
+ this.tabPage4.Location = new System.Drawing.Point(4, 22);
+ this.tabPage4.Name = "tabPage4";
+ this.tabPage4.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage4.Size = new System.Drawing.Size(1323, 487);
+ this.tabPage4.TabIndex = 9;
+ this.tabPage4.Text = "Slope Processes";
+ this.tabPage4.UseVisualStyleBackColor = true;
+ //
+ // soilerosionBox
+ //
+ this.soilerosionBox.Location = new System.Drawing.Point(223, 163);
+ this.soilerosionBox.Name = "soilerosionBox";
+ this.soilerosionBox.Size = new System.Drawing.Size(147, 34);
+ this.soilerosionBox.TabIndex = 187;
+ this.soilerosionBox.Text = "Soil erosion varies according to j_mean";
+ this.toolTip1.SetToolTip(this.soilerosionBox, "CAESAR can run in both catchment and reach mode, but if you have catchment mode c" +
+ "hecked, you should input a rainfall data file");
+ //
+ // landslidesBox
+ //
+ this.landslidesBox.Location = new System.Drawing.Point(223, 69);
+ this.landslidesBox.Name = "landslidesBox";
+ this.landslidesBox.Size = new System.Drawing.Size(196, 34);
+ this.landslidesBox.TabIndex = 186;
+ this.landslidesBox.Text = "Dynamic Slope fail angle - varies according to j_mean";
+ //
+ // label75
+ //
+ this.label75.Location = new System.Drawing.Point(648, 174);
+ this.label75.Name = "label75";
+ this.label75.Size = new System.Drawing.Size(96, 24);
+ this.label75.TabIndex = 185;
+ this.label75.Text = "n1";
+ this.label75.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label74
+ //
+ this.label74.Location = new System.Drawing.Point(648, 151);
+ this.label74.Name = "label74";
+ this.label74.Size = new System.Drawing.Size(96, 24);
+ this.label74.TabIndex = 184;
+ this.label74.Text = "m3";
+ this.label74.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label73
+ //
+ this.label73.Location = new System.Drawing.Point(648, 73);
+ this.label73.Name = "label73";
+ this.label73.Size = new System.Drawing.Size(96, 24);
+ this.label73.TabIndex = 183;
+ this.label73.Text = "Beta1";
+ this.label73.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label72
+ //
+ this.label72.Location = new System.Drawing.Point(648, 125);
+ this.label72.Name = "label72";
+ this.label72.Size = new System.Drawing.Size(96, 24);
+ this.label72.TabIndex = 182;
+ this.label72.Text = "m1";
+ this.label72.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label71
+ //
+ this.label71.Location = new System.Drawing.Point(648, 99);
+ this.label71.Name = "label71";
+ this.label71.Size = new System.Drawing.Size(96, 24);
+ this.label71.TabIndex = 181;
+ this.label71.Text = "Beta3";
+ this.label71.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // m3Box
+ //
+ this.m3Box.Location = new System.Drawing.Point(750, 151);
+ this.m3Box.Name = "m3Box";
+ this.m3Box.Size = new System.Drawing.Size(49, 20);
+ this.m3Box.TabIndex = 180;
+ this.m3Box.Text = "0.79";
+ //
+ // n1Box
+ //
+ this.n1Box.Location = new System.Drawing.Point(750, 177);
+ this.n1Box.Name = "n1Box";
+ this.n1Box.Size = new System.Drawing.Size(49, 20);
+ this.n1Box.TabIndex = 179;
+ this.n1Box.Text = "0.69";
+ this.n1Box.TextChanged += new System.EventHandler(this.n1Box_TextChanged);
+ //
+ // m1Box
+ //
+ this.m1Box.Location = new System.Drawing.Point(750, 125);
+ this.m1Box.Name = "m1Box";
+ this.m1Box.Size = new System.Drawing.Size(49, 20);
+ this.m1Box.TabIndex = 178;
+ this.m1Box.Text = "1.7";
+ //
+ // Beta3Box
+ //
+ this.Beta3Box.Location = new System.Drawing.Point(750, 99);
+ this.Beta3Box.Name = "Beta3Box";
+ this.Beta3Box.Size = new System.Drawing.Size(49, 20);
+ this.Beta3Box.TabIndex = 177;
+ this.Beta3Box.Text = "0.000186";
+ //
+ // Beta1Box
+ //
+ this.Beta1Box.Location = new System.Drawing.Point(750, 73);
+ this.Beta1Box.Name = "Beta1Box";
+ this.Beta1Box.Size = new System.Drawing.Size(49, 20);
+ this.Beta1Box.TabIndex = 176;
+ this.Beta1Box.Text = "1067";
+ //
+ // SiberiaBox
+ //
+ this.SiberiaBox.Location = new System.Drawing.Point(692, 36);
+ this.SiberiaBox.Name = "SiberiaBox";
+ this.SiberiaBox.Size = new System.Drawing.Size(147, 34);
+ this.SiberiaBox.TabIndex = 175;
+ this.SiberiaBox.Text = "SIBERIA sub model?";
+ this.toolTip1.SetToolTip(this.SiberiaBox, "CAESAR can run in both catchment and reach mode, but if you have catchment mode c" +
+ "hecked, you should input a rainfall data file");
+ //
+ // label70
+ //
+ this.label70.AutoSize = true;
+ this.label70.Location = new System.Drawing.Point(220, 132);
+ this.label70.Name = "label70";
+ this.label70.Size = new System.Drawing.Size(246, 13);
+ this.label70.TabIndex = 168;
+ this.label70.Text = "simply slope * slope length, so replicates wash term";
+ //
+ // label69
+ //
+ this.label69.AutoSize = true;
+ this.label69.Location = new System.Drawing.Point(220, 116);
+ this.label69.Name = "label69";
+ this.label69.Size = new System.Drawing.Size(357, 13);
+ this.label69.TabIndex = 167;
+ this.label69.Text = "Slope * Soil erosion rate * (drainage area ^ 0.5) * Time(years) / DX(cellsize)";
+ //
+ // label68
+ //
+ this.label68.AutoSize = true;
+ this.label68.Location = new System.Drawing.Point(220, 42);
+ this.label68.Name = "label68";
+ this.label68.Size = new System.Drawing.Size(220, 13);
+ this.label68.TabIndex = 166;
+ this.label68.Text = "Slope * Creeprate * Time(years) / DX(cellsize)";
+ //
+ // label67
+ //
+ this.label67.Location = new System.Drawing.Point(51, 109);
+ this.label67.Name = "label67";
+ this.label67.Size = new System.Drawing.Size(96, 24);
+ this.label67.TabIndex = 165;
+ this.label67.Text = "Soil erosion rate";
+ this.label67.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // soil_ratebox
+ //
+ this.soil_ratebox.Location = new System.Drawing.Point(155, 113);
+ this.soil_ratebox.Name = "soil_ratebox";
+ this.soil_ratebox.Size = new System.Drawing.Size(49, 20);
+ this.soil_ratebox.TabIndex = 164;
+ this.soil_ratebox.Text = "0.0";
+ //
+ // slopebox
+ //
+ this.slopebox.Location = new System.Drawing.Point(155, 75);
+ this.slopebox.Name = "slopebox";
+ this.slopebox.Size = new System.Drawing.Size(40, 20);
+ this.slopebox.TabIndex = 162;
+ this.slopebox.Text = "45";
+ //
+ // creepratebox
+ //
+ this.creepratebox.Location = new System.Drawing.Point(155, 39);
+ this.creepratebox.Name = "creepratebox";
+ this.creepratebox.Size = new System.Drawing.Size(49, 20);
+ this.creepratebox.TabIndex = 160;
+ this.creepratebox.Text = "0.0025";
+ //
+ // label34
+ //
+ this.label34.Location = new System.Drawing.Point(21, 75);
+ this.label34.Name = "label34";
+ this.label34.Size = new System.Drawing.Size(128, 24);
+ this.label34.TabIndex = 163;
+ this.label34.Text = "slope failure threshold";
+ this.label34.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label8
+ //
+ this.label8.Location = new System.Drawing.Point(51, 39);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(96, 24);
+ this.label8.TabIndex = 161;
+ this.label8.Text = "Creep rate";
+ this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // tabPage5
+ //
+ this.tabPage5.Controls.Add(this.label91);
+ this.tabPage5.Controls.Add(this.textBox10);
+ this.tabPage5.Controls.Add(this.fraction_dune);
+ this.tabPage5.Controls.Add(this.label57);
+ this.tabPage5.Controls.Add(this.dune_grid_size_box);
+ this.tabPage5.Controls.Add(this.label56);
+ this.tabPage5.Controls.Add(this.dune_time_box);
+ this.tabPage5.Controls.Add(this.label89);
+ this.tabPage5.Controls.Add(this.label88);
+ this.tabPage5.Controls.Add(this.label87);
+ this.tabPage5.Controls.Add(this.label86);
+ this.tabPage5.Controls.Add(this.label85);
+ this.tabPage5.Controls.Add(this.label84);
+ this.tabPage5.Controls.Add(this.slab_depth_box);
+ this.tabPage5.Controls.Add(this.shadow_angle_box);
+ this.tabPage5.Controls.Add(this.upstream_check_box);
+ this.tabPage5.Controls.Add(this.depo_prob_box);
+ this.tabPage5.Controls.Add(this.offset_box);
+ this.tabPage5.Controls.Add(this.init_depth_box);
+ this.tabPage5.Controls.Add(this.DuneBox);
+ this.tabPage5.Location = new System.Drawing.Point(4, 22);
+ this.tabPage5.Name = "tabPage5";
+ this.tabPage5.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage5.Size = new System.Drawing.Size(1323, 487);
+ this.tabPage5.TabIndex = 10;
+ this.tabPage5.Text = "Dune model";
+ this.tabPage5.UseVisualStyleBackColor = true;
+ this.tabPage5.Click += new System.EventHandler(this.tabPage5_Click);
+ //
+ // label91
+ //
+ this.label91.AutoSize = true;
+ this.label91.Location = new System.Drawing.Point(115, 153);
+ this.label91.Name = "label91";
+ this.label91.Size = new System.Drawing.Size(100, 13);
+ this.label91.TabIndex = 19;
+ this.label91.Text = "Dune landslip angle";
+ //
+ // textBox10
+ //
+ this.textBox10.Location = new System.Drawing.Point(26, 150);
+ this.textBox10.Name = "textBox10";
+ this.textBox10.Size = new System.Drawing.Size(75, 20);
+ this.textBox10.TabIndex = 18;
+ this.textBox10.Text = "30";
+ //
+ // fraction_dune
+ //
+ this.fraction_dune.Location = new System.Drawing.Point(512, 113);
+ this.fraction_dune.Name = "fraction_dune";
+ this.fraction_dune.Size = new System.Drawing.Size(75, 20);
+ this.fraction_dune.TabIndex = 17;
+ this.fraction_dune.Text = "1";
+ //
+ // label57
+ //
+ this.label57.AutoSize = true;
+ this.label57.Location = new System.Drawing.Point(600, 79);
+ this.label57.Name = "label57";
+ this.label57.Size = new System.Drawing.Size(91, 13);
+ this.label57.TabIndex = 16;
+ this.label57.Text = "Grid size of dunes";
+ //
+ // dune_grid_size_box
+ //
+ this.dune_grid_size_box.Location = new System.Drawing.Point(512, 76);
+ this.dune_grid_size_box.Name = "dune_grid_size_box";
+ this.dune_grid_size_box.Size = new System.Drawing.Size(75, 20);
+ this.dune_grid_size_box.TabIndex = 15;
+ this.dune_grid_size_box.Text = "2";
+ //
+ // label56
+ //
+ this.label56.AutoSize = true;
+ this.label56.Location = new System.Drawing.Point(600, 44);
+ this.label56.Name = "label56";
+ this.label56.Size = new System.Drawing.Size(169, 13);
+ this.label56.TabIndex = 14;
+ this.label56.Text = "time step (min) between dune calls";
+ //
+ // dune_time_box
+ //
+ this.dune_time_box.Location = new System.Drawing.Point(512, 41);
+ this.dune_time_box.Name = "dune_time_box";
+ this.dune_time_box.Size = new System.Drawing.Size(75, 20);
+ this.dune_time_box.TabIndex = 13;
+ this.dune_time_box.Text = "144";
+ //
+ // label89
+ //
+ this.label89.AutoSize = true;
+ this.label89.Location = new System.Drawing.Point(117, 257);
+ this.label89.Name = "label89";
+ this.label89.Size = new System.Drawing.Size(270, 13);
+ this.label89.TabIndex = 12;
+ this.label89.Text = "Downstream offset (travel distance automatically added)";
+ //
+ // label88
+ //
+ this.label88.AutoSize = true;
+ this.label88.Location = new System.Drawing.Point(115, 222);
+ this.label88.Name = "label88";
+ this.label88.Size = new System.Drawing.Size(124, 13);
+ this.label88.TabIndex = 11;
+ this.label88.Text = "Deposition probability (%)";
+ this.label88.Click += new System.EventHandler(this.label88_Click);
+ //
+ // label87
+ //
+ this.label87.AutoSize = true;
+ this.label87.Location = new System.Drawing.Point(115, 186);
+ this.label87.Name = "label87";
+ this.label87.Size = new System.Drawing.Size(381, 13);
+ this.label87.TabIndex = 10;
+ this.label87.Text = "Shadow check distance (cells) - number of cells Upstream it checks for shadow";
+ //
+ // label86
+ //
+ this.label86.AutoSize = true;
+ this.label86.Location = new System.Drawing.Point(115, 118);
+ this.label86.Name = "label86";
+ this.label86.Size = new System.Drawing.Size(105, 13);
+ this.label86.TabIndex = 9;
+ this.label86.Text = "Shadow angle (deg) ";
+ //
+ // label85
+ //
+ this.label85.AutoSize = true;
+ this.label85.Location = new System.Drawing.Point(117, 83);
+ this.label85.Name = "label85";
+ this.label85.Size = new System.Drawing.Size(138, 13);
+ this.label85.TabIndex = 8;
+ this.label85.Text = "Maximum slab thickness (m)";
+ //
+ // label84
+ //
+ this.label84.AutoSize = true;
+ this.label84.Location = new System.Drawing.Point(115, 47);
+ this.label84.Name = "label84";
+ this.label84.Size = new System.Drawing.Size(185, 13);
+ this.label84.TabIndex = 7;
+ this.label84.Text = "how many slabs added per col per iter";
+ //
+ // slab_depth_box
+ //
+ this.slab_depth_box.Location = new System.Drawing.Point(26, 80);
+ this.slab_depth_box.Name = "slab_depth_box";
+ this.slab_depth_box.Size = new System.Drawing.Size(75, 20);
+ this.slab_depth_box.TabIndex = 6;
+ this.slab_depth_box.Text = "0.5";
+ this.slab_depth_box.TextChanged += new System.EventHandler(this.textBox12_TextChanged);
+ //
+ // shadow_angle_box
+ //
+ this.shadow_angle_box.Location = new System.Drawing.Point(26, 115);
+ this.shadow_angle_box.Name = "shadow_angle_box";
+ this.shadow_angle_box.Size = new System.Drawing.Size(75, 20);
+ this.shadow_angle_box.TabIndex = 5;
+ this.shadow_angle_box.Text = "15";
+ //
+ // upstream_check_box
+ //
+ this.upstream_check_box.Location = new System.Drawing.Point(26, 183);
+ this.upstream_check_box.Name = "upstream_check_box";
+ this.upstream_check_box.Size = new System.Drawing.Size(75, 20);
+ this.upstream_check_box.TabIndex = 4;
+ this.upstream_check_box.Text = "40";
+ //
+ // depo_prob_box
+ //
+ this.depo_prob_box.Location = new System.Drawing.Point(27, 219);
+ this.depo_prob_box.Name = "depo_prob_box";
+ this.depo_prob_box.Size = new System.Drawing.Size(75, 20);
+ this.depo_prob_box.TabIndex = 3;
+ this.depo_prob_box.Text = "50";
+ //
+ // offset_box
+ //
+ this.offset_box.Location = new System.Drawing.Point(26, 254);
+ this.offset_box.Name = "offset_box";
+ this.offset_box.Size = new System.Drawing.Size(75, 20);
+ this.offset_box.TabIndex = 2;
+ this.offset_box.Text = "1";
+ //
+ // init_depth_box
+ //
+ this.init_depth_box.Location = new System.Drawing.Point(27, 44);
+ this.init_depth_box.Name = "init_depth_box";
+ this.init_depth_box.Size = new System.Drawing.Size(75, 20);
+ this.init_depth_box.TabIndex = 1;
+ this.init_depth_box.Text = "4";
+ //
+ // DuneBox
+ //
+ this.DuneBox.AutoSize = true;
+ this.DuneBox.Location = new System.Drawing.Point(26, 18);
+ this.DuneBox.Name = "DuneBox";
+ this.DuneBox.Size = new System.Drawing.Size(108, 17);
+ this.DuneBox.TabIndex = 0;
+ this.DuneBox.Text = "Run with Dunes?";
+ this.DuneBox.UseVisualStyleBackColor = true;
+ //
+ // tabPage1
+ //
+ this.tabPage1.Controls.Add(this.textBox19);
+ this.tabPage1.Controls.Add(this.label104);
+ this.tabPage1.Controls.Add(this.SpatVarManningsCheckbox);
+ this.tabPage1.Controls.Add(this.MinQmaxvalue);
+ this.tabPage1.Controls.Add(this.textBox9);
+ this.tabPage1.Controls.Add(this.label77);
+ this.tabPage1.Controls.Add(this.textBox8);
+ this.tabPage1.Controls.Add(this.label66);
+ this.tabPage1.Controls.Add(this.textBox4);
+ this.tabPage1.Controls.Add(this.label64);
+ this.tabPage1.Controls.Add(this.courantbox);
+ this.tabPage1.Controls.Add(this.label38);
+ this.tabPage1.Controls.Add(this.label53);
+ this.tabPage1.Controls.Add(this.Q2box);
+ this.tabPage1.Controls.Add(this.label3);
+ this.tabPage1.Controls.Add(this.k_evapBox);
+ this.tabPage1.Controls.Add(this.textBox2);
+ this.tabPage1.Controls.Add(this.label46);
+ this.tabPage1.Controls.Add(this.minqbox);
+ this.tabPage1.Controls.Add(this.initscansbox);
+ this.tabPage1.Controls.Add(this.label9);
+ this.tabPage1.Controls.Add(this.label5);
+ this.tabPage1.Location = new System.Drawing.Point(4, 22);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage1.Size = new System.Drawing.Size(1323, 487);
+ this.tabPage1.TabIndex = 11;
+ this.tabPage1.Text = "Flow Model";
+ this.tabPage1.UseVisualStyleBackColor = true;
+ //
+ // textBox19
+ //
+ this.textBox19.Location = new System.Drawing.Point(331, 341);
+ this.textBox19.Name = "textBox19";
+ this.textBox19.Size = new System.Drawing.Size(118, 20);
+ this.textBox19.TabIndex = 235;
+ this.textBox19.Text = "null";
+ this.textBox19.Visible = false;
+ //
+ // label104
+ //
+ this.label104.AutoSize = true;
+ this.label104.Location = new System.Drawing.Point(247, 344);
+ this.label104.Name = "label104";
+ this.label104.Size = new System.Drawing.Size(78, 13);
+ this.label104.TabIndex = 234;
+ this.label104.Text = "Mannings n file";
+ this.label104.Visible = false;
+ //
+ // SpatVarManningsCheckbox
+ //
+ this.SpatVarManningsCheckbox.AutoSize = true;
+ this.SpatVarManningsCheckbox.Location = new System.Drawing.Point(293, 318);
+ this.SpatVarManningsCheckbox.Name = "SpatVarManningsCheckbox";
+ this.SpatVarManningsCheckbox.Size = new System.Drawing.Size(162, 17);
+ this.SpatVarManningsCheckbox.TabIndex = 230;
+ this.SpatVarManningsCheckbox.Text = "Spatially variable mannings n";
+ this.SpatVarManningsCheckbox.UseVisualStyleBackColor = true;
+ this.SpatVarManningsCheckbox.CheckedChanged += new System.EventHandler(this.SpatVarManningsCheckbox_CheckedChanged);
+ //
+ // MinQmaxvalue
+ //
+ this.MinQmaxvalue.Location = new System.Drawing.Point(302, 106);
+ this.MinQmaxvalue.Name = "MinQmaxvalue";
+ this.MinQmaxvalue.Size = new System.Drawing.Size(49, 20);
+ this.MinQmaxvalue.TabIndex = 216;
+ this.MinQmaxvalue.Text = "1000.0";
+ //
+ // textBox9
+ //
+ this.textBox9.Location = new System.Drawing.Point(229, 315);
+ this.textBox9.Name = "textBox9";
+ this.textBox9.Size = new System.Drawing.Size(38, 20);
+ this.textBox9.TabIndex = 215;
+ this.textBox9.Text = "0.04";
+ //
+ // label77
+ //
+ this.label77.Location = new System.Drawing.Point(95, 311);
+ this.label77.Name = "label77";
+ this.label77.Size = new System.Drawing.Size(128, 24);
+ this.label77.TabIndex = 214;
+ this.label77.Text = "Mannings n";
+ this.label77.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // textBox8
+ //
+ this.textBox8.Location = new System.Drawing.Point(229, 291);
+ this.textBox8.Name = "textBox8";
+ this.textBox8.Size = new System.Drawing.Size(38, 20);
+ this.textBox8.TabIndex = 213;
+ this.textBox8.Text = "0.8";
+ //
+ // label66
+ //
+ this.label66.Location = new System.Drawing.Point(95, 287);
+ this.label66.Name = "label66";
+ this.label66.Size = new System.Drawing.Size(128, 24);
+ this.label66.TabIndex = 212;
+ this.label66.Text = "froude # flow limit";
+ this.label66.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // textBox4
+ //
+ this.textBox4.Location = new System.Drawing.Point(229, 267);
+ this.textBox4.Name = "textBox4";
+ this.textBox4.Size = new System.Drawing.Size(38, 20);
+ this.textBox4.TabIndex = 211;
+ this.textBox4.Text = "0.00001";
+ //
+ // label64
+ //
+ this.label64.Location = new System.Drawing.Point(95, 263);
+ this.label64.Name = "label64";
+ this.label64.Size = new System.Drawing.Size(128, 24);
+ this.label64.TabIndex = 210;
+ this.label64.Text = "hflow threshold";
+ this.label64.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // courantbox
+ //
+ this.courantbox.Location = new System.Drawing.Point(229, 241);
+ this.courantbox.Name = "courantbox";
+ this.courantbox.Size = new System.Drawing.Size(38, 20);
+ this.courantbox.TabIndex = 209;
+ this.courantbox.Text = "0.7";
+ //
+ // label38
+ //
+ this.label38.Location = new System.Drawing.Point(95, 237);
+ this.label38.Name = "label38";
+ this.label38.Size = new System.Drawing.Size(128, 24);
+ this.label38.TabIndex = 208;
+ this.label38.Text = "Courant Number";
+ this.label38.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label53
+ //
+ this.label53.Location = new System.Drawing.Point(101, 130);
+ this.label53.Name = "label53";
+ this.label53.Size = new System.Drawing.Size(120, 43);
+ this.label53.TabIndex = 205;
+ this.label53.Text = "Water depth threshold above which erosion will happen (m)";
+ this.label53.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label53, "MinQ is a threshold value, above which CAEASR treats flow as surface flow, it sho" +
+ "uld be scaled to the grid size. Try 0.01 for 10m grids and 0.25 for 50m..");
+ //
+ // Q2box
+ //
+ this.Q2box.Location = new System.Drawing.Point(229, 137);
+ this.Q2box.Name = "Q2box";
+ this.Q2box.Size = new System.Drawing.Size(49, 20);
+ this.Q2box.TabIndex = 204;
+ this.Q2box.Text = "0.01";
+ //
+ // label3
+ //
+ this.label3.Location = new System.Drawing.Point(82, 212);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(139, 24);
+ this.label3.TabIndex = 203;
+ this.label3.Text = "Evaporation rate (m/day)";
+ this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // k_evapBox
+ //
+ this.k_evapBox.Location = new System.Drawing.Point(229, 215);
+ this.k_evapBox.Name = "k_evapBox";
+ this.k_evapBox.Size = new System.Drawing.Size(80, 20);
+ this.k_evapBox.TabIndex = 202;
+ this.k_evapBox.Text = "0.0";
+ //
+ // textBox2
+ //
+ this.textBox2.Location = new System.Drawing.Point(229, 182);
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(40, 20);
+ this.textBox2.TabIndex = 200;
+ this.textBox2.Text = "0.005";
+ //
+ // label46
+ //
+ this.label46.Location = new System.Drawing.Point(93, 179);
+ this.label46.Name = "label46";
+ this.label46.Size = new System.Drawing.Size(128, 24);
+ this.label46.TabIndex = 201;
+ this.label46.Text = "Slope for edge cells";
+ this.label46.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // minqbox
+ //
+ this.minqbox.Location = new System.Drawing.Point(229, 106);
+ this.minqbox.Name = "minqbox";
+ this.minqbox.Size = new System.Drawing.Size(49, 20);
+ this.minqbox.TabIndex = 197;
+ this.minqbox.Text = "0.01";
+ //
+ // initscansbox
+ //
+ this.initscansbox.Location = new System.Drawing.Point(227, 68);
+ this.initscansbox.Name = "initscansbox";
+ this.initscansbox.Size = new System.Drawing.Size(40, 20);
+ this.initscansbox.TabIndex = 196;
+ this.initscansbox.Text = "1";
+ //
+ // label9
+ //
+ this.label9.Location = new System.Drawing.Point(101, 106);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(120, 24);
+ this.label9.TabIndex = 199;
+ this.label9.Text = "Min Q for depth calc";
+ this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label9, "MinQ is a threshold value, above which CAEASR treats flow as surface flow, it sho" +
+ "uld be scaled to the grid size. Try 0.01 for 10m grids and 0.25 for 50m..");
+ //
+ // label5
+ //
+ this.label5.Location = new System.Drawing.Point(29, 65);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(182, 26);
+ this.label5.TabIndex = 198;
+ this.label5.Text = "input/output difference allowed";
+ this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // tabPage3
+ //
+ this.tabPage3.Controls.Add(this.label101);
+ this.tabPage3.Controls.Add(this.label100);
+ this.tabPage3.Controls.Add(this.label99);
+ this.tabPage3.Controls.Add(this.textBox18);
+ this.tabPage3.Controls.Add(this.textBox17);
+ this.tabPage3.Controls.Add(this.textBox16);
+ this.tabPage3.Controls.Add(this.label98);
+ this.tabPage3.Controls.Add(this.label97);
+ this.tabPage3.Controls.Add(this.label96);
+ this.tabPage3.Controls.Add(this.textBox15);
+ this.tabPage3.Controls.Add(this.textBox14);
+ this.tabPage3.Controls.Add(this.textBox13);
+ this.tabPage3.Controls.Add(this.label95);
+ this.tabPage3.Controls.Add(this.label94);
+ this.tabPage3.Controls.Add(this.textBox12);
+ this.tabPage3.Controls.Add(this.textBox11);
+ this.tabPage3.Controls.Add(this.checkBox6);
+ this.tabPage3.Controls.Add(this.checkBox5);
+ this.tabPage3.Controls.Add(this.checkBox4);
+ this.tabPage3.Controls.Add(this.soildevbox);
+ this.tabPage3.Location = new System.Drawing.Point(4, 22);
+ this.tabPage3.Name = "tabPage3";
+ this.tabPage3.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage3.Size = new System.Drawing.Size(1323, 487);
+ this.tabPage3.TabIndex = 12;
+ this.tabPage3.Text = "Soil Development";
+ this.tabPage3.UseVisualStyleBackColor = true;
+ //
+ // label101
+ //
+ this.label101.AutoSize = true;
+ this.label101.Enabled = false;
+ this.label101.Location = new System.Drawing.Point(414, 153);
+ this.label101.Name = "label101";
+ this.label101.Size = new System.Drawing.Size(19, 13);
+ this.label101.TabIndex = 19;
+ this.label101.Text = "c4";
+ //
+ // label100
+ //
+ this.label100.AutoSize = true;
+ this.label100.Enabled = false;
+ this.label100.Location = new System.Drawing.Point(414, 124);
+ this.label100.Name = "label100";
+ this.label100.Size = new System.Drawing.Size(19, 13);
+ this.label100.TabIndex = 18;
+ this.label100.Text = "c3";
+ //
+ // label99
+ //
+ this.label99.AutoSize = true;
+ this.label99.Enabled = false;
+ this.label99.Location = new System.Drawing.Point(415, 94);
+ this.label99.Name = "label99";
+ this.label99.Size = new System.Drawing.Size(19, 13);
+ this.label99.TabIndex = 17;
+ this.label99.Text = "k2";
+ //
+ // textBox18
+ //
+ this.textBox18.Enabled = false;
+ this.textBox18.Location = new System.Drawing.Point(336, 150);
+ this.textBox18.Name = "textBox18";
+ this.textBox18.Size = new System.Drawing.Size(57, 20);
+ this.textBox18.TabIndex = 16;
+ this.textBox18.Text = "1";
+ //
+ // textBox17
+ //
+ this.textBox17.Enabled = false;
+ this.textBox17.Location = new System.Drawing.Point(336, 121);
+ this.textBox17.Name = "textBox17";
+ this.textBox17.Size = new System.Drawing.Size(57, 20);
+ this.textBox17.TabIndex = 15;
+ this.textBox17.Text = "-2.5";
+ //
+ // textBox16
+ //
+ this.textBox16.Enabled = false;
+ this.textBox16.Location = new System.Drawing.Point(337, 91);
+ this.textBox16.Name = "textBox16";
+ this.textBox16.Size = new System.Drawing.Size(57, 20);
+ this.textBox16.TabIndex = 14;
+ this.textBox16.Text = "70";
+ //
+ // label98
+ //
+ this.label98.AutoSize = true;
+ this.label98.Location = new System.Drawing.Point(99, 240);
+ this.label98.Name = "label98";
+ this.label98.Size = new System.Drawing.Size(19, 13);
+ this.label98.TabIndex = 13;
+ this.label98.Text = "c2";
+ //
+ // label97
+ //
+ this.label97.AutoSize = true;
+ this.label97.Location = new System.Drawing.Point(100, 207);
+ this.label97.Name = "label97";
+ this.label97.Size = new System.Drawing.Size(19, 13);
+ this.label97.TabIndex = 12;
+ this.label97.Text = "c1";
+ //
+ // label96
+ //
+ this.label96.AutoSize = true;
+ this.label96.Location = new System.Drawing.Point(101, 173);
+ this.label96.Name = "label96";
+ this.label96.Size = new System.Drawing.Size(19, 13);
+ this.label96.TabIndex = 11;
+ this.label96.Text = "k1";
+ //
+ // textBox15
+ //
+ this.textBox15.Location = new System.Drawing.Point(32, 238);
+ this.textBox15.Name = "textBox15";
+ this.textBox15.Size = new System.Drawing.Size(50, 20);
+ this.textBox15.TabIndex = 10;
+ this.textBox15.Text = "5";
+ //
+ // textBox14
+ //
+ this.textBox14.Location = new System.Drawing.Point(33, 205);
+ this.textBox14.Name = "textBox14";
+ this.textBox14.Size = new System.Drawing.Size(50, 20);
+ this.textBox14.TabIndex = 9;
+ this.textBox14.Text = "-0.5";
+ //
+ // textBox13
+ //
+ this.textBox13.Location = new System.Drawing.Point(32, 173);
+ this.textBox13.Name = "textBox13";
+ this.textBox13.Size = new System.Drawing.Size(50, 20);
+ this.textBox13.TabIndex = 8;
+ this.textBox13.Text = "0.0001";
+ //
+ // label95
+ //
+ this.label95.AutoSize = true;
+ this.label95.Location = new System.Drawing.Point(98, 121);
+ this.label95.Name = "label95";
+ this.label95.Size = new System.Drawing.Size(19, 13);
+ this.label95.TabIndex = 7;
+ this.label95.Text = "b1";
+ //
+ // label94
+ //
+ this.label94.AutoSize = true;
+ this.label94.Location = new System.Drawing.Point(97, 94);
+ this.label94.Name = "label94";
+ this.label94.Size = new System.Drawing.Size(20, 13);
+ this.label94.TabIndex = 6;
+ this.label94.Text = "P1";
+ //
+ // textBox12
+ //
+ this.textBox12.Location = new System.Drawing.Point(34, 120);
+ this.textBox12.Name = "textBox12";
+ this.textBox12.Size = new System.Drawing.Size(50, 20);
+ this.textBox12.TabIndex = 5;
+ this.textBox12.Text = "2";
+ //
+ // textBox11
+ //
+ this.textBox11.Location = new System.Drawing.Point(34, 91);
+ this.textBox11.Name = "textBox11";
+ this.textBox11.Size = new System.Drawing.Size(51, 20);
+ this.textBox11.TabIndex = 4;
+ this.textBox11.Text = "0.000053";
+ //
+ // checkBox6
+ //
+ this.checkBox6.AutoSize = true;
+ this.checkBox6.Enabled = false;
+ this.checkBox6.Location = new System.Drawing.Point(336, 61);
+ this.checkBox6.Name = "checkBox6";
+ this.checkBox6.Size = new System.Drawing.Size(127, 17);
+ this.checkBox6.TabIndex = 3;
+ this.checkBox6.Text = "Chemical Weathering";
+ this.checkBox6.UseVisualStyleBackColor = true;
+ //
+ // checkBox5
+ //
+ this.checkBox5.AutoSize = true;
+ this.checkBox5.Location = new System.Drawing.Point(35, 150);
+ this.checkBox5.Name = "checkBox5";
+ this.checkBox5.Size = new System.Drawing.Size(123, 17);
+ this.checkBox5.TabIndex = 2;
+ this.checkBox5.Text = "Physical Weathering";
+ this.checkBox5.UseVisualStyleBackColor = true;
+ //
+ // checkBox4
+ //
+ this.checkBox4.AutoSize = true;
+ this.checkBox4.Location = new System.Drawing.Point(33, 63);
+ this.checkBox4.Name = "checkBox4";
+ this.checkBox4.Size = new System.Drawing.Size(108, 17);
+ this.checkBox4.TabIndex = 1;
+ this.checkBox4.Text = "Bedrock lowering";
+ this.checkBox4.UseVisualStyleBackColor = true;
+ //
+ // soildevbox
+ //
+ this.soildevbox.AutoSize = true;
+ this.soildevbox.Location = new System.Drawing.Point(32, 16);
+ this.soildevbox.Name = "soildevbox";
+ this.soildevbox.Size = new System.Drawing.Size(147, 17);
+ this.soildevbox.TabIndex = 0;
+ this.soildevbox.Text = "Soil Development Model?";
+ this.soildevbox.UseVisualStyleBackColor = true;
+ //
+ // Panel1
+ //
+ this.Panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.Panel1.Controls.Add(this.tempdata2);
+ this.Panel1.Controls.Add(this.tempdata1);
+ this.Panel1.Controls.Add(this.graphicToGoogleEarthButton);
+ this.Panel1.Controls.Add(this.button4);
+ this.Panel1.Controls.Add(this.button3);
+ this.Panel1.Controls.Add(this.recirculatebox);
+ this.Panel1.Controls.Add(this.flowonlybox);
+ this.Panel1.Location = new System.Drawing.Point(7, 476);
+ this.Panel1.Name = "Panel1";
+ this.Panel1.Size = new System.Drawing.Size(822, 49);
+ this.Panel1.TabIndex = 145;
+ this.Panel1.Visible = false;
+ //
+ // tempdata2
+ //
+ this.tempdata2.Location = new System.Drawing.Point(548, 7);
+ this.tempdata2.Name = "tempdata2";
+ this.tempdata2.Size = new System.Drawing.Size(39, 20);
+ this.tempdata2.TabIndex = 145;
+ this.tempdata2.Text = "358";
+ //
+ // tempdata1
+ //
+ this.tempdata1.Location = new System.Drawing.Point(503, 7);
+ this.tempdata1.Name = "tempdata1";
+ this.tempdata1.Size = new System.Drawing.Size(39, 20);
+ this.tempdata1.TabIndex = 98;
+ this.tempdata1.Text = "358";
+ //
+ // graphicToGoogleEarthButton
+ //
+ this.graphicToGoogleEarthButton.Location = new System.Drawing.Point(693, 8);
+ this.graphicToGoogleEarthButton.Name = "graphicToGoogleEarthButton";
+ this.graphicToGoogleEarthButton.Size = new System.Drawing.Size(119, 28);
+ this.graphicToGoogleEarthButton.TabIndex = 150;
+ this.graphicToGoogleEarthButton.Text = "graphic to google earth";
+ this.graphicToGoogleEarthButton.UseVisualStyleBackColor = true;
+ this.graphicToGoogleEarthButton.Click += new System.EventHandler(this.graphicToGoogleEarthButton_Click);
+ //
+ // button4
+ //
+ this.button4.Location = new System.Drawing.Point(8, 4);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(112, 28);
+ this.button4.TabIndex = 144;
+ this.button4.Text = "update graphics";
+ this.button4.Click += new System.EventHandler(this.button4_Click_1);
+ //
+ // button3
+ //
+ this.button3.Font = new System.Drawing.Font("Monotype Corsiva", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.button3.Location = new System.Drawing.Point(604, 5);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(82, 29);
+ this.button3.TabIndex = 99;
+ this.button3.Text = "Grass now!";
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // recirculatebox
+ //
+ this.recirculatebox.Location = new System.Drawing.Point(221, 6);
+ this.recirculatebox.Name = "recirculatebox";
+ this.recirculatebox.Size = new System.Drawing.Size(128, 24);
+ this.recirculatebox.TabIndex = 89;
+ this.recirculatebox.Text = "recirculate sediment";
+ //
+ // flowonlybox
+ //
+ this.flowonlybox.Location = new System.Drawing.Point(370, 5);
+ this.flowonlybox.Name = "flowonlybox";
+ this.flowonlybox.Size = new System.Drawing.Size(104, 24);
+ this.flowonlybox.TabIndex = 97;
+ this.flowonlybox.Text = "flow only?";
+ //
+ // statusBar1
+ //
+ this.statusBar1.Location = new System.Drawing.Point(0, 561);
+ this.statusBar1.Name = "statusBar1";
+ this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
+ this.InfoStatusPanel,
+ this.IterationStatusPanel,
+ this.TimeStatusPanel,
+ this.QwStatusPanel,
+ this.QsStatusPanel,
+ this.tempStatusPanel});
+ this.statusBar1.ShowPanels = true;
+ this.statusBar1.Size = new System.Drawing.Size(1149, 22);
+ this.statusBar1.SizingGrip = false;
+ this.statusBar1.TabIndex = 144;
+ this.statusBar1.Text = "statusBar1";
+ //
+ // InfoStatusPanel
+ //
+ this.InfoStatusPanel.Name = "InfoStatusPanel";
+ this.InfoStatusPanel.Text = "info";
+ this.InfoStatusPanel.Width = 200;
+ //
+ // IterationStatusPanel
+ //
+ this.IterationStatusPanel.Name = "IterationStatusPanel";
+ this.IterationStatusPanel.Text = "iterations";
+ this.IterationStatusPanel.Width = 120;
+ //
+ // TimeStatusPanel
+ //
+ this.TimeStatusPanel.Name = "TimeStatusPanel";
+ this.TimeStatusPanel.Text = "time";
+ this.TimeStatusPanel.Width = 120;
+ //
+ // QwStatusPanel
+ //
+ this.QwStatusPanel.Name = "QwStatusPanel";
+ this.QwStatusPanel.Text = "Qw";
+ this.QwStatusPanel.Width = 120;
+ //
+ // QsStatusPanel
+ //
+ this.QsStatusPanel.Name = "QsStatusPanel";
+ this.QsStatusPanel.Text = "Qs";
+ this.QsStatusPanel.Width = 120;
+ //
+ // tempStatusPanel
+ //
+ this.tempStatusPanel.Name = "tempStatusPanel";
+ this.tempStatusPanel.Text = "tempdata";
+ //
+ // start_button
+ //
+ this.start_button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.start_button.Enabled = false;
+ this.start_button.Location = new System.Drawing.Point(114, 514);
+ this.start_button.Name = "start_button";
+ this.start_button.Size = new System.Drawing.Size(88, 25);
+ this.start_button.TabIndex = 146;
+ this.start_button.Text = "Start!";
+ this.start_button.Click += new System.EventHandler(this.main_loop);
+ //
+ // button1
+ //
+ this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.button1.Enabled = false;
+ this.button1.Location = new System.Drawing.Point(207, 514);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(100, 25);
+ this.button1.TabIndex = 147;
+ this.button1.Text = "Quit and save";
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // checkBox2
+ //
+ checkBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ checkBox2.AutoSize = true;
+ checkBox2.Location = new System.Drawing.Point(407, 543);
+ checkBox2.Name = "checkBox2";
+ checkBox2.Size = new System.Drawing.Size(108, 17);
+ checkBox2.TabIndex = 151;
+ checkBox2.Text = "point info window";
+ checkBox2.UseVisualStyleBackColor = true;
+ checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged);
+ //
+ // checkBox1
+ //
+ this.checkBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.checkBox1.AutoSize = true;
+ this.checkBox1.Checked = true;
+ this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.checkBox1.Location = new System.Drawing.Point(313, 522);
+ this.checkBox1.Name = "checkBox1";
+ this.checkBox1.Size = new System.Drawing.Size(77, 17);
+ this.checkBox1.TabIndex = 151;
+ this.checkBox1.Text = "view tabs?";
+ this.checkBox1.UseVisualStyleBackColor = true;
+ this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged_1);
+ //
+ // trackBar1
+ //
+ this.trackBar1.AutoSize = false;
+ this.trackBar1.Location = new System.Drawing.Point(216, 9);
+ this.trackBar1.Name = "trackBar1";
+ this.trackBar1.Size = new System.Drawing.Size(104, 20);
+ this.trackBar1.TabIndex = 149;
+ this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll);
+ //
+ // label61
+ //
+ this.label61.AutoSize = true;
+ this.label61.Location = new System.Drawing.Point(6, 14);
+ this.label61.Name = "label61";
+ this.label61.Size = new System.Drawing.Size(44, 13);
+ this.label61.TabIndex = 150;
+ this.label61.Text = "Graphic";
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.label62);
+ this.groupBox2.Controls.Add(this.comboBox1);
+ this.groupBox2.Controls.Add(this.trackBar1);
+ this.groupBox2.Controls.Add(this.label61);
+ this.groupBox2.Location = new System.Drawing.Point(12, -3);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(334, 35);
+ this.groupBox2.TabIndex = 151;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Visible = false;
+ //
+ // label62
+ //
+ this.label62.AutoSize = true;
+ this.label62.Location = new System.Drawing.Point(170, 14);
+ this.label62.Name = "label62";
+ this.label62.Size = new System.Drawing.Size(46, 13);
+ this.label62.TabIndex = 152;
+ this.label62.Text = "Contrast";
+ //
+ // comboBox1
+ //
+ this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBox1.FormattingEnabled = true;
+ this.comboBox1.Location = new System.Drawing.Point(54, 10);
+ this.comboBox1.Name = "comboBox1";
+ this.comboBox1.Size = new System.Drawing.Size(104, 21);
+ this.comboBox1.TabIndex = 151;
+ this.comboBox1.SelectedValueChanged += new System.EventHandler(this.comboBox1_SelectedValueChanged);
+ //
+ // groupBox3
+ //
+ this.groupBox3.Controls.Add(this.label63);
+ this.groupBox3.Controls.Add(this.trackBar2);
+ this.groupBox3.Location = new System.Drawing.Point(346, -3);
+ this.groupBox3.Name = "groupBox3";
+ this.groupBox3.Size = new System.Drawing.Size(156, 35);
+ this.groupBox3.TabIndex = 152;
+ this.groupBox3.TabStop = false;
+ this.groupBox3.Visible = false;
+ //
+ // label63
+ //
+ this.label63.AutoSize = true;
+ this.label63.Location = new System.Drawing.Point(6, 13);
+ this.label63.Name = "label63";
+ this.label63.Size = new System.Drawing.Size(34, 13);
+ this.label63.TabIndex = 154;
+ this.label63.Text = "Zoom";
+ //
+ // trackBar2
+ //
+ this.trackBar2.AutoSize = false;
+ this.trackBar2.Location = new System.Drawing.Point(42, 9);
+ this.trackBar2.Minimum = 1;
+ this.trackBar2.Name = "trackBar2";
+ this.trackBar2.Size = new System.Drawing.Size(104, 20);
+ this.trackBar2.TabIndex = 153;
+ this.trackBar2.Value = 5;
+ this.trackBar2.Scroll += new System.EventHandler(this.trackBar2_Scroll);
+ //
+ // backgroundWorker1
+ //
+ this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
+ //
+ // zoomPanImageBox1
+ //
+ this.zoomPanImageBox1.Image = null;
+ this.zoomPanImageBox1.Location = new System.Drawing.Point(7, 37);
+ this.zoomPanImageBox1.Name = "zoomPanImageBox1";
+ this.zoomPanImageBox1.Size = new System.Drawing.Size(824, 316);
+ this.zoomPanImageBox1.TabIndex = 148;
+ this.zoomPanImageBox1.Visible = false;
+ this.zoomPanImageBox1.Load += new System.EventHandler(this.zoomPanImageBox1_Load);
+ //
+ // Form1
+ //
+ this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
+ this.AutoScroll = true;
+ this.ClientSize = new System.Drawing.Size(1149, 583);
+ this.Controls.Add(checkBox2);
+ this.Controls.Add(this.checkBox1);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.tabControl1);
+ this.Controls.Add(this.start_button);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.statusBar1);
+ this.Controls.Add(this.Panel1);
+ this.Controls.Add(this.groupBox3);
+ this.Controls.Add(this.groupBox2);
+ this.Controls.Add(this.zoomPanImageBox1);
+ this.Menu = this.mainMenu1;
+ this.Name = "Form1";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "CAESAR Lisflood 1.9j";
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.Resize += new System.EventHandler(this.Form1_Resize);
+ this.tabControl1.ResumeLayout(false);
+ this.FilesTab.ResumeLayout(false);
+ this.FilesTab.PerformLayout();
+ this.groupBox6.ResumeLayout(false);
+ this.groupBox6.PerformLayout();
+ this.groupBox4.ResumeLayout(false);
+ this.groupBox4.PerformLayout();
+ this.NumericalTab.ResumeLayout(false);
+ this.NumericalTab.PerformLayout();
+ this.GrainTab.ResumeLayout(false);
+ this.GrainTab.PerformLayout();
+ this.DescriptionTab.ResumeLayout(false);
+ this.DescriptionTab.PerformLayout();
+ this.GridTab.ResumeLayout(false);
+ this.GridTab.PerformLayout();
+ this.HydrologyTab.ResumeLayout(false);
+ this.groupBox7.ResumeLayout(false);
+ this.groupBox7.PerformLayout();
+ this.groupBox5.ResumeLayout(false);
+ this.groupBox5.PerformLayout();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.tabPage2.ResumeLayout(false);
+ this.tabPage2.PerformLayout();
+ this.groupBox8.ResumeLayout(false);
+ this.groupBox8.PerformLayout();
+ this.tabPage4.ResumeLayout(false);
+ this.tabPage4.PerformLayout();
+ this.tabPage5.ResumeLayout(false);
+ this.tabPage5.PerformLayout();
+ this.tabPage1.ResumeLayout(false);
+ this.tabPage1.PerformLayout();
+ this.tabPage3.ResumeLayout(false);
+ this.tabPage3.PerformLayout();
+ this.Panel1.ResumeLayout(false);
+ this.Panel1.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.InfoStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.IterationStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.TimeStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.QwStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.QsStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.tempStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.groupBox3.ResumeLayout(false);
+ this.groupBox3.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.trackBar2)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+ #endregion
+
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.Run(new Form1());
+ }
+
+ private void start_button_Click(object sender, System.EventArgs e)
+ {
+ xtextbox.Visible=false;
+ ytextbox.Visible=false;
+ button1.Visible=false;
+ button2.Visible=false;
+ label1.Visible=false;
+ label2.Visible=false;
+
+ }
+
+ private void clearforms()
+ {
+ tabControl1.Visible = false;
+
+ }
+
+ private void main_loop(object sender, System.EventArgs e)
+ {
+
+
+ /********* locals ***********/
+ double tempflow=baseflow;
+ double ince=cycle+60;
+
+ gameClock = new System.Windows.Forms.Timer();
+
+// clearforms(); // MJ 14/01/05 this is done when load button is clicked
+ start_button.Enabled = false; // MJ 17/01/05
+ button1.Enabled = true; // MJ 17/01/05
+ comboBox1.Items.Add("water depth");
+ popComboBox1();
+
+ time_1=1;
+
+ calc_J(1.0);
+
+ save_time=cycle;
+ creep_time=cycle;
+ creep_time2 = cycle;
+ soil_erosion_time = cycle;
+ soil_development_time = cycle;
+ time_1=cycle;
+
+
+
+ mygraphics = this.CreateGraphics();
+
+
+ //slide_5();
+ get_area();
+
+ get_catchment_input_points();
+
+ this.InfoStatusPanel.Text="Starting main loop"; // MJ 14/01/05
+ //JMW
+
+ this.InfoStatusPanel.Text="Running"; // MJ 14/01/05
+
+ //Googel Earth Animation Directory
+ if (googleAnimationCheckbox.Checked)
+ {
+ if(Directory.Exists("animation"))Directory.Delete("animation",true);
+ Directory.CreateDirectory("animation");
+ }
+
+ time_factor = 1;
+
+ // Here we go into the main loop,
+ // I copied this bit of code to get
+ // the event handler to work - and it seems OK so why change it.
+ // so the main loop is really in erodedepo()
+
+ gameClock.Interval = 100;
+ gameClock.Tick += new EventHandler(update_screen_outputs);
+ gameClock.Start();
+
+ backgroundWorker1.RunWorkerAsync();
+
+ }
+
+ private void erodedepo() // erodedepo is the main loop from which all the main CL functions are called.
+ {
+ var watch = System.Diagnostics.Stopwatch.StartNew();
+
+ int y;
+ do
+ {
+
+ // set of lines commented out to instigate uplift at set times (if needed)
+ // line to do uplift at set time....
+ //if (cycle > (1440 * 18250) && elev[1, 1] < 100)
+ //{
+ // for (int x = 1; x <= 300; x++)
+ // {
+ // for (y = 1; y <= ymax; y++)
+ // {
+ // elev[x, y] += 10;//Convert.ToInt32(textBox6.Text);
+ // }
+ // }
+ // slide_5();
+ // slide_5();
+ // elev[1, 1] = 100;
+ //}
+
+ // Gez code: set previous cycle = to cycle
+ previous = cycle;
+ old_cycle = cycle % output_file_save_interval;
+ // end gez code
+
+ //
+ // section below workign out time step.
+ //
+ double input_output_difference = Math.Abs(waterinput - waterOut);
+ //this.tempdata1.Text = Convert.ToString(waterinput-waterOut);
+
+ // all dealing with calculating model time step
+ if (maxdepth <= water_depth_erosion_threshold) maxdepth = water_depth_erosion_threshold;
+ //if (time_factor < min_time_step) time_factor = min_time_step;
+ if (time_factor < (courant_number * (DX / Math.Sqrt(gravity * (maxdepth))))) time_factor = (courant_number * (DX / Math.Sqrt(gravity * (maxdepth))));
+ if (input_output_difference > in_out_difference && time_factor > (courant_number * (DX / Math.Sqrt(gravity * (maxdepth)))))
+ {
+ time_factor = courant_number * (DX / Math.Sqrt(gravity * (maxdepth)));
+ }
+
+ double local_time_factor = time_factor;
+ if (local_time_factor > (courant_number * (DX / Math.Sqrt(gravity * (maxdepth))))) local_time_factor = courant_number * (DX / Math.Sqrt(gravity * (maxdepth)));
+
+
+
+ // code to incrememtn counters. Counter is model iterations, cycle is the actual (modelled reality) time
+ counter++;
+ cycle += time_factor / 60;
+ // cycle in min
+ // time_factor in secs.
+
+ // Gez code
+ new_cycle = cycle % output_file_save_interval;
+ // end gez code
+
+
+ //
+ // adding in sand movement gradually
+ if (DuneBox.Checked == true && cycle >= duneupdatetime)
+ {
+ double factor = (max_time_step/60) / double.Parse(dune_time_box.Text);
+ //factor = 1;
+ for (int x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ if (elev_diff[x, y] != 0)
+ {
+ if (elev[x, y] < init_elevs[x, y] && elev_diff[x, y] > 0) elev_diff[x, y] = 0;
+ elev[x, y] -= elev_diff[x, y] * factor;
+ //elev_diff[x, y] = 0;
+ if (index[x, y] != -9999 && elev_diff[x, y] < 0 && water_depth[x, y] >= water_depth_erosion_threshold)
+ {
+ grain[index[x, y], 1] -= elev_diff[x, y] * factor;
+ sand[x, y] += elev_diff[x, y] * factor;
+ sort_active(x, y);
+ }
+ }
+ }
+ }
+ duneupdatetime = cycle + (max_time_step/60);
+ }
+
+
+ //// This whole section below deals with the water inputs. A separate part for point inputs and
+ //// a different bit for gradual inputs from the whole of the catchment. (reach or catchment)
+ // first zero counter to tally up water inputs
+ waterinput = 0;
+
+ // reach mode water inputs
+ if (reach_mode_box.Checked == true) reach_water_and_sediment_input(local_time_factor);
+
+ // catchment mode water inputs
+ if (catchment_mode_box.Checked == true) catchment_water_input_and_hydrology(local_time_factor);
+
+ // tidal/stage mode water inputs
+ if (checkBox3.Checked == true) stage_tidal_input(local_time_factor);
+
+ // route water and update flow depths
+
+ qroute();
+ depth_update();
+
+ // check scan area every 5 iters.. maybe re-visit for reach mode if it causes too much backing up of sed. see code commented below nex if..
+ if (Math.IEEERemainder(counter, 5) == 0)
+ {
+ scan_area();
+ }
+
+ // carry out erosion
+
+ if (!flowonlybox.Checked)
+ {
+ if (counter >= erode_call)
+ {
+ erode_mult = (int)(ERODEFACTOR / erode(erode_mult));
+ if (erode_mult < 1) erode_mult = 1;
+ if (erode_mult > 10) erode_mult = 10;
+
+ erode_call = counter + erode_mult;
+ //this.tempdata1.Text = Convert.ToString(erode_mult);
+ }
+ //
+ // carry out lateral erosion
+ //
+ if (newlateral.Checked && counter >= lateralcounter)
+ {
+ lateral3();
+ lateralcounter = counter + (50 * erode_mult);
+ }
+ }
+
+ //
+ // work out water coming out..
+ // and zero water depths in edges..
+ //
+ // this doesnt actually zero water - sets it to the min water depth
+ // If this is not done, then zero'd water depth prevents material being moved to the edge cells and thus eroded fromthe catchment
+ // leading to buildups of sediment at the edge.
+
+ double temptot = 0;
+ for (y = 1; y <= ymax; y++)
+ {
+ if (water_depth[xmax, y] > water_depth_erosion_threshold)
+ {
+ temptot += (water_depth[xmax, y]-water_depth_erosion_threshold) * DX * DX / local_time_factor;
+ // and zero water depths at RH end
+ water_depth[xmax, y] = water_depth_erosion_threshold;
+ }
+ if (water_depth[1, y] > water_depth_erosion_threshold)
+ {
+ temptot += (water_depth[1, y]-water_depth_erosion_threshold) * DX * DX / local_time_factor;
+ // and zero water depths at RH end
+ water_depth[1, y] = water_depth_erosion_threshold;
+ }
+ }
+ for (int x = 1; x <= xmax; x++)
+ {
+ if (water_depth[x, 1] > water_depth_erosion_threshold)
+ {
+ temptot += (water_depth[x, 1]-water_depth_erosion_threshold) * DX * DX / local_time_factor;
+ // and zero water depths at RH end
+ water_depth[x, 1] = water_depth_erosion_threshold;
+ }
+ if (water_depth[x, ymax] > water_depth_erosion_threshold)
+ {
+ temptot += (water_depth[x, ymax]-water_depth_erosion_threshold) * DX * DX / local_time_factor;
+ // and zero water depths at RH end
+ water_depth[x, ymax] = water_depth_erosion_threshold;
+ }
+ }
+ waterOut = temptot;
+
+ // then carry out soil creep.
+ //- also growing grass...
+ // and dunes...
+ // slide_3 is looking at landslides only in the 'scanned' area
+ // slide_4 is to do with dunes
+ // slide_5 is landslides everywhere..
+
+ if (!flowonlybox.Checked)
+ {
+ // carry out local landslides every X iterations...
+ if (Math.IEEERemainder(counter, 10) == 0)
+ {
+ slide_3();
+ }
+ // soil creep - here every 10 days
+ if (cycle > creep_time)
+ {
+ // updating counter creep_time
+ creep_time += 14400;
+ // now calling soil creep function
+ creep(0.028);//(0.019);//(0.083);
+ }
+ //// doing sand dunes part
+
+ if (DuneBox.Checked == true && cycle > dune_time)
+ {
+ dune1(0);
+ dune_time += double.Parse(dune_time_box.Text); ;
+ }
+
+ //
+ // now calling soil erosion function - also checks if soil erosion rate is > 0
+ // to prevent it calling it if not required.
+ // then soil erosion time
+ //
+
+ if (SOIL_RATE > 0 && cycle > soil_erosion_time)
+ {
+ get_area(); // gets drainage area before doing soil erosion - as used in the calcs. therefore good to have accurate/fresh drianage area
+ soil_erosion_time += 1440;// do soil erosion daily
+ //if (soilerosionBox.Checked == true) SOIL_RATE = ((0.768383841078 * j_mean + 0.000001979564));
+ soilerosion(0.0028);
+ }
+
+ if (cycle > soil_development_time)
+ {
+ soil_development_time += 1440 * 365 / 12;
+ if (soildevbox.Checked) soil_development();
+ }
+
+ }
+
+
+
+ // other slope things.. done every day.
+ if (cycle > creep_time2)
+ {
+ evaporate(1440);
+ // updating counter creep_time2
+ creep_time2 += 1440;// daily
+
+ if (!flowonlybox.Checked)
+ {
+
+ slide_5();
+
+ // calling siberia model (if wanted)
+ if (SiberiaBox.Checked == true)
+ {
+ get_area();
+ siberia(0.002739); // the value passed is the time step (in years)
+ }
+ // next line does grass growing, must change it if changes from monthly update
+ if (grow_grass_time > 0) grow_grass(1 / (grow_grass_time * 365));
+
+ }
+ }
+
+ // Gez
+ temptotal = temptot;
+
+ // call output routine
+ // only if iteration by iteration output is required.
+ if (checkBoxGenerateTimeSeries.Checked) // MJ 20/01/05
+ {
+ output_data();
+ }
+ // end gez code
+
+ //Google Earth Animation outputs data to file.
+ if (cycle >= save_time2 && googleAnimationCheckbox.Checked)
+ {
+ googleoutputflag = true;
+ save_time2 += save_interval2;
+ imageCount2 = imageCount2 + 1;
+ }
+
+ // save data & draw graphics every specified interval. Passes the cycle whuch becomes the file extension
+ if (cycle >= save_time && uniquefilecheck.Checked == true)
+ {
+ save_data_and_draw_graphics();
+ save_time += saveinterval;
+ }
+ // if its at the end of the run kill the program
+ } while (cycle / 60 < maxcycle);
+
+ watch.Stop();
+ MessageBox.Show($"finished. Runtime: {watch.Elapsed} ");
+ // end of main loop!!
+ }
+
+
+ void catchment_water_input_and_hydrology(double local_time_factor)
+ {
+ // revised way of determining water input 21/8/18
+ double tempwaterinput = 0;
+
+ for (int z = 1; z <= totalinputpoints; z++)
+ {
+ int x = catchment_input_x_coord[z];
+ int y = catchment_input_y_coord[z];
+ double water_add_amt = (j_mean[rfarea[x, y]] * nActualGridCells[rfarea[x, y]]) / (catchment_input_counter[rfarea[x, y]]) * local_time_factor;
+ // revised way of getting water input 21/8/18
+ tempwaterinput += water_add_amt * DX * DX / local_time_factor;
+ if (water_add_amt > ERODEFACTOR) water_add_amt = ERODEFACTOR;
+
+ water_depth[x, y] += water_add_amt;
+ //if ((j_mean * nActualGridCells) / (catchment_input_counter) * local_time_factor > ERODEFACTOR) this.tempStatusPanel.Text = "C add= " + Convert.ToString((j_mean * nActualGridCells) / (catchment_input_counter) * local_time_factor);
+ }
+
+ waterinput = tempwaterinput;
+
+ // if the input type flag is 1 then the discharge is input from the hydrograph...
+ if (cycle >= time_1)
+ {
+ do
+ {
+ time_1++;
+ calc_J(time_1);
+
+ if (time_factor > max_time_step)
+ {
+
+ double j_mean_max_temp = 0;
+ for (int n = 1; n <= rfnum; n++) if (new_j_mean[n] > j_mean_max_temp) j_mean_max_temp = new_j_mean[n];
+ if (j_mean_max_temp > (0.2 / (xmax * ymax * DX * DX)))
+ // check after variable rainfall area has been added...
+ //stops code going too fast when there is actual flow in the channels greater than 0.2cu.
+ {
+ cycle = time_1 + (max_time_step / 60);
+ time_factor = max_time_step;
+ }
+ }
+ } while (time_1 < cycle);
+ }
+
+ calchydrograph(time_1 - cycle);
+
+ double jmeanmax = 0;
+ for (int n = 1; n <= rfnum; n++) if (j_mean[n] > jmeanmax) jmeanmax = j_mean[n];
+
+ if (jmeaninputfilebox.Checked == true) j_mean[1] = ((hourly_rain_data[(int)(cycle / rain_data_time_step), 1]) / Math.Pow(DX, 2)) / nActualGridCells[1];
+
+ if (jmeanmax >= baseflow)
+ {
+ baseflow = baseflow * 3;
+ //Console.Write("going up.. \n");
+ get_area();
+ get_catchment_input_points();
+ }
+
+
+ if (baseflow > (jmeanmax * 3) && baseflow > 0.000001)
+ {
+ baseflow = jmeanmax * 1.25;
+ //Console.Write("going down.. \n");
+ get_area();
+ get_catchment_input_points();
+ }
+
+
+ }
+
+ void reach_water_and_sediment_input(double local_time_factor)
+ {
+ double[] remove_from_temp_grain;
+
+ remove_from_temp_grain = new Double[G_MAX + 2];
+
+ if (reach_mode_box.Checked == true)
+ {
+ for (int n = 0; n <= number_of_points - 1; n++)
+ {
+ int tempn;
+
+ int x = inpoints[n, 0];
+ int y = inpoints[n, 1];
+
+
+
+ double adding_factor = 1;
+ // tot up total to be added - and if its greater than number of cells and erode_limit
+ // then reduce what can be added via a factor.
+ double added_tot = 0;
+
+ if (water_depth[x, y] > water_depth_erosion_threshold)
+ {
+ for (tempn = 5; tempn <= G_MAX+3; tempn++)
+ {
+ added_tot += (Math.Abs(inputfile[n, (int)(cycle / input_time_step), tempn])) / div_inputs / (DX * DX) / (input_time_step * 60) * time_factor;
+ }
+
+ // then multiply by the recirculation factor..
+ if (added_tot / number_of_points > ERODEFACTOR * 0.75) adding_factor = (ERODEFACTOR * 0.75) / (added_tot / number_of_points);
+
+ if (index[x, y] == -9999) addGS(x, y);
+ for (tempn = 5; tempn <= G_MAX+3; tempn++)
+ {
+ double amount_to_add = adding_factor * (Math.Abs(inputfile[n, (int)(cycle / input_time_step), tempn])) / div_inputs / (DX * DX) / (input_time_step * 60) * time_factor;
+ if (isSuspended[tempn - 4])
+ {
+ Vsusptot[x, y] += amount_to_add;
+ }
+ else
+ {
+ grain[index[x, y], tempn - 4] += amount_to_add;
+ elev[x, y] += amount_to_add;
+ }
+
+ }
+ }
+ }
+ }
+
+ // add in recirculating sediment.
+ if (recirculatebox.Checked == true && reach_mode_box.Checked == true)
+ {
+ int tempn;
+ double adding_factor = 1;
+ // tot up total to be added - and if its greater than number of cells and erode_limit
+ // then reduce what can be added via a factor.
+ double added_tot = 0;
+
+ for (tempn = 5; tempn <= G_MAX+3 ; tempn++)
+ {
+ added_tot += temp_grain[tempn - 4];
+ remove_from_temp_grain[tempn - 4] = 0; // quick way of emptying this variable
+ }
+
+ // then multiply by the recirculation factor..
+ if (added_tot / number_of_points > ERODEFACTOR * 0.75) adding_factor = (ERODEFACTOR * 0.75) / (added_tot / number_of_points);
+
+
+ for (int n = 0; n <= number_of_points - 1; n++)
+ {
+ int x = inpoints[n, 0];
+ int y = inpoints[n, 1];
+
+ if (water_depth[x, y] > water_depth_erosion_threshold)
+ {
+
+ for (tempn = 5; tempn <= G_MAX+3 ; tempn++)
+ {
+ if (index[x, y] == -9999) addGS(x, y);
+ if (isSuspended[tempn - 4])
+ {
+ Vsusptot[x, y] += ((temp_grain[tempn - 4] * adding_factor) / number_of_points);
+ remove_from_temp_grain[tempn - 4] += ((temp_grain[tempn - 4] * adding_factor) / number_of_points);
+ }
+ else
+ {
+ grain[index[x, y], tempn - 4] += ((temp_grain[tempn - 4] * adding_factor) / number_of_points);
+ elev[x, y] += ((temp_grain[tempn - 4] * adding_factor) / number_of_points);
+ remove_from_temp_grain[tempn - 4] += ((temp_grain[tempn - 4] * adding_factor) / number_of_points);
+ }
+
+ }
+ }
+ }
+
+ }
+
+ for (int n = 1; n <= G_MAX; n++)
+ {
+ temp_grain[n] -= remove_from_temp_grain[n];
+ }
+
+
+
+ for (int n = 0; n <= number_of_points - 1; n++)
+ {
+ int x = inpoints[n, 0];
+ int y = inpoints[n, 1];
+ double interpolated_input1 = inputfile[n, (int)(cycle / input_time_step), 1];
+ double interpolated_input2 = inputfile[n, (int)(cycle / input_time_step) + 1, 1];
+ double proportion_between_time1and2 = ((((int)(cycle / input_time_step)+ 1 ) * input_time_step) - cycle)
+ / input_time_step;
+
+
+ double input = interpolated_input1 + ((interpolated_input2 - interpolated_input1) * (1-proportion_between_time1and2));
+
+ //j_mean = old_j_mean + (((new_j_mean - old_j_mean) / 2) * (2 - time));
+
+ waterinput += (input / div_inputs);
+
+ // trial adding SS line
+ // if(counter<500)Vsusptot[x+5, y] = 0.1;
+ water_depth[x, y] += (input / div_inputs) / (DX * DX) * local_time_factor;
+ // also have to add suspended sediment here..
+ // from file
+
+ }
+
+
+
+ }
+
+ void stage_tidal_input(double local_time_factor)
+ {
+
+ for (int x = Math.Min(fromx, tox); x <= Math.Max(fromx, tox); x++)
+ {
+ for (int y = Math.Min(fromy, toy); y <= Math.Max(fromy, toy); y++)
+ {
+ double interpolated_input1 = stage_inputfile[(int)(cycle / stage_input_time_step)];
+ double interpolated_input2 = stage_inputfile[(int)(cycle / stage_input_time_step) + 1];
+ double proportion_between_time1and2 = ((((int)(cycle / stage_input_time_step) + 1) * stage_input_time_step) - cycle)
+ / stage_input_time_step;
+
+
+ double input = interpolated_input1 + ((interpolated_input2 - interpolated_input1) * (1 - proportion_between_time1and2));
+
+ if (elev[x, y] > -9999 && input > elev[x, y])
+ {
+ water_depth[x, y] = input - elev[x, y];
+ if (water_depth[x, y] > 0) Vsusptot[x, y] = water_depth[x, y] * 0.001;//0.0005 is 500mg l.. approx.
+ }
+ }
+
+ }
+
+ }
+
+ void soil_development() // all based on Vanwalleghem et al., 2013 (JoGR:ES)
+ {
+ for (int x = 1; x <= xmax; x++)
+ {
+ for (int y = 1; y <= ymax; y++)
+ {
+ if (elev[x, y] > -9999) // ensure it is not a no-data point
+ {
+ if (index[x, y] == -9999) addGS(x, y); // first ensure that there is grainsize defined for that cell
+
+ if (checkBox4.Checked) // Bedrock lowering
+ {
+ if (bedrock[x, y] > -9999 && elev[x,y]>=bedrock[x,y])
+ {
+ double h = elev[x, y] - bedrock[x, y];
+ if (h == 0) h = 0.001;
+ bedrock[x,y] += - P1 * Math.Exp(-b1 * (h)) / 12; // / 12 to make it months
+ }
+ }
+
+ if (checkBox5.Checked) // Physical Weathering
+ {
+ //amt = k1 * Math.Exp(-c1*depth_below_surface) * (c2/Math.Log10(particle_size) * time;
+ // start from top then work down - means no need to hold values in temp arrays...
+ double Di = 0;
+ int xyindex = index[x, y];
+
+
+ for (int n = 2; n <= (G_MAX - 1); n++)
+ {
+ if ((grain[xyindex, n] > 0.0))
+ {
+ switch (n)
+ {
+ case 1: Di = d1; break;
+ case 2: Di = d2; break;
+ case 3: Di = d3; break;
+ case 4: Di = d4; break;
+ case 5: Di = d5; break;
+ case 6: Di = d6; break;
+ case 7: Di = d7; break;
+ case 8: Di = d8; break;
+ case 9: Di = d9; break;
+ }
+
+ double amount = grain[xyindex, n] * ((-(k1 * Math.Exp(-c1 * active * 0.5) * (c2 / Math.Log(Di)) * 1)) / 12); // / 12 to make it months
+ grain[xyindex, n] -= amount;
+ if (n == 2)
+ {
+ grain[xyindex, n - 1] += amount;
+ }
+ else
+ {
+ grain[xyindex, n - 1] += amount * 0.05;
+ grain[xyindex, n - 2] += amount * 0.95;
+ }
+
+ for (int z = 1; z <= 9; z++)
+ {
+ double amount2 = strata[xyindex, z - 1, n] * ((-(k1 * Math.Exp(-c1 * active * z) * (c2 / Math.Log(Di)) * 1)) / 12); // / 12 to make it months
+
+ strata[xyindex, z-1, n] -= amount;
+ if (n == 2)
+ {
+ strata[xyindex, z-1, n - 1] += amount;
+ }
+ else
+ {
+ strata[xyindex, z-1, n - 1] += amount * 0.05;
+ strata[xyindex, z-1, n - 2] += amount * 0.95;
+ }
+
+
+ }
+ }
+ }
+
+ //for (int z = 9; z >= 1; z--)
+ //{
+ // for (int n = 0; n <= G_MAX - 2; n++)
+ // {
+
+ // strata[xyindex, z, n] = strata[xyindex, z - 1, n];
+
+ // }
+ //}
+
+
+ }
+
+ if (checkBox6.Checked) // Chemical Weathering
+ {
+ //amt = k2 * Math.Exp(-c3 * depth_below_surface) * c4 * Specific_surface_area * time;
+ }
+ }
+ }
+ }
+ }
+
+ void get_catchment_input_points()
+ {
+ totalinputpoints = 0;
+ for (int n = 1; n <= rfnum; n++) catchment_input_counter[n] = 0;
+ for (int x = 1; x <= xmax; x++)
+ {
+ for (int y = 1; y <= ymax; y++)
+ {
+ if ((area[x, y] * baseflow * DX * DX) > MIN_Q && (area[x, y] * baseflow * DX * DX) < Convert.ToDouble(MinQmaxvalue.Text))
+ {
+ totalinputpoints++;
+ catchment_input_x_coord[totalinputpoints] = x;
+ catchment_input_y_coord[totalinputpoints] = y;
+ catchment_input_counter[rfarea[x, y]]++;
+ }
+ }
+ }
+ // could be the below line causing problems..?
+ //if (totalinputpoints == 0) totalinputpoints = 1;
+ }
+
+ void evaporate(double time)
+ {
+ double evap_amount = k_evap * (time / 1440);
+ // now reduce if greater than erodedepo - to prevent instability
+ if (evap_amount > ERODEFACTOR) evap_amount = ERODEFACTOR;
+
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax, options, delegate(int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+ // removes water in rate of mm per day..
+ if (water_depth[x, y] > 0)
+ {
+ water_depth[x, y] -= evap_amount;
+ if (water_depth[x, y] < 0) water_depth[x, y] = 0;
+ }
+
+ }
+
+ });
+ }
+
+ void save_data_every1000iters()
+ {
+ if (menuItem25.Checked == true) save_data(1, 0); // save waterdepths
+ if (menuItem13.Checked == true) save_data(2, 0); // save elevdiff
+ if (menuItem12.Checked == true) save_data(3, 0); // save elevations
+ if (menuItem14.Checked == true) save_data(4, 0); // save grainsize
+ if (menuItem29.Checked == true) save_data(15, 0); // save d50 top layer
+ if (menuItem33.Checked == true) save_data(16, 0); // save velocity
+ if (menuItem34.Checked == true) save_data(17, 0); // save soil_saturation
+ slide_5();
+
+ }
+
+ void save_data_and_draw_graphics()
+ {
+ if (menuItem25.Checked == true) save_data(1, Math.Abs(cycle)); // save waterdepths
+ if (menuItem13.Checked == true) save_data(2, Math.Abs(cycle)); // save elevdiff
+ if (menuItem12.Checked == true) save_data(3, Math.Abs(cycle)); // save elevations
+ if (menuItem14.Checked == true) save_data(4, Math.Abs(cycle)); // save grainsize
+ if (menuItem29.Checked == true) save_data(15, Math.Abs(cycle)); // save d50 top layer
+ if (menuItem33.Checked == true) save_data(16, Math.Abs(cycle)); // save velocity
+ if (menuItem34.Checked == true) save_data(17, Math.Abs(cycle)); // save soil saturation
+ ";
+ kml = kml + "\n"
+ + "\nAnimation";
+ kmlsr.WriteLine(kml);
+ kml = "";
+ }
+ kml = kml + "\n"
+ + "\nUntitled Image Overlay";
+ kml = kml + "\n"
+ + "\n" + kmlTime + ""
+ + "\n" + kmlTime + ""
+ + "\n"
+ + "\n"
+ + "\nmySavedImage" + imageCount2 + ".png"
+ + "\n"
+ + "\n";
+ kml = kml + "\n" + urfinalLati + ""
+ + "\n" + llfinalLati + ""
+ + "\n" + urfinalLongi + ""
+ + "\n" + llfinalLongi + "\n";
+ kml = kml + @"
+ ";
+ kmlsr.WriteLine(kml);
+ kml = "";
+ kmlsr.Close();
+ //imageCount2 = imageCount2 + 1;
+ //save_time2 += save_interval2;
+ }
+ }
+
+ void calchydrograph(double time)
+ {
+ for (int n = 1; n <= rfnum; n++)
+ {
+ j_mean[n] = old_j_mean[n] + (((new_j_mean[n] - old_j_mean[n]) / 2) * (2 - time));
+ }
+ }
+
+
+
+ void output_data()
+ {
+ int n;
+
+ // Qw (m3) value at timestep cycle (current
+ // Qw_newvol+=temptotal*((cycle-previous)*output_file_save_interval); // replaced by line below MJ 25/01/05
+ Qw_newvol+=temptotal*((cycle-previous)*60); // 60 secs per min
+ for(int nn=1;nn<=rfnum;nn++) Jw_newvol += (j_mean[nn]*DX*DX*nActualGridCells[nn]) * ((cycle-previous)*60);
+
+ //Catch all time steps that pass one or more hour marks
+ if ((new_cycle=output_file_save_interval))
+ {
+ while ((tx>previous)&&(cycle>=tx))
+ {
+ hours++;
+
+ // Step1: Calculate hourly total sediment Q (m3)
+ Qs_step = globalsediq-old_sediq;
+ Qs_over = Qs_step*((cycle-tx)/(cycle-tlastcalc));
+ Qs_hour = Qs_step-Qs_over+Qs_last;
+
+ // reset Qs_last and old_sediq for large time steps
+ if (cycle>=tx+output_file_save_interval)
+ {
+ Qs_last = 0;
+ old_sediq = globalsediq - Qs_over;
+ }
+
+ // reset Qs_last and old_sediq for small time steps
+ if (cycle=tx+output_file_save_interval)
+ {
+ Qg_last[n] = 0;
+ Qg_last2[n] = 0;
+ old_sum_grain[n] = sum_grain[n] - Qg_over[n];
+ old_sum_grain2[n] = sum_grain2[n] - Qg_over2[n];
+ }
+ // Reset Qg_last[n] and old_sum_grain[n] for small time steps
+ if (cycle=tx+output_file_save_interval)
+ {
+ Qw_lastvol = 0;
+ Qw_oldvol = Qw_newvol-Qw_overvol;
+
+ // same for Jw (j_mean contribution) MJ 14/03/05
+ Jw_lastvol = 0;
+ Jw_oldvol = Jw_newvol-Jw_overvol;
+ }
+
+ // reset Qw_lastvol and Qw_oldvol for small time steps
+ if (cycle -9999)
+ {
+ tomsedi += (init_elevs[x, y] - elev[x, y]) * DX * DX;
+ }
+ }
+ }
+ output = output + string.Format(" {0:F6}", tomsedi);
+ }
+ else
+ {
+ output = output + string.Format(" {0:F6}", sand_out);
+ sand_out = 0;
+ }
+ output = output + string.Format(" {0:F10}",Qs_hour);
+ for (n=1;n<=G_MAX-1;n++)
+ {
+ output = output + string.Format(" {0:F10}",Qg_hour[n]);
+ //output = output+" "+Qg_hour[n];
+ }
+
+ try
+ {
+ StreamWriter sw = File.AppendText(CATCH_FILE);
+ sw.WriteLine(output);
+ sw.Close();
+ }
+ catch (Exception)
+ {
+
+ }
+
+
+ }
+ tlastcalc = cycle;
+ }
+ }
+
+
+ int read_header()
+ {
+ string FILE_NAME;
+ int z;
+ string[] lineArray2;
+ int sp;
+
+ inputheader = new string[6];
+
+ FILE_NAME = this.openfiletextbox.Text;
+ if (!File.Exists(FILE_NAME))
+ {
+ MessageBox.Show("No such DEM data file..");
+ return 0;
+ }
+
+ try
+ {
+
+ //read headers
+ StreamReader sr = File.OpenText(FILE_NAME);
+ for(z = 1; z <= 6; z++)
+ {
+ inputheader[z-1] = sr.ReadLine();
+ }
+ sr.Close();
+
+ // get xmax, ymax and DX from input headers
+
+ lineArray2 = inputheader[0].Split(new char[]{' '});
+ sp = 1;
+ while (lineArray2[sp] == "") sp++;
+ xmax = int.Parse(lineArray2[sp]);
+
+ lineArray2 = inputheader[1].Split(new char[]{' '});
+ sp = 1;
+ while (lineArray2[sp] == "") sp++;
+ ymax = int.Parse(lineArray2[sp]);
+
+ lineArray2 = inputheader[2].Split(new char[] { ' ' });
+ sp = 1;
+ while (lineArray2[sp] == "") sp++;
+ xll = double.Parse(lineArray2[sp]);
+
+ lineArray2 = inputheader[3].Split(new char[] { ' ' });
+ sp = 1;
+ while (lineArray2[sp] == "") sp++;
+ yll = double.Parse(lineArray2[sp]);
+
+ lineArray2 = inputheader[4].Split(new char[]{' '});
+ sp = 1;
+ while (lineArray2[sp] == "") sp++;
+ DX = double.Parse(lineArray2[sp]);
+ root = (Math.Sqrt(Math.Pow(DX, 2) + Math.Pow(DX, 2))); // imp added 11/07
+
+ }
+ catch(Exception)
+ {
+ MessageBox.Show("Theres a problem with the header in the DEM file");
+ }
+
+ return 1;
+ }
+
+
+ void load_data()
+ {
+ int x,y=1,z,xcounter,x1=0,y1=0,n;
+ String input;
+ double tttt=0.00;
+
+ char[] delimiterChars = {' ',',','\t'};
+
+ // load dem
+
+ string FILE_NAME = this.openfiletextbox.Text;
+ if (!File.Exists(FILE_NAME))
+ {
+ MessageBox.Show("No such DEM data file..");
+ return;
+ }
+
+ StreamReader sr = File.OpenText(FILE_NAME);
+
+ //read headers
+ for(z=1;z<=6;z++)
+ {
+ input=sr.ReadLine();
+ }
+ y=1;
+
+ while ((input=sr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter=1;
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+
+ if(lineArray[x]!=""&&xcounter<=xmax)
+ {
+ tttt=double.Parse(lineArray[x]);
+ elev[xcounter,y]=tttt;
+ //if(xcounter==1)elev[xcounter,y]+=4;
+ init_elevs[xcounter,y]=elev[xcounter,y];
+ xcounter++;
+ }
+ }
+ y++;
+
+ }
+ sr.Close();
+
+ // load hydro coverage
+ ///////////////////////////////////////
+
+ try
+ {
+ FILE_NAME = this.hydroindexBox.Text;
+ if (FILE_NAME != "null")
+ {
+ sr = File.OpenText(FILE_NAME);
+
+ //read headers
+ for (z = 1; z <= 6; z++)
+ {
+ input = sr.ReadLine();
+ }
+ y = 1;
+
+ while ((input = sr.ReadLine()) != null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter = 1;
+ for (x = 0; x <= (lineArray.Length - 1); x++)
+ {
+
+ if (lineArray[x] != "" && xcounter <= xmax)
+ {
+ int xxxx = int.Parse(lineArray[x]);
+ if (xxxx == -9999) xxxx = 1;
+ rfarea[xcounter, y] = xxxx;
+ xcounter++;
+ }
+ }
+ y++;
+
+ }
+ sr.Close();
+ }
+ }
+ catch (Exception)
+ {
+
+ }
+
+ if(this.graindataloadbox.Text!="null")
+ {
+ FILE_NAME = this.graindataloadbox.Text;
+ if(FILE_NAME!="null")
+ {
+ StreamReader gr = File.OpenText(FILE_NAME);
+ y=1;
+ grain_array_tot=0;
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter=1;
+ grain_array_tot++;
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ if(xcounter==1)x1=int.Parse(lineArray[x]);
+ if(xcounter==2)y1=int.Parse(lineArray[x]);
+ if (x1 > xmax) x1 = xmax; // lines to prevent adding grain if clipping the grid and excellss on the grain grid is left
+ if (y1 > ymax) y1 = ymax; //
+
+ if (xcounter == 3) index[x1, y1] = grain_array_tot;// int.Parse(lineArray[x]);
+
+ for(n=0;n<=G_MAX;n++)
+ {
+ if(xcounter==4+n)
+ {
+ grain[grain_array_tot,n]=double.Parse(lineArray[x]);
+ }
+ }
+
+ for(z=0;z<=9;z++)
+ {
+ for(n=0;n<=(G_MAX-2);n++)
+ {
+ if(xcounter==(4+G_MAX+n+1)+((z)*9))
+ {
+ strata[grain_array_tot,z,n]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+
+ xcounter++;
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+
+
+ FILE_NAME = this.bedrockbox.Text;
+ if(FILE_NAME!="null")
+ {
+
+ StreamReader gr = File.OpenText(FILE_NAME);
+ //read headers
+ for(z=1;z<=6;z++)
+ {
+ input=gr.ReadLine();
+ }
+ y=1;
+
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter = 1;
+ for (x = 0; x <= (lineArray.Length - 1); x++)
+ {
+
+ if (lineArray[x] != "" && xcounter <= xmax)
+ {
+ tttt = double.Parse(lineArray[x]);
+ bedrock[xcounter, y] = tttt;
+ xcounter++;
+ }
+ }
+ y++;
+
+ }
+ gr.Close();
+ }
+
+ int inc1 = 1;
+
+ try
+ {
+
+
+ FILE_NAME = this.raindataloadbox.Text;
+ if (FILE_NAME != "null")
+ {
+
+
+ //int inc = 1;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input = gr.ReadLine()) != null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter = 1;
+ //MessageBox.Show(Convert.ToString(inc));
+ for (x = 0; x <= (lineArray.Length - 1); x++)
+ {
+ if (lineArray[x] != "" )
+ {
+ tttt = double.Parse(lineArray[x]);
+ hourly_rain_data[inc1, xcounter] = tttt;
+
+ xcounter++;
+ }
+ }
+ inc1++;
+ }
+
+ gr.Close();
+ }
+ }
+
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from the rain data file at line " + Convert.ToString(inc1) + ", CAESAR will continue to function but may not be correct");
+ //MessageBox.Show(" There was some type of error loading the input data from the rain data file CAESAR may continue to function but may not be correct");
+ }
+
+ try
+ {
+ //FILE_NAME = this.mvalueloadbox.Text;
+ //if (FILE_NAME != "null")
+ //{
+ // variable_m_value_flag = 1; // sets flag for variable M value to 1 (true)
+ // int inc = 1;
+ // StreamReader gr = File.OpenText(FILE_NAME);
+ // while ((input = gr.ReadLine()) != null)
+ // {
+ // hourly_m_value[inc] = double.Parse(input);
+ // inc++;
+ // }
+ // gr.Close();
+ //}
+ FILE_NAME = this.mvalueloadbox.Text;
+ if (FILE_NAME != "null")
+ {
+ variable_m_value_flag = 1; // sets flag for variable M value to 1 (true)
+ int inc = 1;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input = gr.ReadLine()) != null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter = 1;
+ //MessageBox.Show(Convert.ToString(inc));
+ for (x = 0; x <= (lineArray.Length - 1); x++)
+ {
+ if (lineArray[x] != "")
+ {
+ tttt = double.Parse(lineArray[x]);
+ hourly_m_value[inc, xcounter] = tttt;
+ xcounter++;
+ }
+ }
+ inc++;
+ }
+
+ gr.Close();
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the m value data from the m value data file CAESAR may continue to function but may not be correct");
+ }
+
+ if (checkBox3.Checked == true)
+ {
+ try
+ {
+ FILE_NAME = this.TidalFileName.Text;
+ if (FILE_NAME != "null")
+ {
+ int inc = 1;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input = gr.ReadLine()) != null)
+ {
+ stage_inputfile[inc] = double.Parse(input);
+ inc++;
+ }
+ gr.Close();
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the stage/tidal data file CAESAR may continue to function but may not be correct");
+ }
+ }
+
+ // load spatially variable mannings
+ ///////////////////////////////////////
+
+ if (SpatVarManningsCheckbox.Checked == true)
+ {
+ try
+ {
+ FILE_NAME = this.textBox19.Text;
+ if (FILE_NAME != "null")
+ {
+ sr = File.OpenText(FILE_NAME);
+
+ //read headers
+ for (z = 1; z <= 6; z++)
+ {
+ input = sr.ReadLine();
+ }
+ y = 1;
+
+ while ((input = sr.ReadLine()) != null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter = 1;
+ for (x = 0; x <= (lineArray.Length - 1); x++)
+ {
+
+ if (lineArray[x] != "" && xcounter <= xmax)
+ {
+ double xxxx = double.Parse(lineArray[x]);
+ if (xxxx == -9999) xxxx = 0.04; //failsafe to stop nodatas giving strange results.
+ spat_var_mannings [xcounter, y] = xxxx;
+ xcounter++;
+ }
+ }
+ y++;
+
+ }
+ sr.Close();
+ }
+ }
+ catch (Exception)
+ {
+
+ }
+ }
+
+ //try
+ //{
+ // //single mine input "supermine", up to nine grainsizes
+ // if (mine_checkBox.Checked)
+ // {
+ // //mine_inpoints[0, 0] = Convert.ToInt32(mineX_textBox.Text); //input x coordrinate
+ // //mine_inpoints[0, 1] = Convert.ToInt32(mineY_textBox.Text); //input y coordinate
+ // FILE_NAME = this.mine_input_textBox.Text;
+ // if (FILE_NAME != "null")
+ // {
+ // int lineinc = 1;//number of hours of contamination
+ // StreamReader gr = File.OpenText(FILE_NAME);
+ // while ((input = gr.ReadLine()) != null)
+ // {
+ // int inc = 1;//grainsizes 1-9, only two necessary now
+
+ // string[] lineArray;
+ // lineArray = input.Split(new char[] { ' ' });
+ // for (x = 1; x < (lineArray.Length); x++)
+ // {
+ // if (lineArray[x] != "")
+ // {
+ // //if (inc == 1) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize1
+ // //if (inc == 2) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize2
+ // //if (inc == 3) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize3
+ // //if (inc == 4) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize4
+ // //if (inc == 5) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize5
+ // //if (inc == 6) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize6
+ // //if (inc == 7) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize7
+ // //if (inc == 8) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize8
+ // //if (inc == 9) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize9
+ // inc++;
+ // }
+ // }
+ // lineinc++;
+ // }
+ // gr.Close();
+ // }
+ // }
+ //}
+ //catch (Exception ex)
+ //{
+ // MessageBox.Show("There was some type of error loading the contaminant input CAESAR may continue to function but may not be correct");
+ //}
+ int tempx=0;
+
+ try
+ {
+ if(inbox1.Checked)
+ {
+ FILE_NAME = this.infile1.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[0,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+
+ }
+ }catch(Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from "+FILE_NAME+" at line "+Convert.ToString(tempx)+", CAESAR will continue to function but may not be correct");
+ }
+
+ try{
+ if(inbox2.Checked)
+ {
+ FILE_NAME = this.infile2.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[1,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+
+ try{
+ if(inbox3.Checked)
+ {
+ FILE_NAME = this.infile3.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[2,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+ try{
+ if(inbox4.Checked)
+ {
+ FILE_NAME = this.infile4.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[3,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+
+ try{
+ if(inbox5.Checked)
+ {
+ FILE_NAME = this.infile5.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[4,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+ try{
+
+ if(inbox6.Checked)
+ {
+ FILE_NAME = this.infile6.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[5,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+ try{
+ if(inbox7.Checked)
+ {
+ FILE_NAME = this.infile7.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[6,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+
+ try{
+ if(inbox8.Checked)
+ {
+ FILE_NAME = this.infile8.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[7,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch(Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from "+FILE_NAME+" at line "+Convert.ToString(tempx)+", CAESAR will continue to function but may not be correct");
+ }
+
+
+ // code to try and draw in graphics from google maps etc...
+ //string latlng = "39.24382,9.143372";
+ //string path = "http://maps.googleapis.com/maps/api/staticmap?center=" + latlng +
+ // "&zoom=10&size=400x400&maptype=satellite&markers=color:blue%7Clabel:S%7C" +
+ // latlng + "&sensor=false";
+
+ //try
+ //{
+ // // bing maps instructions here: http://msdn.microsoft.com/en-us/library/ff701724.aspx
+ // // example line: http://dev.virtualearth.net/REST/v1/Imagery/Map/imagerySet?mapArea=mapArea&mapSize=mapSize&pushpin=pushpin&mapLayer=mapLayer&format=format&mapMetadata=mapMetadata&key=BingMapsKey
+
+ // point testPoint = new point(xll, yll);
+ // if (UTMgridcheckbox.Checked)
+ // {
+ // testPoint.UTMzone = System.Convert.ToInt32(UTMzonebox.Text);
+ // testPoint.south = System.Convert.ToBoolean(UTMsouthcheck.Checked);
+ // testPoint.transformUTMPoint();
+ // }
+ // else
+ // {
+ // testPoint.transformPoint();
+ // }
+ // yurcorner = yll + (System.Convert.ToDouble(ymax) * System.Convert.ToDouble(DX));
+ // xurcorner = xll + (System.Convert.ToDouble(xmax) * System.Convert.ToDouble(DX));
+ // point testPoint2 = new point(xurcorner, yurcorner);
+ // if (UTMgridcheckbox.Checked)
+ // {
+ // testPoint2.UTMzone = System.Convert.ToInt32(UTMzonebox.Text);
+ // testPoint2.south = System.Convert.ToBoolean(UTMsouthcheck.Checked);
+ // testPoint2.transformUTMPoint();
+ // }
+ // else
+ // {
+ // testPoint2.transformPoint();
+ // }
+
+ // string box = testPoint.ycoord + "," + testPoint.xcoord + "," + testPoint2.ycoord + "," + testPoint2.xcoord;
+ // //string box = "54.3397646119184,-2.30842643099455,54.4619251486287,-1.95376438512343";
+ // string path = "http://dev.virtualearth.net/REST/v1/Imagery/Map/Aerial?mapArea=" + box + "&mapSize=" + xmax + "," + ymax + "&key=AvaXZOU-oYf4A4vjryoLQEv06rQy9V3BBJkb7Bi4v8HaXoUTdDZevDbqtFEe9mi_";
+
+ // using (WebClient wc = new WebClient())
+ // {
+ // wc.DownloadFile(path, @"img.png");
+ // }
+ //}
+ //catch
+ //{
+ // MessageBox.Show("Time out trying to download background image: Check web connection");
+ //}
+
+
+ // MessageBox.Show(Convert.ToString(input_type_flag));
+ this.InfoStatusPanel.Text="Loaded: type = " + input_type_flag.ToString(); // MJ 02/02/05
+
+ }
+
+
+ void save_data(int typeflag, double tempcycle)
+ {
+ int x,y,z,inc, nn;
+
+ string FILENAME = "waterdepth.dat";
+
+ if(uniquefilecheck.Checked==false)tempcycle=0;
+
+ // turns file name into days from mins.
+
+
+
+ if(typeflag==1&&tempcycle==0) FILENAME = "waterdepth.txt";
+ if(typeflag==2&&tempcycle==0) FILENAME = "elevdiff.txt";
+ if(typeflag==3&&tempcycle==0) FILENAME = "elev.txt";
+ if(typeflag==4&&tempcycle==0) FILENAME = "grain.txt";
+ if (typeflag == 15 && tempcycle == 0) FILENAME = "d50top.txt";
+ if (typeflag == 16 && tempcycle == 0) FILENAME = "velocity.txt"; //
+ if (typeflag == 17 && tempcycle == 0) FILENAME = "velocity_vectors.txt"; //
+
+ if(typeflag==1&&tempcycle>0) FILENAME = "waterdepth"+Convert.ToString(Convert.ToInt64(tempcycle))+".txt";
+ if (typeflag == 2 && tempcycle > 0) FILENAME = "elevdiff" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+ if (typeflag == 3 && tempcycle > 0) FILENAME = "elev.dat" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+ if (typeflag == 4 && tempcycle > 0) FILENAME = "grain.dat" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+
+ if (typeflag == 15 && tempcycle > 0) FILENAME = "d50top" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+ if (typeflag == 16 && tempcycle > 0) FILENAME = "velocity" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+ if (typeflag == 17 && tempcycle > 0) FILENAME = "velocity_vectors" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+
+ if(typeflag>=1&&typeflag<4)
+ {
+
+ using (StreamWriter sw = new StreamWriter(FILENAME))
+ {
+ sw.Write("ncols "+xmax);
+ sw.Write("\n");
+ sw.Write("nrows "+ymax);
+ sw.Write("\n");
+
+ for (nn=2; nn<=5; nn++)
+ {
+ sw.Write(inputheader[nn]);sw.Write("\n");
+ }
+
+ for(y=1;y<=ymax;y++)
+ {
+ for(x=1;x<=xmax;x++)
+ {
+ if(typeflag==1)
+ {
+ //sw.Write(area[x, y]); sw.Write(" ");
+ if (water_depth[x, y] > 0)
+ {
+ //sw.Write(vel_dir[x,y,0]);
+ sw.Write(water_depth[x,y]);
+
+ sw.Write(" ");
+ }
+ else
+ {
+ sw.Write("-9999.0");
+ sw.Write(" ");
+ }
+ }
+
+ if(typeflag==2)
+ {
+ sw.Write(init_elevs[x,y]-elev[x,y]);
+ sw.Write(" ");
+ }
+ if(typeflag==3)
+ {
+ sw.Write(elev[x,y]);
+ sw.Write(" ");
+ }
+ }
+ sw.Write("\n");
+ }
+
+
+ }
+
+ }
+
+ if(typeflag==4)
+ {
+
+ using (StreamWriter sw = new StreamWriter(FILENAME))
+ {
+ for (y=1;y<=ymax;y++)
+ {
+ for(x=1;x<=xmax;x++)
+ {
+
+
+ if(index[x,y]!=-9999)
+ {
+ sw.Write(x);sw.Write(" ");sw.Write(y);sw.Write(" ");sw.Write(index[x,y]);sw.Write(" ");
+ for(inc=0;inc<=G_MAX;inc++)
+ {
+ sw.Write(grain[index[x,y],inc]);sw.Write(" ");
+ }
+
+ for(z=0;z<=9;z++)
+ {
+ for(inc=0;inc<=(G_MAX-2);inc++)
+ {
+ sw.Write(strata[index[x,y],z,inc]);sw.Write(" ");
+ }
+ }
+ sw.Write("\n");
+ }
+ }
+ }
+ }
+ }
+
+
+ if(typeflag==15)
+ {
+
+ using (StreamWriter sw = new StreamWriter(FILENAME))
+ {
+ for (nn=0; nn<=5; nn++)
+ {
+ sw.Write(inputheader[nn]);sw.Write("\n");
+ }
+
+ for(y=1;y<=ymax;y++)
+ {
+ for(x=1;x<=xmax;x++)
+ {
+ if(index[x,y] == -9999)
+ {
+ sw.Write("-9999.0");
+ sw.Write(" ");
+ }
+ else
+ {
+ sw.Write(d50(index[x,y]));
+ sw.Write(" ");
+ }
+ }
+ sw.Write("\n");
+ }
+
+ }
+ }
+
+ if(typeflag==16) // Write velocity to a file
+ {
+
+ using (StreamWriter sw = new StreamWriter(FILENAME))
+ {
+ for (nn=0; nn<=5; nn++)
+ {
+ sw.Write(inputheader[nn]);sw.Write("\n");
+ }
+
+ for(y=1;y<=ymax;y++)
+ {
+ for(x=1;x<=xmax;x++)
+ {
+ if(water_depth[x,y] Write soil_saturation to a file
+ {
+
+ using (StreamWriter sw = new StreamWriter(FILENAME))
+ {
+ //for (nn=0; nn<=5; nn++)
+ //{
+ // sw.Write(inputheader[nn]);sw.Write("\n");
+ //}
+
+ sw.Write("x,y,rot,vel");
+ sw.Write("\n");
+
+ for (y = 1; y <= ymax; y++)
+ {
+ for (x = 1; x <= xmax; x++)
+ {
+ if (water_depth[x, y] > water_depth_erosion_threshold)
+ {
+ sw.Write((xll + (x * DX)) + (DX / 2)); sw.Write(","); sw.Write(((yll + ((ymax - y) * DX)))); sw.Write(","); sw.Write(calc_max_flow_direction_degrees(x, y)); sw.Write(","); sw.Write(Vel[x, y]);
+ sw.Write("\n");
+ }
+
+ }
+
+ }
+
+ }
+ }
+
+
+ }
+
+
+ private void initialise()
+ {
+
+ this.InfoStatusPanel.Text="Initialising.."; // MJ 14/01/05
+
+ if (overrideheaderBox.Checked == true)
+ {
+ // input xmax, ymax and DX from text boxes
+ xmax=int.Parse(xtextbox.Text);
+ ymax=int.Parse(ytextbox.Text);
+ DX=double.Parse(dxbox.Text); // now in read_header() MJ 24/05/05
+ }
+
+
+ save_interval2 = int.Parse(googAnimationSaveInterval.Text);
+ save_time2 = save_interval2;
+
+ in_out_difference=double.Parse(initscansbox.Text);
+ ERODEFACTOR=double.Parse(erodefactorbox.Text);
+ root=(Math.Sqrt(Math.Pow(DX,2)+Math.Pow(DX,2)));
+ LIMIT=int.Parse(limitbox.Text);
+ MIN_Q=double.Parse(minqbox.Text);
+ CREEP_RATE=double.Parse(creepratebox.Text);
+ SOIL_RATE = double.Parse(soil_ratebox.Text);
+ bed_proportion=double.Parse(lateralratebox.Text);
+
+ cycle=double.Parse(textBox1.Text)*60;
+
+ maxcycle=int.Parse(cyclemaxbox.Text);
+ failureangle=double.Parse(slopebox.Text);
+
+ saveinterval=double.Parse(saveintervalbox.Text);
+ //M=double.Parse(mvaluebox.Text);
+ grow_grass_time=double.Parse(grasstextbox.Text);
+ output_file_save_interval=int.Parse(outputfilesaveintervalbox.Text);
+ tx=output_file_save_interval;
+ min_time_step=double.Parse(mintimestepbox.Text);
+ active=double.Parse(activebox.Text);
+ k_evap=double.Parse(k_evapBox.Text); // added MJ 15/03/05
+ vegTauCrit=double.Parse(vegTauCritBox.Text); // added MJ 10/05/05
+ max_time_step = int.Parse(max_time_step_Box.Text);
+ water_depth_erosion_threshold = double.Parse(Q2box.Text);
+ max_vel = double.Parse(max_vel_box.Text);
+ courant_number = double.Parse(courantbox.Text);
+ hflow_threshold = double.Parse(textBox4.Text);
+ lateral_cross_channel_smoothing = double.Parse(textBox7.Text);
+ froude_limit = double.Parse(textBox8.Text);
+ mannings = double.Parse(textBox9.Text);
+
+ rfnum = int.Parse(rfnumBox.Text);
+
+ if (googleAnimationCheckbox.Checked)
+ {
+ startDate = googleBeginDate.Text;
+ googleTime = System.DateTime.Parse(googleBeginDate.Text);
+ }
+ d1=double.Parse(g1box.Text);
+ d2=double.Parse(g2box.Text);
+ d3=double.Parse(g3box.Text);
+ d4=double.Parse(g4box.Text);
+ d5=double.Parse(g5box.Text);
+ d6=double.Parse(g6box.Text);
+ d7=double.Parse(g7box.Text);
+ d8=double.Parse(g8box.Text);
+ d9=double.Parse(g9box.Text);
+
+ dprop = new double[11];
+
+ dprop[1] = double.Parse(gp1box.Text);
+ dprop[2] = double.Parse(gp2box.Text);
+ dprop[3] = double.Parse(gp3box.Text);
+ dprop[4] = double.Parse(gp4box.Text);
+ dprop[5] = double.Parse(gp5box.Text);
+ dprop[6] = double.Parse(gp6box.Text);
+ dprop[7] = double.Parse(gp7box.Text);
+ dprop[8] = double.Parse(gp8box.Text);
+ dprop[9] = double.Parse(gp9box.Text);
+
+
+ G_MAX=10;
+ if (dprop[9] == 0) G_MAX = 9;
+ if (dprop[8] == 0) G_MAX = 8;
+ if (dprop[7] == 0) G_MAX = 7;
+ if (dprop[6] == 0) G_MAX = 6;
+ if (dprop[5] == 0) G_MAX = 5;
+ if (dprop[4] == 0) G_MAX = 4;
+ if (dprop[3] == 0) G_MAX = 3;
+ if (dprop[2] == 0) G_MAX = 2;
+ if (checkBox8.Checked == true) G_MAX = 10;
+
+
+ // new array to deal with suspended sediment MJ 09/05/05
+ isSuspended = new bool[10+1];
+ isSuspended[1] = suspGS1box.Checked;
+ isSuspended[2] = false;
+ isSuspended[3] = false;
+ isSuspended[4] = false;
+ isSuspended[5] = false;
+ isSuspended[6] = false;
+ isSuspended[7] = false;
+ isSuspended[8] = false;
+ isSuspended[9] = false;
+
+ // new array to deal with suspended sediment MJ 09/05/05
+ fallVelocity = new double[10+1];
+ fallVelocity[1] = double.Parse(fallGS1box.Text);
+ fallVelocity[2] = double.Parse(fallGS2box.Text);
+ fallVelocity[3] = double.Parse(fallGS3box.Text);
+ fallVelocity[4] = double.Parse(fallGS4box.Text);
+ fallVelocity[5] = double.Parse(fallGS5box.Text);
+ fallVelocity[6] = double.Parse(fallGS6box.Text);
+ fallVelocity[7] = double.Parse(fallGS7box.Text);
+ fallVelocity[8] = double.Parse(fallGS8box.Text);
+ fallVelocity[9] = double.Parse(fallGS9box.Text);
+
+ input_time_step=int.Parse(input_time_step_box.Text);
+ stage_input_time_step = double.Parse(TidalInputStep.Text);
+ edgeslope =double.Parse(textBox2.Text);
+ lateral_constant=double.Parse(textBox3.Text);
+ veg_lat_restriction = double.Parse(veg_lat_box.Text);
+
+ bedrock_erosion_rate = double.Parse(bedrock_erosion_rate_box.Text);
+ bedrock_erosion_threshold = double.Parse(bedrock_erosion_threshold_box.Text);
+
+ inpoints=new int[10,2];
+ inputpointsarray = new bool[xmax + 2, ymax + 2];
+
+ // then intiailise the main arrays
+ if(inbox1.Checked)
+ {
+ number_of_points++;
+ inpoints[0,0]=int.Parse(xbox1.Text);
+ inpoints[0,1]=int.Parse(ybox1.Text);
+ inputpointsarray[int.Parse(xbox1.Text), int.Parse(ybox1.Text)] = true;
+ }
+
+ if(inbox2.Checked)
+ {
+ number_of_points++;
+ inpoints[1,0]=int.Parse(xbox2.Text);
+ inpoints[1,1]=int.Parse(ybox2.Text);
+ inputpointsarray[int.Parse(xbox2.Text), int.Parse(ybox2.Text)] = true;
+ }
+
+ if(inbox3.Checked)
+ {
+ number_of_points++;
+ inpoints[2,0]=int.Parse(xbox3.Text);
+ inpoints[2,1]=int.Parse(ybox3.Text);
+ inputpointsarray[int.Parse(xbox3.Text), int.Parse(ybox3.Text)] = true;
+ }
+
+ if(inbox4.Checked)
+ {
+ number_of_points++;
+ inpoints[3,0]=int.Parse(xbox4.Text);
+ inpoints[3,1]=int.Parse(ybox4.Text);
+ inputpointsarray[int.Parse(xbox4.Text), int.Parse(ybox4.Text)] = true;
+ }
+
+ if(inbox5.Checked)
+ {
+ number_of_points++;
+ inpoints[4,0]=int.Parse(xbox5.Text);
+ inpoints[4,1]=int.Parse(ybox5.Text);
+ inputpointsarray[int.Parse(xbox5.Text), int.Parse(ybox5.Text)] = true;
+ }
+
+ if(inbox6.Checked)
+ {
+ number_of_points++;
+ inpoints[5,0]=int.Parse(xbox6.Text);
+ inpoints[5,1]=int.Parse(ybox6.Text);
+ inputpointsarray[int.Parse(xbox6.Text), int.Parse(ybox6.Text)] = true;
+ }
+
+ if(inbox7.Checked)
+ {
+ number_of_points++;
+ inpoints[6,0]=int.Parse(xbox7.Text);
+ inpoints[6,1]=int.Parse(ybox7.Text);
+ inputpointsarray[int.Parse(xbox7.Text), int.Parse(ybox7.Text)] = true;
+ }
+
+ if(inbox8.Checked)
+ {
+ number_of_points++;
+ inpoints[7,0]=int.Parse(xbox8.Text);
+ inpoints[7,1]=int.Parse(ybox8.Text);
+ inputpointsarray[int.Parse(xbox8.Text), int.Parse(ybox8.Text)] = true;
+ }
+
+ inputfile = new double[number_of_points,(int)((maxcycle*60)/input_time_step)+10,16];
+ stage_inputfile = new double[(int)((maxcycle * 60) / stage_input_time_step) + 10];
+
+ elev = new double[xmax+2,ymax+2];
+ water_depth = new double[xmax+2,ymax+2];
+
+ old_j_mean_store = new double[(int)((maxcycle*60)/input_time_step)+10];
+
+ qx = new double[xmax + 2, ymax + 2];
+ qy = new double[xmax + 2, ymax + 2];
+
+ qxs = new double[xmax + 2, ymax + 2];
+ qys = new double[xmax + 2, ymax + 2];
+
+
+ // temp arrays that control how much sediment goes up,. righ left down and into suspended sediment.
+ sr = new Double[xmax + 2, ymax + 2, 10];
+ sl = new Double[xmax + 2, ymax + 2, 10];
+ su = new Double[xmax + 2, ymax + 2, 10];
+ sd = new Double[xmax + 2, ymax + 2, 10];
+ ss = new Double[xmax + 2, ymax + 2];
+
+ erodetot = new Double[xmax + 2, ymax + 2];
+ erodetot3 = new Double[xmax + 2, ymax + 2];
+ temp_elev = new Double[xmax + 2, ymax + 2];
+
+
+ Vel = new double[xmax + 2, ymax + 2];
+ area = new double[xmax+2,ymax+2];
+ index = new int[xmax+2,ymax+2];
+ elev_diff = new double[xmax + 2, ymax + 2];
+
+ bedrock = new double[xmax+2,ymax+2];
+ tempcreep = new double[xmax+2,ymax+2];
+ init_elevs = new double[xmax+2,ymax+2];
+ vel_dir= new double[xmax+2,ymax+2,9];
+
+ strata=new double[((xmax+2)*(ymax+2))/LIMIT,10,G_MAX+1];
+ grain=new double[((2+xmax)*(ymax+2))/LIMIT,G_MAX+1];
+
+ cross_scan=new int[xmax+2,ymax+2];
+ down_scan=new int[ymax+2,xmax+2];
+ // time step for rain data
+ rain_data_time_step = double.Parse(raintimestepbox.Text);
+ mfiletimestep = double.Parse(mfiletimestepbox.Text);
+
+ // line to stop max time step being greater than rain time step
+ if (rain_data_time_step < 1) rain_data_time_step = 1;
+ if (max_time_step / 60 > rain_data_time_step) max_time_step = (int)rain_data_time_step * 60;
+
+ hourly_rain_data = new double[(int)(maxcycle * (60 / rain_data_time_step)) + 100, rfnum+1];
+ hourly_m_value = new double[(int)(maxcycle * (60 / mfiletimestep)) + 10, rfnum + 1];
+ climate_data=new double[10001,3];
+
+ temp_grain=new double[G_MAX+1];
+ veg=new Double[xmax+1,ymax+1,4]; // 0 is elevation, 1 is level of veg cover (ranging from 0 to 1)
+ edge=new double[xmax+1,ymax+1]; // TJC 27/1/05
+ edge2=new double[xmax+1,ymax+1]; // TJC 27/4/06
+
+ Tau = new double[xmax+2,ymax+2];
+
+ catchment_input_x_coord = new int[xmax * ymax];
+ catchment_input_y_coord = new int[xmax * ymax];
+
+ //dune things
+ dune_mult = (int)(DX)/int.Parse(dune_grid_size_box.Text);
+ if (dune_mult < 1) dune_mult = 1;
+ if (DuneBox.Checked == false) dune_mult = 1; // needed in order to stop it tripping out the memory
+
+ area_depth = new double[xmax + 2, ymax + 2];
+ sand = new double[xmax + 2, ymax + 2];
+ elev2 = new double[(xmax * dune_mult) + 2, (ymax*dune_mult) + 2];
+ sand2 = new double[(xmax * dune_mult) + 2, (ymax * dune_mult) + 2];
+
+
+ dischargeinput=new double[1000,5];
+
+ hydrograph=new double[(maxcycle-((int)(cycle/60)))+1000,2];
+
+
+ // MJ arrays 08/02/05
+
+ Vsusptot = new double[xmax+2,ymax+2];
+
+ // JOE arrays
+ slopeAnalysis = new double[xmax+2,ymax+2]; //
+ aspect = new double[xmax+2,ymax+2]; //
+ hillshade = new double[xmax+2,ymax+2]; //
+
+ //Gez arrays
+ sum_grain = new double[G_MAX+1];
+ sum_grain2 = new double[G_MAX + 1];
+ old_sum_grain = new double[G_MAX+1];
+ old_sum_grain2 = new double[G_MAX + 1];
+ Qg_step = new double[G_MAX+1];
+ Qg_hour = new double[G_MAX+1];
+ Qg_over = new double[G_MAX+1];
+ Qg_last = new double[G_MAX+1];
+ Qg_step2 = new double[G_MAX + 1];
+ Qg_hour2 = new double[G_MAX + 1];
+ Qg_over2 = new double[G_MAX + 1];
+ Qg_last2 = new double[G_MAX + 1];
+
+ CATCH_FILE = TimeseriesOutBox.Text; // MJ 18/01/05
+ //CATCH_FILE2 = tracerOutputtextBox.Text;
+
+ // siberia data
+ Beta1 = double.Parse(Beta1Box.Text);
+ Beta3 = double.Parse(Beta3Box.Text);
+ m1 = double.Parse(m1Box.Text);
+ m3 = double.Parse(m3Box.Text);
+ n1 = double.Parse(n1Box.Text);
+
+ // sediment tpt law
+ if (einsteinbox.Checked == true) einstein = 1;
+ if (wilcockbox.Checked == true) wilcock = 1;
+ if (meyerbox.Checked == true) meyer = 1;
+
+ div_inputs = int.Parse(div_inputs_box.Text);
+ recirculate_proportion = double.Parse(propremaining.Text);
+
+ graphics_scale = (int)(1500 / xmax); // auto scales the graphics to be roughly 1000 pixels wide.
+ // Create a drawing surface with the same dimensions DEM * graphics scale
+ if (graphics_scale < 1) graphics_scale = 1; // catch to prevent too long DEMS causign error..
+ m_objDrawingSurface = new Bitmap(xmax * graphics_scale,
+ ymax * graphics_scale, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
+
+ // tidal/stagevariables
+ fromx = int.Parse(TidalXmin.Text);
+ tox = int.Parse(TidalXmax.Text);
+ fromy = int.Parse(TidalYmin.Text);
+ toy = int.Parse(TidalYmax.Text);
+
+ // soil generation variables
+ P1 = double.Parse(textBox11.Text);
+ b1 = double.Parse(textBox12.Text);
+ k1 = double.Parse(textBox13.Text);
+ c1 = double.Parse(textBox14.Text);
+ c2 = double.Parse(textBox15.Text);
+ k2 = double.Parse(textBox16.Text);
+ c3 = double.Parse(textBox17.Text);
+ c4 = double.Parse(textBox18.Text);
+
+ // disributed hydro model arrays
+ j = new Double[rfnum + 1]; //0.000000001; //start of hydrological model paramneters
+ jo = new Double[rfnum + 1];//0.000000001;
+ j_mean = new Double[rfnum + 1];
+ old_j_mean = new Double[rfnum + 1];
+ new_j_mean = new Double[rfnum + 1];
+ rfarea = new int [xmax + 2, ymax + 2];
+ nActualGridCells = new int[rfnum + 1];
+ catchment_input_counter = new int[rfnum + 1];
+ M = new Double[rfnum + 1];
+
+ // spat var mannings
+ spat_var_mannings = new Double[xmax + 1, ymax + 1];
+
+ }
+
+
+ void sort_active(int x,int y)
+ {
+ int xyindex;
+ double total;
+ double amount;
+ double coeff;
+ int n,z;
+
+
+ if (index[x,y] == -9999) addGS(x,y); // should not be necessary
+ xyindex = index[x,y];
+
+ total = 0.0;
+ for (n=0;n<=G_MAX;n++)
+ {
+
+ total += grain[xyindex,n];
+
+ }
+
+ if (total > (active*1.5)) // depositing - create new strata layer and remove bottom one..
+ {
+ // start from bottom
+ // remove bottom active layer
+ // then move all from layer above into one below, up to the top layer
+ for(z=9;z>=1;z--)
+ {
+ for(n=0;n<=G_MAX-2;n++)
+ {
+
+ strata[xyindex,z,n]=strata[xyindex,z-1,n];
+
+ }
+ }
+
+ // then remove strata thickness from grain - and add to top strata layer
+ coeff = active / total;
+ for (n=1;n<=(G_MAX-1);n++)
+ {
+ if ((grain[xyindex,n] > 0.0))
+ {
+
+ amount = coeff * (grain[xyindex,n]);
+ strata[xyindex,0,n-1] = amount;
+ grain[xyindex,n] -= amount;
+
+ }
+ }
+ }
+
+ if (total < (active/4)) // eroding - eat into existing strata layer & create new one at bottom
+ {
+ // Start at top
+ // Add top strata to grain
+ for (n=1;n<=(G_MAX-1);n++)
+ {
+ grain[xyindex,n] += strata[xyindex,0,n-1];
+ }
+
+ // then from top down add lower strata into upper
+ for(z=0;z<=8;z++)
+ {
+ for(n=0;n<=G_MAX-2;n++)
+ {
+ strata[xyindex,z,n] = strata[xyindex,z+1,n];
+ }
+ }
+
+ // add new layer at the bottom
+ amount = active;
+ z = 9;
+ for (n = 1; n <= G_MAX - 1; n++)
+ {
+ strata[xyindex, z, n - 1] = amount * dprop[n]; // 0.0;
+
+ }
+ }
+
+ }
+
+
+ //double layer_depth(int index1, int t)
+ //{
+
+ // double total=0;
+
+ // total+=(grain[index1,t,0]);
+
+ // return (total);
+ //}
+
+ //double active_layer_depth(int index1)
+ //{
+ // int n;
+ // double active_thickness = 0;
+
+ // for (n = 1; n <= G_MAX; n++)
+ // {
+ // active_thickness += (grain[index1, n, 0]);
+ // }
+ // return(active_thickness);
+ //}
+
+
+ double sand_fraction(int index1)
+ {
+
+ int n;
+ double active_thickness=0;
+ double sand_total=0;
+ for(n=1;n<=G_MAX;n++)
+ {
+ active_thickness+=(grain[index1,n]);
+ }
+
+ for(n=1;n<=2;n++) // number of sand fractions...
+ {
+ sand_total+=(grain[index1,n]);
+ }
+
+ if(active_thickness<0.0001)
+ {
+ return(0.0);
+ }
+ else
+ {
+ return(sand_total/active_thickness);
+ }
+
+ }
+
+
+ double d50(int index1)
+ {
+ int z,n,i;
+ double active_thickness=0;
+ double Dfifty=0,max=0,min=0;
+ double[] cum_tot;
+ cum_tot = new double[20];
+
+ for(n=1;n<=G_MAX;n++)
+ {
+ for(z=0;z<=(0);z++)
+ {
+ active_thickness+=(grain[index1, n ]);
+ cum_tot[n]+=active_thickness;
+ }
+ }
+
+
+ i=1;
+ while(cum_tot[i]<(active_thickness*0.5)&&i<=G_MAX-1)
+ {
+ i++;
+ }
+
+ if(i==1){min=Math.Log(d1);max=Math.Log(d1);}
+ if(i==2){min=Math.Log(d1);max=Math.Log(d2);}
+ if(i==3){min=Math.Log(d2);max=Math.Log(d3);}
+ if(i==4){min=Math.Log(d3);max=Math.Log(d4);}
+ if(i==5){min=Math.Log(d4);max=Math.Log(d5);}
+ if(i==6){min=Math.Log(d5);max=Math.Log(d6);}
+ if(i==7){min=Math.Log(d6);max=Math.Log(d7);}
+ if(i==8){min=Math.Log(d7);max=Math.Log(d8);}
+ if(i==9){min=Math.Log(d8);max=Math.Log(d9);}
+ //if(i==9){min=Math.Log(d8);max=Math.Log(d9);}
+
+ Dfifty = Math.Exp(max - ((max - min) * ((cum_tot[i] - (active_thickness * 0.5)) / (cum_tot[i] - cum_tot[i - 1]))));
+ if(active_thickness<0.0000001)Dfifty=0;
+ return Dfifty;
+
+ }
+
+
+ double max_bed_slope2(int x, int y)
+ {
+
+ double slope = 0;
+ int slopetot = 0;
+ double slopemax = 0;
+
+ if (elev[x, y] > elev[x, y - 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x, y - 1]) / DX, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x + 1, y - 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x + 1, y - 1]) / root, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x + 1, y])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x + 1, y]) / DX, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x + 1, y + 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x + 1, y + 1]) / root, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x, y + 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x, y + 1]) / DX, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x - 1, y + 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x - 1, y + 1]) / root, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x - 1, y])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x - 1, y]) / DX, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x - 1, y - 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x - 1, y - 1]) / root, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ //if (slope > 0) slope = (slope / slopetot);
+
+
+ //return(slopemax);
+ //if(slopemax<0.001)slopemax=0.001;
+ //if (slopemax > 0.01) slopemax = 0.01;
+ return (slopemax);
+ }
+
+
+
+ void addGS(int x,int y)
+ {
+ // needs lock statement to stop two being added at the same time...
+ lock (this)
+ {
+
+ int n, q;
+ grain_array_tot++;
+ index[x, y] = grain_array_tot;
+
+ grain[grain_array_tot, 0] = 0;
+ for (n = 1; n <= G_MAX - 1;n++ )
+ {
+ grain[grain_array_tot, n] = active * dprop[n];
+ }
+ grain[grain_array_tot, G_MAX] = 0;
+
+
+ for (n = 0; n <= 9; n++)
+ {
+ for (int n2 = 0; n2 <= G_MAX - 2;n2++ )
+ {
+ strata[grain_array_tot, n, n2] = (active) * dprop[n2+1];
+ }
+
+
+ if (elev[x, y] - (active * (n + 1)) < (bedrock[x, y] - active))
+ {
+ for (q = 0; q <= (G_MAX - 2); q++)
+ {
+ strata[grain_array_tot, n, q] = 0;
+ }
+ }
+ }
+
+
+ sort_active(x, y);
+
+ }
+
+ }
+
+ // calc roughtness on Srickler relationship
+ double strickler(int x, int y)
+ {
+ double temp=0;
+ double temp_d50=1;
+
+ if (index[x,y] != -9999)temp_d50=d50(index[x,y]);
+ temp =0.034*Math.Pow(temp_d50,0.167);
+ //Console.WriteLine(Convert.ToString(strickler(x,y)));
+ temp+=0.012;
+ return temp;
+
+ }
+
+
+ ////Calculate roughness - Added JMW 20051122
+ ////Based on Baptist, 2005
+ //double chezy(int x, int y)
+ //{
+ // double Cr;
+ // double Cb;
+ // double temp_d50=30;
+
+ // double temp_depth=water_depth[x,y];
+
+ // if(temp_depth<=0)temp_depth=0.1;
+
+
+ // // just to save it when there is no grain file
+ // if (index[x,y] != -9999)temp_d50=d50(index[x,y]);
+
+
+
+ // // Grain roughness (strickler formulation)
+ // Cb = (26.4*Math.Pow(temp_depth/temp_d50,0.167));
+ // Cr=Cb;
+
+ // // veg influencing roughness is commented out at the moment...
+ // //if (veg[x,y,1]>0.01)// if there is any veg..
+ // //{
+ // // // Applying vegetation
+ // // if (veg[x,y,3] < temp_depth)
+ // // {
+ // // Cr = (Math.Pow(1/(1/(Cb*Cb) + veg[x,y,2]*veg[x,y,3]/(2*g)),0.5)
+ // // + Math.Pow(g,0.5)/kappa*Math.Log(temp_depth/veg[x,y,3]));
+ // // }
+ // // else
+ // // {
+ // // Cr = (Math.Pow(1/(1/(Cb*Cb) + veg[x,y,2]*temp_depth/(2*g)),0.5));
+ // // }
+ // //}
+
+ // return Cr;
+ //}
+
+
+ //double chezytomanning(double chezyc, double depth)
+ //{
+ // return (Math.Pow(depth,0.167))/chezyc;
+ //}
+
+
+ //double calc_manning(int x, int y)
+ //{
+ // double temp_depth = water_depth[x, y];
+ // if (temp_depth <= 0) temp_depth = 0.1;
+ // return chezytomanning(chezy(x, y), temp_depth) + 0.012;
+ // return 0.03 + (veg[x, y, 2] * 0.03);
+ // if (veg[x, y, 1] > 0.5)
+ // {
+ // return 0.05;
+ // }
+ // else
+ // {
+ // return 0.03;
+ // }
+ //}
+
+
+ void grow_grass(double amount3)
+ {
+
+ int x, y;
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ //first check if veg is at 0.. not sure if this is needed now..
+ if (veg[x, y, 0] == 0)
+ {
+ veg[x, y, 0] = elev[x, y];
+ }
+
+ // first check if under water or not..
+ if(water_depth[x,y]1)veg[x,y,1]=1;
+ }
+
+ // check if veg below elev! if so raise to elev
+ if (veg[x, y, 0] < elev[x, y]) // raises the veg level if it gets buried.. but only by a certain amount (0.001m day...)
+ {
+ veg[x, y, 0] += 0.001; // this is an arbitrary amount..
+ if (veg[x, y, 0] > elev[x, y]) veg[x, y, 0] = elev[x, y];
+ }
+
+ // check if veg above elev! if so lower to elev
+ if (veg[x, y, 0] > elev[x, y])
+ {
+ veg[x, y, 0] -= 0.001; // this is an arbitrary amount..
+ if (veg[x, y, 0] < elev[x, y]) veg[x, y, 0] = elev[x, y];
+ }
+
+ // trying to see now, if veg is above elev - so if lateral erosion happens - more than 0.1m the veg gets wiped..
+
+ if (veg[x, y, 0] - elev[x, y] > 0.1)
+ {
+ veg[x, y, 1] = 0;
+ veg[x, y, 0] = elev[x, y];
+ }
+
+
+ // now see if veg under water - if so let it die back a bit..
+ if(water_depth[x,y] > water_depth_erosion_threshold&&veg[x,y,1]>0)
+ {
+ veg[x, y, 1] -= (amount3 / 2);
+ if (veg[x, y, 1] < 0)
+ {
+ veg[x, y, 1] = 0;
+ veg[x, y, 0] = elev[x, y]; // resets elev if veg amt is 0
+ }
+ }
+
+ // also if it is under sediment - then dies back a bit too...
+ if (veg[x, y, 0] < elev[x, y])
+ {
+ veg[x, y, 1] -= (amount3 / 2);
+ if (veg[x, y, 1] < 0)
+ {
+ veg[x, y, 1] = 0;
+ veg[x, y, 0] = elev[x, y]; // resets elev if veg amt is 0
+ }
+
+ }
+
+ // but if it is under sediment, has died back to nearly 0 (0.05) then it resets the elevation
+ // to the surface elev.
+ if (veg[x, y, 0] < elev[x, y]&&veg[x,y,1]<0.05)
+ {
+ veg[x, y, 0] = elev[x, y];
+ }
+
+
+ }
+ }
+
+
+ }
+
+
+ void creep(double time)
+ {
+
+ /** creep rate is 10*-2 * slope per year, so inputs time jump in years*/
+ /** very important differnece here is that slide_GS() is called only if
+ BOTH cells are not -9999 therfore if both have grainsize then do additions.
+ this is to stop the progressive spread of selected cells upslope */
+
+
+
+ int x,y;
+ double temp;
+
+
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ tempcreep[x,y]=0;
+ }
+ }
+
+
+ for(x=2;xbedrock[x,y])
+ {
+ if(elev[x,y-1] -9999)
+ {
+ temp=((elev[x,y]-elev[x,y-1])/ DX)*CREEP_RATE*time/ DX;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x+1,y-1])/ root)*CREEP_RATE*time/ root;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x+1,y])/ DX)*CREEP_RATE*time/ DX;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x+1,y+1])/ root)*CREEP_RATE*time/ root;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x,y+1])/ DX)*CREEP_RATE*time/ DX;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x-1,y+1])/ root)*CREEP_RATE*time/ root;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x-1,y])/ DX)*CREEP_RATE*time/ DX;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x-1,y-1])/ root)*CREEP_RATE*time/ root;
+ if((elev[x,y]-temp) bedrock[x, y])
+ {
+ //SibQ = Math.Pow(area[x, y] * DX * DX, m3);
+ //SibQsf = DX * Beta3 * Beta1 * Math.Pow((SibQ), m1) * Math.Pow(max_bed_slope2(x, y), n1) * time;
+
+ SibQ = Beta3 * Math.Pow(area[x, y] * DX * DX, m3);
+ SibQsf = Beta1 * Math.Pow((SibQ / DX), m1) * Math.Pow(max_bed_slope2(x, y), n1) * time;
+ double max_slope = max_bed_slope2(x, y);
+ if (max_slope == 0) max_slope = 10; // catch line to stop erosion if there is no slope
+ //if (max_slope > 0) max_slope *= 0.99;
+
+ if ((elev[x, y]-elev[x, y - 1] )/ DX >= max_slope && elev[x, y - 1] > -9999)
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x, y - 1);
+ }
+ }
+ if ((elev[x, y] - elev[x + 1, y - 1]) / root >= max_slope && (elev[x + 1, y - 1] > -9999 || x == xmax))
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y - 1);
+ }
+
+ }
+ if ((elev[x, y] - elev[x + 1, y]) / DX >= max_slope && (elev[x + 1, y] > -9999 || x == xmax))
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y);
+ }
+ }
+ if ((elev[x, y] - elev[x + 1, y + 1]) / root >= max_slope && (elev[x + 1, y + 1] > -9999 || x == xmax))
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y + 1);
+ }
+ }
+ if ((elev[x, y] - elev[x, y + 1]) / DX >= max_slope && elev[x, y + 1] > -9999 )
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x, y + 1);
+ }
+ }
+ if ((elev[x, y] - elev[x - 1, y + 1]) / root >= max_slope && elev[x - 1, y + 1] > -9999 )
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y + 1);
+ }
+ }
+ if ((elev[x, y] - elev[x - 1, y]) / DX >= max_slope && elev[x - 1, y] > -9999 )
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y);
+ }
+ }
+ if ((elev[x, y] - elev[x - 1, y - 1]) / root >= max_slope && elev[x - 1, y - 1] > -9999 )
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y - 1);
+ }
+ }
+
+ }
+ }
+ }
+
+ for (x = 2; x < xmax; x++)
+ {
+ for (y = 2; y < ymax; y++)
+ {
+ elev[x, y] += tempcreep[x, y];
+ }
+ }
+
+ }
+
+
+ void soilerosion(double time)
+ {
+
+ /** creep rate is 10*-2 * slope per year, so inputs time jump in years*/
+ /** very important differnece here is that slide_GS() is called only if
+ BOTH cells are not -9999 therfore if both have grainsize then do additions.
+ this is to stop the progressive spread of selected cells upslope */
+
+
+
+ int x, y;
+ double temp;
+
+
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ tempcreep[x, y] = 0;
+ }
+ }
+
+
+ for (x = 2; x < xmax; x++)
+ {
+ for (y = 2; y < ymax; y++)
+ {
+ if (elev[x, y] > bedrock[x, y])
+ {
+ if (elev[x, y - 1] < elev[x, y] && elev[x, y - 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x, y - 1]) / DX) * SOIL_RATE * time / DX * Math.Pow(area[x,y]*DX*DX,0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x, y - 1);
+ }
+ }
+ if (elev[x + 1, y - 1] < elev[x, y] && elev[x + 1, y - 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x + 1, y - 1]) / root) * SOIL_RATE * time / root * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y - 1);
+ }
+
+ }
+ if (elev[x + 1, y] < elev[x, y] && elev[x + 1, y] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x + 1, y]) / DX) * SOIL_RATE * time / DX * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y);
+ }
+ }
+ if (elev[x + 1, y + 1] < elev[x, y] && elev[x + 1, y + 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x + 1, y + 1]) / root) * SOIL_RATE * time / root * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y + 1);
+ }
+ }
+ if (elev[x, y + 1] < elev[x, y] && elev[x, y + 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x, y + 1]) / DX) * SOIL_RATE * time / DX * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x, y + 1);
+ }
+ }
+ if (elev[x - 1, y + 1] < elev[x, y] && elev[x - 1, y + 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x - 1, y + 1]) / root) * SOIL_RATE * time / root * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y + 1);
+ }
+ }
+ if (elev[x - 1, y] < elev[x, y] && elev[x - 1, y] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x - 1, y]) / DX) * SOIL_RATE * time / DX * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y);
+ }
+ }
+ if (elev[x - 1, y - 1] < elev[x, y] && elev[x - 1, y - 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x - 1, y - 1]) / root) * SOIL_RATE * time / root * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y - 1);
+ }
+ }
+ }
+ }
+ }
+
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ elev[x, y] += tempcreep[x, y];
+ }
+ }
+
+ }
+
+
+ void get_area()
+ {
+ int x,y;
+
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ area_depth[x,y]=1;
+ area[x, y] = 0;
+ if (elev[x, y] == -9999)
+ {
+ area_depth[x, y] = 0.0;
+ }
+
+ }
+ }
+ get_area4();
+
+ }
+
+
+ void get_area4()
+ {
+
+ // new routine for determining drainage area 4/10/2010
+ // instead of using sweeps this sorts all the elevations then works frmo the
+ // highest to lowest - calculating drainage area - D-infinity basically.
+
+ int x, y, n, x2,y2, dir;
+
+ // zero load of arrays
+ double [] tempvalues,tempvalues2, xkey, ykey;
+ tempvalues = new Double [(xmax+2) *(ymax+2)];
+ tempvalues2 = new Double[(xmax+2) * (ymax+2)];
+ xkey = new Double [(xmax+2)*(ymax+2)];
+ ykey = new Double[(xmax+2) * (ymax+2)];
+
+ // then createst temp array based on elevs then also one for x values.
+ int inc = 1;
+ for (y = 1; y <= ymax; y++)
+ {
+ for (x = 1; x <= xmax; x++)
+ {
+ tempvalues[inc] = elev[x, y];
+ xkey[inc] = x;
+ inc++;
+ }
+ }
+ // then sorts according to elevations - but also sorts the key (xkey) according to these too..
+ Array.Sort(tempvalues, xkey);
+
+ // now does the same for y values
+ inc = 1;
+ for (y = 1; y <= ymax; y++)
+ {
+ for (x = 1; x <= xmax; x++)
+ {
+ tempvalues2[inc] = elev[x, y];
+ ykey[inc] = y;
+ inc++;
+ }
+ }
+
+ Array.Sort(tempvalues2, ykey);
+
+
+ // then works through the list of x and y co-ordinates from highest to lowest...
+ for (n = (xmax * ymax); n >= 1; n--)
+ {
+ x = (int)(xkey[n]);
+ //this.InfoStatusPanel.Text = Convert.ToString(x);
+ y = (int)(ykey[n]);
+ //this.InfoStatusPanel.Text = Convert.ToString(y);
+
+ if (area_depth[x, y] > 0)
+ {
+ // update area if area_depth is higher
+ if (area_depth[x, y] > area[x, y]) area[x, y] = area_depth[x, y];
+
+ double difftot = 0;
+
+ // work out sum of +ve slopes in all 8 directions
+ for (dir = 1; dir <= 8; dir++)//was 1 to 8 +=2
+ {
+
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+ if (x2 < 1) x2 = 1; if (y2 < 1) y2 = 1; if (x2 > xmax) x2 = xmax;if(y2>ymax)y2=ymax;
+
+ // swap comment lines below for drainage area from D8 or Dinfinity
+ if (Math.IEEERemainder(dir, 2) != 0)
+ {
+ if (elev[x2, y2] < elev[x, y]) difftot += elev[x, y] - elev[x2, y2];
+ }
+ else
+ {
+ if (elev[x2, y2] < elev[x, y]) difftot += (elev[x, y] - elev[x2, y2]) / 1.414;
+ }
+ //if(elev[x,y]-elev[x2,y2]>difftot)difftot=elev[x,y]-elev[x2,y2];
+ }
+ if (difftot > 0)
+ {
+ // then distribute to all 8...
+ for (dir = 1; dir <= 8; dir++)//was 1 to 8 +=2
+ {
+
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+ if (x2 < 1) x2 = 1; if (y2 < 1) y2 = 1; if (x2 > xmax) x2 = xmax; if (y2 > ymax) y2 = ymax;
+
+ // swap comment lines below for drainage area from D8 or Dinfinity
+
+ if (Math.IEEERemainder(dir, 2) != 0)
+ {
+ if (elev[x2, y2] < elev[x, y]) area_depth[x2, y2] += area_depth[x, y] * ((elev[x, y] - elev[x2, y2]) / difftot);
+ }
+ else
+ {
+ if (elev[x2, y2] < elev[x, y]) area_depth[x2, y2] += area_depth[x, y] * (((elev[x, y] - elev[x2, y2])/1.414) / difftot);
+ }
+
+ //if (elev[x, y] - elev[x2, y2] == difftot) area_depth[x2, y2] += area_depth[x, y];
+ }
+
+ }
+ // finally zero the area depth...
+ area_depth[x, y] = 0;
+ }
+ }
+
+ }
+
+
+ void init_route(int flag, double reach_input_amount, double catchment_input_amount)
+ {
+ int x,y,inc;
+
+ double w = water_depth_erosion_threshold;
+
+
+ /*******************************/
+
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ cross_scan[x,y]=0;
+ down_scan[y,x]=0;
+ //if(water_depth[x,y]==-9999)water_depth[x,y]=0;
+ }
+ }
+
+
+
+ for(x=1;x<=xmax;x++)
+ {
+ inc=1;
+ for(y=1;y<=ymax;y++)
+ {
+ if (water_depth[x, y] > 0
+ || water_depth[x - 1, y] > 0
+ || water_depth[x + 1, y] > 0
+ || water_depth[x, y - 1] > 0
+ || water_depth[x, y + 1] > 0)
+ {
+ cross_scan[x,inc]=y;
+ inc++;
+ }
+ //discharge[x,y]=0;
+ }
+ }
+
+ for(y=1;y<=ymax;y++)
+ {
+ inc=1;
+ for(x=xmax;x>=1;x--)
+ {
+ if(water_depth[x,y]>0
+ ||water_depth[x-1,y]>0
+ ||water_depth[x+1,y]>0
+ ||water_depth[x,y-1]>0
+ ||water_depth[x,y+1]>0)
+ {
+ down_scan[y,inc]=x;
+ inc++;
+ }
+ //if(input_type_flag==1)discharge[x,y]=0;
+ }
+ }
+
+
+ this.InfoStatusPanel.Text="Running"; // MJ 14/01/05
+
+ }
+
+ //double Fi(int index1, int t)
+ //{
+ // int n;
+ // double active_thickness = 0;
+ // double total = 0;
+
+ // // part to deal with tracers is now hard coded in order to speed things up - with
+ // // an if statement at the start.. saves un-necessary looping
+
+
+ // for (n = 1; n <= G_MAX; n++)
+ // {
+ // active_thickness += (grain[index1, n]);
+ // }
+
+
+ // total += (grain[index1, t]);
+
+ // if (active_thickness < 0.0001)
+ // {
+ // return (0.0);
+ // }
+ // else
+ // {
+ // return (total / active_thickness);
+ // }
+ //}
+
+ private void calc_J(double cycle)
+ {
+ for (int n = 1; n <= rfnum; n++)
+ {
+ double local_rain_fall_rate; /** in m/second **/
+ double local_time_step = 60; /** in secs */
+
+
+ old_j_mean[n] = new_j_mean[n];
+ jo[n] = j[n];
+
+ /* Get The M Value From File If One Is Specified */
+ if (variable_m_value_flag == 1)
+ {
+ M[n] = hourly_m_value[1 + (int)(cycle / mfiletimestep), n];
+ }
+
+ local_rain_fall_rate = 0;
+ if (hourly_rain_data[(int)(cycle / rain_data_time_step), n] > 0)
+ {
+ local_rain_fall_rate = rain_factor * ((hourly_rain_data[(int)(cycle / rain_data_time_step), n] / 1000) / 3600); /** divide by 1000 to make m/hr, then by 3600 for m/sec */
+ }
+
+ if (local_rain_fall_rate == 0)
+ {
+ j[n] = jo[n] / (1 + ((jo[n] * local_time_step) / M[n]));
+ new_j_mean[n] = M[n] / local_time_step * Math.Log(1 + ((jo[n] * local_time_step) / M[n]));
+ }
+
+ if (local_rain_fall_rate > 0)
+ {
+ j[n] = local_rain_fall_rate / (((local_rain_fall_rate - jo[n]) / jo[n]) * Math.Exp((0 - local_rain_fall_rate) * local_time_step / M[n]) + 1);
+ new_j_mean[n] = (M[n] / local_time_step) * Math.Log(((local_rain_fall_rate - jo[n]) + jo[n] * Math.Exp((local_rain_fall_rate * local_time_step) / M[n])) / local_rain_fall_rate);
+ }
+ if (new_j_mean[n] < 0) new_j_mean[n] = 0;
+ /**printf("new J mean = %f\n",(new_j_mean*1000));*/
+ }
+
+ }
+
+ double calc_max_flow_direction_degrees(int x, int y)
+ {
+ double deg = 0;
+ if (water_depth[x, y] > water_depth_erosion_threshold)
+ {
+ double xplus = vel_dir[x, y, 3];
+ double xminus = vel_dir[x, y, 7];
+ double yplus = vel_dir[x, y, 5];
+ double yminus = vel_dir[x, y, 1];
+ if (xplus < 0) xplus = 0;
+ if (xminus < 0) xminus = 0;
+ if (yplus < 0) yplus = 0;
+ if (yminus < 0) yminus = 0;
+ double xbalance = xplus - xminus;
+ double ybalance = yminus - yplus;
+
+ //working out max_flow for 12-3pm
+
+ if (xbalance > 0 && ybalance < 0)
+ {
+
+ deg = (Math.Atan(xbalance / Math.Abs(ybalance)) * (180 / 3.142));
+
+ }
+
+ // for 3pm to 6pm
+ if (xbalance > 0 && ybalance > 0)
+ {
+ deg = 90 + (Math.Atan(ybalance / xbalance) * (180 / 3.142));
+ }
+
+ // for 6 - 9
+ if (xbalance < 0 && ybalance > 0)
+ {
+ deg = 180 + (Math.Atan(Math.Abs(xbalance) / Math.Abs(ybalance)) * (180 / 3.142));
+ }
+
+ // for 9-12
+ if (xbalance < 0 && ybalance < 0)
+ {
+ deg = 270 + (Math.Atan(Math.Abs(ybalance) / Math.Abs(xbalance)) * (180 / 3.142));
+ }
+
+ if (xbalance > 0 && ybalance == 0) deg = 90;
+ if (xbalance < 0 && ybalance == 0) deg = 270;
+ if (ybalance > 0 && xbalance == 0) deg = 180;
+ if (ybalance < 0 && xbalance == 0) deg = 0;
+
+ return (deg);
+
+ }
+ else
+ {
+ return -9999.0;
+ }
+
+
+ }
+
+ void qroute()
+ {
+ double local_time_factor = time_factor;
+ if (local_time_factor > (courant_number * (DX / Math.Sqrt(gravity * (maxdepth))))) local_time_factor = courant_number * (DX / Math.Sqrt(gravity * (maxdepth)));
+
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax+1, options, delegate(int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+ if (elev[x, y] > -9999) // to stop moving water in to -9999's on elev
+ {
+ // add spatial mannings here
+ double temp_mannings = mannings;
+ if (SpatVarManningsCheckbox.Checked == true) temp_mannings = spat_var_mannings[x, y];
+
+ // routing in x direction
+ if ((water_depth[x, y] > 0 || water_depth[x - 1, y] > 0) && elev[x - 1, y] > -9999) // need to check water and not -9999 on elev
+ {
+ double hflow = Math.Max(elev[x, y] + water_depth[x, y], elev[x - 1, y] + water_depth[x - 1, y]) -
+ Math.Max(elev[x - 1, y], elev[x, y]);
+
+ if (hflow > hflow_threshold)
+ {
+ double tempslope = (((elev[x - 1, y] + water_depth[x - 1, y])) -
+ (elev[x, y] + water_depth[x, y])) / DX;
+
+ if (x == xmax) tempslope = edgeslope;
+ if (x <= 2) tempslope = 0 - edgeslope;
+
+ //double oldqx = qx[x, y];
+ qx[x, y] = ((qx[x, y] - (gravity * hflow * local_time_factor * tempslope)) /
+ (1 + gravity * hflow * local_time_factor * (temp_mannings * temp_mannings) * Math.Abs(qx[x, y]) /
+ Math.Pow(hflow, (10 / 3))));
+ //if (oldqx != 0) qx[x, y] = (oldqx + qx[x, y]) / 2;
+
+ // need to have these lines to stop too much water moving from one cellt o another - resulting in -ve discharges
+ // whihc causes a large instability to develop - only in steep catchments really
+ if (qx[x, y] > 0 && (qx[x, y] / hflow)/Math.Sqrt(gravity*hflow) > froude_limit ) qx[x, y] = hflow * (Math.Sqrt(gravity*hflow) * froude_limit );
+ if (qx[x, y] < 0 && Math.Abs(qx[x, y] / hflow) / Math.Sqrt(gravity * hflow) > froude_limit ) qx[x, y] = 0 - (hflow * (Math.Sqrt(gravity * hflow) * froude_limit ));
+
+ if (qx[x, y] > 0 && (qx[x, y] * local_time_factor / DX) > (water_depth[x, y] / 4)) qx[x, y] = ((water_depth[x, y] * DX) / 5) / local_time_factor;
+ if (qx[x, y] < 0 && Math.Abs(qx[x, y] * local_time_factor / DX) > (water_depth[x - 1, y] / 4)) qx[x, y] = 0 - ((water_depth[x - 1, y] * DX) / 5) / local_time_factor;
+
+ if (isSuspended[1])
+ {
+
+ if (qx[x, y] > 0) qxs[x, y] = qx[x, y] * (Vsusptot[x, y] / water_depth[x, y]);
+ if (qx[x, y] < 0) qxs[x, y] = qx[x, y] * (Vsusptot[x - 1, y] / water_depth[x - 1, y]);
+
+ if (qxs[x, y] > 0 && qxs[x, y] * local_time_factor > (Vsusptot[x, y] * DX) / 4) qxs[x, y] = ((Vsusptot[x, y] * DX) / 5) / local_time_factor;
+ if (qxs[x, y] < 0 && Math.Abs(qxs[x, y] * local_time_factor) > (Vsusptot[x - 1, y] * DX) / 4) qxs[x, y] = 0 - ((Vsusptot[x - 1, y] * DX) / 5) / local_time_factor;
+ }
+
+ // calc velocity now
+ if (qx[x, y] > 0) vel_dir[x, y, 7] = qx[x, y] / hflow;
+ if (qx[x, y] < 0) vel_dir[x - 1, y, 3] = (0- qx[x, y]) / hflow;
+
+ }
+ else
+ {
+ qx[x, y] = 0;
+ qxs[x, y] = 0;
+ }
+ }
+
+ //routing in the y direction
+ if ((water_depth[x, y] > 0 || water_depth[x, y - 1] > 0) && elev[x, y - 1] > -9999)
+ {
+ double hflow = Math.Max(elev[x, y] + water_depth[x, y], elev[x, y - 1] + water_depth[x, y - 1]) -
+ Math.Max(elev[x, y], elev[x, y - 1]);
+
+ if (hflow > hflow_threshold)
+ {
+ double tempslope = (((elev[x, y - 1] + water_depth[x, y - 1])) -
+ (elev[x, y] + water_depth[x, y])) / DX;
+ if (y == ymax) tempslope = edgeslope;
+ if (y <= 2 ) tempslope = 0 - edgeslope;
+
+ //double oldqy = qy[x, y];
+ qy[x, y] = ((qy[x, y] - (gravity * hflow * local_time_factor * tempslope)) /
+ (1 + gravity * hflow * local_time_factor * (temp_mannings * temp_mannings) * Math.Abs(qy[x, y]) /
+ Math.Pow(hflow, (10 / 3))));
+ //if (oldqy != 0) qy[x, y] = (oldqy + qy[x, y]) / 2;
+
+ // need to have these lines to stop too much water moving from one cellt o another - resulting in -ve discharges
+ // whihc causes a large instability to develop - only in steep catchments really
+ if (qy[x, y] > 0 && (qy[x, y] / hflow) / Math.Sqrt(gravity * hflow) > froude_limit ) qy[x, y] = hflow * (Math.Sqrt(gravity * hflow) * froude_limit );
+ if (qy[x, y] < 0 && Math.Abs(qy[x, y] / hflow) / Math.Sqrt(gravity * hflow) > froude_limit ) qy[x, y] = 0 - (hflow * (Math.Sqrt(gravity * hflow) * froude_limit));
+
+ if (qy[x, y] > 0 && (qy[x, y] * local_time_factor / DX) > (water_depth[x, y] / 4)) qy[x, y] = ((water_depth[x, y] * DX) / 5) / local_time_factor;
+ if (qy[x, y] < 0 && Math.Abs(qy[x, y] * local_time_factor / DX) > (water_depth[x, y - 1] / 4)) qy[x, y] = 0 - ((water_depth[x, y - 1] * DX) / 5) / local_time_factor;
+
+
+ if (isSuspended[1])
+ {
+
+ if (qy[x, y] > 0) qys[x, y] = qy[x, y] * (Vsusptot[x, y] / water_depth[x, y]);
+ if (qy[x, y] < 0) qys[x, y] = qy[x, y] * (Vsusptot[x, y - 1] / water_depth[x, y - 1]);
+
+ if (qys[x, y] > 0 && qys[x, y] * local_time_factor > (Vsusptot[x, y] * DX) / 4) qys[x, y] = ((Vsusptot[x, y] * DX) / 5) / local_time_factor;
+ if (qys[x, y] < 0 && Math.Abs(qys[x, y] * local_time_factor) > (Vsusptot[x, y - 1] * DX) / 4) qys[x, y] = 0 - ((Vsusptot[x, y - 1] * DX) / 5) / local_time_factor;
+
+ }
+
+ // calc velocity now
+ if (qy[x, y] > 0) vel_dir[x, y, 1] = qy[x, y] / hflow;
+ if (qy[x, y] < 0) vel_dir[x, y - 1, 5] = (0-qy[x, y]) / hflow;
+ }
+ else
+ {
+ qy[x, y] = 0;
+ qys[x, y] = 0;
+ }
+ }
+
+ }
+ }
+ });
+
+
+ }
+
+ void depth_update()
+ {
+ double local_time_factor = time_factor;
+ if (local_time_factor > (courant_number * (DX / Math.Sqrt(gravity * (maxdepth))))) local_time_factor = courant_number * (DX / Math.Sqrt(gravity * (maxdepth)));
+ double [] tempmaxdepth2;
+ tempmaxdepth2 = new Double[ymax + 2];
+
+ maxdepth = 0;
+
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax+1, options, delegate(int y)
+ {
+ int inc = 1;
+ double tempmaxdepth = 0;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+ // update water depths
+ water_depth[x,y] += local_time_factor * (qx[x + 1, y] - qx[x, y] + qy[x, y + 1] - qy[x, y]) / DX;
+ // now update SS concs
+ if (isSuspended[1])
+ {
+ Vsusptot[x, y] += local_time_factor * (qxs[x + 1, y] - qxs[x, y] + qys[x, y + 1] - qys[x, y]) / DX;
+ }
+
+ if (water_depth[x, y] > 0)
+ {
+ // line to remove any water depth on nodata cells (that shouldnt get there!)
+ if (elev[x, y] == -9999) water_depth[x, y] = 0;
+ // calc max flow depth for time step calc
+ if (water_depth[x, y] > tempmaxdepth) tempmaxdepth = water_depth[x, y];
+ }
+ }
+ tempmaxdepth2[y] = tempmaxdepth;
+ });
+ // reduction
+ for (int y = 1; y <= ymax; y++) if (tempmaxdepth2[y] > maxdepth) maxdepth = tempmaxdepth2[y];
+ }
+
+
+ void scan_area()
+ {
+ double tempW = 0;// water_depth_erosion_threshold;
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax+1, options, delegate(int y)
+ {
+ int inc = 1;
+
+ for (int x = 1; x <= xmax; x++)
+ {
+ // zero scan bit..
+ down_scan[y, x] = 0;
+ // and work out scanned area.
+ if (water_depth[x, y] > tempW
+ || water_depth[x - 1, y] > tempW
+ //|| water_depth[x - 1, y - 1] > tempW
+ //|| water_depth[x - 1, y + 1] > tempW
+ //|| water_depth[x + 1, y - 1] > tempW
+ //|| water_depth[x + 1, y + 1] > tempW
+ || water_depth[x, y - 1] > tempW
+ || water_depth[x + 1, y] > tempW
+ || water_depth[x, y + 1] > tempW)
+ {
+ down_scan[y, inc] = x;
+ inc++;
+ }
+ }
+ });
+
+
+
+ Parallel.For(1, xmax + 1, options, delegate (int x)
+ {
+
+ int inc = 1;
+ for (int y = 1; y <= ymax; y++)
+ {
+ cross_scan[x, y] = 0;
+ if (water_depth[x, y] > tempW
+ || water_depth[x - 1, y] > tempW
+ || water_depth[x + 1, y] > tempW
+ || water_depth[x, y - 1] > tempW
+ || water_depth[x, y + 1] > tempW)
+ {
+ cross_scan[x, inc] = y;
+ inc++;
+ }
+ //discharge[x,y]=0;
+ }
+
+ });
+
+
+ }
+
+ private void zero_values()
+ {
+ int x,y,z,n;
+
+ for(y=0;y<=ymax;y++)
+ {
+ for(x=0;x<=xmax;x++)
+ {
+ Vel[x, y] = 0;
+ area[x,y]=0;
+ elev[x,y]=0;
+ bedrock[x,y]=-9999;
+ init_elevs[x,y]=elev[x,y];
+ water_depth[x,y]=0;
+ index[x,y]=-9999;
+ inputpointsarray[x, y] = false;
+ veg[x, y, 0] = 0;// elevation
+ veg[x, y, 1] = 0; // density
+ veg[x,y,2]=0; // jw density
+ veg[x,y,3]=0; // height
+
+ edge[x,y]=0;
+ edge2[x,y]=0;
+
+
+ sand[x, y] = 0;
+
+ qx[x, y] = 0;
+ qy[x, y] = 0;
+
+ qxs[x, y] = 0;
+ qys[x, y] = 0;
+
+
+ for(n=0;n<=8;n++)vel_dir[x,y,n]=0;
+
+ Vsusptot[x, y] = 0;
+
+ rfarea[x, y] = 1;
+
+ if (SpatVarManningsCheckbox.Checked == true) spat_var_mannings[x, y] = mannings;
+
+ }
+ }
+
+ for(x=1;x<((xmax*ymax)/LIMIT);x++)
+ {
+ for(y=0;y<=G_MAX;y++)
+ {
+ grain[x,y]=0;
+ }
+ for(z=0;z<=9;z++)
+ {
+ for(y=0;y<=G_MAX-2;y++)
+ {
+
+ strata[x,z,y]=0;
+ }
+ }
+ catchment_input_x_coord[x]=0;
+ catchment_input_y_coord[x]=0;
+ }
+
+ for (x = 1; x <= rfnum; x++)
+ {
+ j[x] = 0.000000001;
+ jo[x] = 0.000000001;
+ j_mean[x] = 0;
+ old_j_mean[x] = 0;
+ new_j_mean[x] = 0;
+ M[x] = double.Parse(mvaluebox.Text);
+ }
+ }
+
+ void dune1(double time) // does dune things from top to bottom
+ {
+ int dune_recirculate = 0;
+ int x, y, n, prob, counter1 = 1, ytemp, ytemp2,x2,y2;
+ int t, checkup = int.Parse(upstream_check_box.Text);
+ int flag = 1;
+
+ double maxslabdepth = double.Parse(slab_depth_box.Text);
+ int dep_probability= int.Parse(depo_prob_box.Text);
+ int downstream_offset = int.Parse(offset_box.Text);
+ double number_slabs_per_col = double.Parse(init_depth_box.Text);
+ double angle = double.Parse(shadow_angle_box.Text);
+
+ double fractiondune = double.Parse(fraction_dune.Text);
+ double slabdepth = maxslabdepth;
+
+ double factor = Math.Tan((angle * (3.141592654 / 180))) * (DX/dune_mult);
+ Random xr = new Random();
+
+ double [,] oldelev;
+ oldelev = new double[xmax + 2, ymax + 2];
+
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ // subtract eleev from sand so splitting into sand and elev for dune part...
+ oldelev[x, y] = elev[x, y];
+
+
+ double sandsum = 0;
+ double sand_diff = 0;
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ // this next line is needed to remove all sand from the far LH and RH cells
+ if (x == xmax) sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] = 0;
+ if (x == 1) sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] = 0;
+
+ if (sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] > 0)
+ {
+ sandsum += sand2[(x * dune_mult) - x2, (y * dune_mult) - y2];
+ }
+
+ }
+ }
+
+ // if water then transfer sand back to elev.
+ if (water_depth[x, y] >= water_depth_erosion_threshold) sand[x, y] = 0;
+
+
+ // then check and see if sand is less than sand2 - meaning there has been addition of dune sand to flucial sand
+ if (sand[x, y] < (sandsum / (dune_mult * dune_mult)))
+ {
+ sand_diff = (sandsum / (dune_mult * dune_mult)) - sand[x, y];
+
+
+ //if waterdepth >0 then sand > elev and grain (at a rate)
+ //then also reduce sand 2 by same amount transferred.
+
+
+
+ double tempsandvol = sand_diff;// amount to be removed from sand2...
+
+ // now has to reduce sand vol..
+ double sand2tot = 0;
+ int sand2num = 0;
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ if (sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] > 0)
+ {
+ sand2tot += sand2[(x * dune_mult) - x2, (y * dune_mult) - y2];
+ sand2num++;
+ }
+
+ }
+ }
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ if (sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] > 0)
+ {
+ sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] -= (tempsandvol * dune_mult * dune_mult) *
+ (sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] / sand2tot);
+
+ }
+
+ }
+ }
+ }
+
+ elev[x, y] -= sand[x, y];
+
+ // check to add to sand from grain (if no water)
+ // if so then update sand and sand2 (and elev if subtracting from grain and
+ // adding to sand
+
+ if (water_depth[x, y] < water_depth_erosion_threshold)
+ {
+ if (elev[x, y] - init_elevs[x, y] > 0)
+ {
+ double tempslabdepth = elev[x, y] - init_elevs[x, y];
+ //if (tempslabdepth < slabdepth) tempslabdepth = 0;
+ if (tempslabdepth > slabdepth) tempslabdepth = slabdepth;
+ sand[x, y] += tempslabdepth;
+ elev[x, y] -= tempslabdepth;
+
+ // now also update sand2 values... averaged across cell.
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] += tempslabdepth;
+ }
+ }
+
+ }
+
+ }
+
+ //update elev2 from elev
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ elev2[(x * dune_mult) - x2, (y * dune_mult) - y2] = elev[x, y];
+ }
+ }
+
+ }
+ }
+
+ /////////////////////////////////////////////////////////////
+ // adding sand part
+ /////////////////////////////////////////////////////////////
+
+ //if (Math.IEEERemainder((int)(cycle / 60000), 2) == 0)
+ //if (Math.IEEERemainder((int)(cycle), 2) == 0)
+
+ for (x = 50; x < (xmax) * dune_mult * fractiondune; x++)
+ {
+ //if(Math.IEEERemainder(Math.Abs(x/50)-1,3)==0)sand2[x, 1] = initial_sand_depth;
+ sand2[xr.Next(50, (xmax * dune_mult)), 1] += number_slabs_per_col;
+
+ }
+
+ /////////////////////////////////////////////////////////////
+ // end of adding sand code ///
+ /////////////////////////////////////////////////////////////
+
+
+ // check everywhere for sand landslides
+ for (x = 1; x <= xmax*dune_mult; x++)
+ {
+ for (y = 1; y <= ymax*dune_mult; y++)
+ {
+ slide_4(x, y);
+ }
+ }
+
+
+ for (n = 1; n <= fractiondune * (xmax * dune_mult) * (ymax * dune_mult); n++)
+ {
+
+ // creating random x and y co-ords to check...
+ x = xr.Next(1, (xmax*dune_mult) + 1);
+ y = xr.Next(1, (ymax*dune_mult) + 1);
+ prob = 100;
+ counter1 = 0;
+ flag = 1;
+
+ //if (sand2[x, y] >= slabdepth)
+ if (sand2[x, y] >= slabdepth && water_depth[Math.Abs(x / dune_mult), Math.Abs(y / dune_mult)] < water_depth_erosion_threshold)
+ {
+ // to see if should be entrained or not...
+ for (t = 1; t <= checkup; t++)
+ {
+ ytemp = y - t;
+ if(dune_recirculate==1 && ytemp < 1) ytemp = (ymax * dune_mult) + ytemp;
+ if (dune_recirculate == 0 && ytemp < 1) ytemp = 1;
+ if (((sand2[x, ytemp] + elev2[x, ytemp]) - (sand2[x, y] + elev2[x, y])) > (factor * (t)))
+ {
+ flag = 0;
+ t = checkup;
+ }
+
+ }
+
+
+ // now having decided it can be eroded, now see if it can be moved
+ if (flag == 1)
+ {
+ // while random number greater than prob then move on one if poss..
+ while (prob > dep_probability)
+ {
+ counter1++; // shift down one cell...
+ prob = xr.Next(1, 100); // new random number
+
+ //// try moving left and right??
+ //if (xr.Next(1, 100) > 70) x++;
+ //if (xr.Next(1, 100) > 70) x--;
+ //if (x < 1) x = (xmax * dune_mult);
+ //if (x > (xmax * dune_mult)) x = 1;
+
+
+ // now adding in the downsrtream offset if needed done by ensuring prob is 100
+ if (counter1 < downstream_offset) prob = 100; // break;
+
+ // change comments on below lines if you want water to stop sand movement or not
+ //if (water_depth[Math.Abs(x/dune_mult),Math.Abs((y)/dune_mult)] >= water_depth_erosion_threshold) prob = 0;
+ if (water_depth[Math.Abs(x / dune_mult), Math.Abs((y + Math.Abs(counter1 / dune_mult)) / dune_mult)] >= water_depth_erosion_threshold) prob = 0;
+
+ // seeing if in shadow or not...
+ for (t = 1; t < checkup; t++)
+ {
+ ytemp = (y + counter1) - t;
+ ytemp2 = (y + counter1);
+ if (dune_recirculate == 0 && ytemp < 1) ytemp = 1;
+ if (dune_recirculate == 1 && ytemp < 1) ytemp = (ymax * dune_mult) + ytemp;
+ if (dune_recirculate == 1)
+ {
+ if (ytemp > (ymax * dune_mult)) ytemp = 0 + (ytemp - (ymax * dune_mult));
+ if (ytemp2 > (ymax * dune_mult)) ytemp2 = 0 + (ytemp2 - (ymax * dune_mult));
+ }
+ if (((sand2[x, ytemp] + elev2[x, ytemp]) - (sand2[x, ytemp2] + elev2[x, ytemp2])) > (factor * t))
+ {
+ t = checkup;
+ prob = 0;
+ }
+
+ }
+ //if (elev[x, ytemp - 1] - elev[x, y] > factor) break;
+ }
+
+ double tempmax = sand2[x, y];
+ if (tempmax < 0) tempmax = 0;
+
+
+
+ // now erode sand if there is enough there in the sand layer
+ if (slabdepth < tempmax) tempmax = slabdepth;
+ if (tempmax < 0) tempmax = 0;
+ sand2[x, y] -= tempmax;
+ // do landslides for just that cell and ones around.
+ slide_4(x, y);
+
+ ytemp = y + counter1;
+
+ if (dune_recirculate == 1)
+ {
+ if (ytemp > (ymax * dune_mult))
+ {
+ ytemp = ytemp - (ymax * dune_mult);
+ sand_out += (tempmax * (DX / dune_mult) * (DX / dune_mult));
+ }
+ }
+
+ // now deposit sand
+
+ if (ytemp <= ymax * dune_mult)
+ {
+ sand2[x, ytemp] += tempmax;
+
+ // do landslides for just that cell and ones around.
+ slide_4(x, ytemp);
+ }
+ if(ytemp > (ymax*dune_mult))sand_out+=(tempmax*(DX/dune_mult)*(DX/dune_mult));
+
+ }
+ }
+
+ }
+
+
+
+
+ // now do landslides everywhere 5 times... just to make sure..
+ for (t = 1; t <= 5; t++)
+ {
+ for (x = 1; x <= xmax*dune_mult; x++)
+ {
+ for (y = 1; y <= ymax*dune_mult; y++)
+ {
+ if(sand2[x,y]>0)slide_4(x, y);
+ }
+ }
+ }
+
+ // sand = mean sand2
+
+ for (x = 1; x <= (xmax); x++)
+ {
+ for (y = 1; y <= (ymax); y++)
+ {
+
+ double sandsum = 0;
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ // this next line is needed to remove all sand from the far LH and RH cells
+ if (x == xmax) sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] = 0;
+ if (x == 1) sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] = 0;
+
+ if (sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] > 0)
+ {
+ sandsum += sand2[(x * dune_mult) - x2, (y * dune_mult) - y2];
+ }
+
+ }
+ }
+
+
+ sand[x,y] = sandsum/(dune_mult*dune_mult);
+
+ double newelev = elev[x, y] + sand[x, y];
+ elev[x, y] = oldelev[x, y];
+ elev_diff[x, y] = oldelev[x, y] - newelev;
+
+ }
+
+ }
+
+
+
+ }
+
+ void calc_hillshade() //
+ {
+ //Local variables
+ int x, y;
+
+ double slopemax;
+ double slope;
+ int slopetot;
+ double local_Illumination;
+
+ // Initialize Hillshade Paramaters
+ double azimuth = 315 * (3.141592654/180); // Default of 315 degrees converted to radians
+ double altitude = 45 * (3.141592654/180); // Default of 45 degrees converted to radians
+
+
+
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ if(elev[x,y] != -9999)
+ {
+ slopemax=0.0;
+ slope=0.0;
+ slopetot=0;
+
+ // Do slope analysis and Aspect Calculation first
+ if(elev[x,y] > elev[x,y-1] && elev[x,y-1] != -9999) // North 0
+ {
+ slope = Math.Pow((elev[x,y]-elev[x,y-1])/ root,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 0 * (3.141592654/180);
+ }
+
+ }
+ if(elev[x,y] > elev[x+1,y-1] && elev[x+1,y-1] != -9999) // Northeast 45
+ {
+ slope = Math.Pow((elev[x,y]-elev[x+1,y-1])/ DX,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 45 * (3.141592654/180);
+ }
+ }
+ if(elev[x,y] > elev[x+1,y] && elev[x+1,y] != -9999) // East 90
+ {
+ slope = Math.Pow((elev[x,y]-elev[x+1,y])/ root,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 90 * (3.141592654/180);
+ }
+ }
+ if(elev[x,y] > elev[x+1,y+1] && elev[x+1,y+1] != -9999) // SouthEast 135
+ {
+ slope = Math.Pow((elev[x,y]-elev[x+1,y+1])/ root,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 135 * (3.141592654/180);
+ }
+
+ }
+ if(elev[x,y] > elev[x,y+1] && elev[x,y+1] != -9999) // South 180
+ {
+ slope = Math.Pow((elev[x,y]-elev[x,y+1])/ DX,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 180 * (3.141592654/180);
+ }
+ }
+ if(elev[x,y] > elev[x-1,y+1] && elev[x-1,y+1] != -9999) // SouthWest 225
+ {
+ slope = Math.Pow((elev[x,y]-elev[x-1,y+1])/ root,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 225 * (3.141592654/180);
+ }
+ }
+ if(elev[x,y] > elev[x-1,y] && elev[x-1,y] != -9999) // West 270
+ {
+ slope = Math.Pow((elev[x,y]-elev[x-1,y])/ root,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 270;
+ }
+ }
+ if(elev[x,y] > elev[x-1,y-1] && elev[x-1,y-1] != -9999) // Northwest 315
+ {
+ slope = Math.Pow((elev[x,y]-elev[x-1,y-1])/ DX,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 315 * (3.141592654/180);
+ }
+ }
+
+ if (slope > 0) slopeAnalysis[x,y] = slopemax;// Tom's: (slope/slopetot); ?
+
+ // Convert slope to radians
+ slopeAnalysis[x,y] = System.Math.Atan(slopeAnalysis[x,y]);
+
+
+ // Do Hillshade Calculation
+ local_Illumination = 255 * ((System.Math.Cos(azimuth)
+ * System.Math.Sin(slopeAnalysis[x,y])
+ * System.Math.Cos(aspect[x,y] - azimuth))
+ + (System.Math.Sin(altitude)
+ * System.Math.Cos(slopeAnalysis[x,y])));
+
+ hillshade[x,y] = System.Math.Abs(local_Illumination);
+ }
+ }
+ }
+
+ } // End calc_hillshade()
+
+ void Color_HSVtoRGB() //
+ {
+ // Convert HSV to RGB.
+ // Made this a seperate function as it is called multiple times in drawwater().
+
+ if (sat == 0)
+ {
+ // If sat is 0, all colors are the same.
+ // This is some flavor of gray.
+ red = val;
+ green = val;
+ blue = val;
+ }
+ else
+ {
+ double pFactor;
+ double qFactor;
+ double tFactor;
+
+ double fractionalSector;
+ int sectorNumber;
+ double sectorPos;
+
+ // The color wheel consists of six 60 degree sectors.
+ // Figure out which sector you are in.
+ sectorPos = hue / 60;
+ sectorNumber = (int)(Math.Floor(sectorPos));
+
+ // get the fractional part of the sector.
+ // That is, how many degrees into the sector are you?
+ fractionalSector = sectorPos - sectorNumber;
+
+ // Calculate values for the three axes
+ // of the color.
+ pFactor = val * (1 - sat);
+ qFactor = val * (1 - (sat * fractionalSector));
+ tFactor = val * (1 - (sat * (1 - fractionalSector)));
+
+ // Assign the fractional colors to r, g, and b based on the sector the angle is in.
+ switch (sectorNumber)
+ {
+ case 0:
+ red = val;
+ green = tFactor;
+ blue = pFactor;
+ break;
+ case 1:
+ red = qFactor;
+ green = val;
+ blue = pFactor;
+ break;
+ case 2:
+ red = pFactor;
+ green = val;
+ blue = tFactor;
+ break;
+ case 3:
+ red = pFactor;
+ green = qFactor;
+ blue = val;
+ break;
+ case 4:
+ red = tFactor;
+ green = pFactor;
+ blue = val;
+ break;
+ case 5:
+ red = val;
+ green = pFactor;
+ blue = qFactor;
+ break;
+ }
+ }
+ }
+
+ void drawwater(System.Drawing.Graphics graphics)//
+ {
+ Graphics objGraphics;
+ objGraphics = Graphics.FromImage(m_objDrawingSurface);
+ objGraphics.Clear(SystemColors.Control);
+
+ int x, y, z, tot;
+ int redcol = 0, greencol = 0, bluecol = 0, alphacol = 255;
+ int t=0;
+ double tot_max, tomsedi = 0;
+
+
+ // load background image....
+ //try
+ //{
+ // Image tom1 = Image.FromFile(@"img.png");
+ // objGraphics.DrawImage(tom1, 0, 0, xmax * graphics_scale, ymax * graphics_scale);
+ //}
+ //catch
+ //{
+ //}
+
+
+ // Set Graphics Display Size
+ if (xmax <= 0) xmax = 1;
+
+ //set scaling of graphics - so X bmp pixels to every model pixel.
+ t = graphics_scale;
+
+ // These loop through the entire grid
+ // DEM
+ if (menuItem30.Checked == true)
+ {
+ double zDEM;
+ double zCalc, zMin = 100000.0, zMax = -9990.0, zRange, hsMin = 0, hsMax = 255, hsRange, hs;
+ double valMin = 0.0;
+ double valMax = 1.0;
+
+
+
+ calc_hillshade(); // Call up routine
+
+ // First, find max, min and range of DEM and Hillshade
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ zCalc = elev[x,y];
+ if(zCalc != -9999)
+ {
+ if (zCalc < zMin) zMin = zCalc;
+ if (zCalc > zMax) zMax = zCalc;
+ hs = hillshade[x,y];
+ if (hs < hsMin) hsMin = hs;
+ if (hs > hsMax) hsMax = hs;
+ }
+ }
+ }
+ zRange = zMax - zMin;
+ hsRange = hsMax - hsMin;
+
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ if (elev[x,y] > -9999.0)
+ {
+ // HILLSHADE: Draw first underneath
+
+ // set gray scale intensity
+ hue = 360.0; // hue doesn't matter for gray shade
+ sat = 0.0; // ensures gray shade
+ valMin = 0.0;
+ valMax = 1.0;
+ val = ((hillshade[x,y]/255) * (valMax - valMin)) + valMin; // uses maximum contrast
+// val = (((hillshade[x,y] - hsMin)/(zRange)) * (valMax - valMin)) + valMin; // lower contrast
+
+ Color_HSVtoRGB(); // Call up color conversion
+ redcol = System.Convert.ToInt32(red*255);
+ greencol = System.Convert.ToInt32(green*255);
+ bluecol = System.Convert.ToInt32(blue*255);
+ alphacol = 255;
+
+ SolidBrush brush2 = new SolidBrush(Color.FromArgb(alphacol,redcol,greencol,bluecol));
+ objGraphics.FillRectangle(brush2,(x-1)*t,(y-1)*t,t,t);
+
+
+ // DEM
+ zDEM = (elev[x,y]);
+ // Sets hue based on desired color range (in decimal degrees; max 360)
+ double hueMin = 30.0;
+ double hueMax = 85.0;
+// hue = (((zDEM - zMin)/(zRange)) * (hueMax - hueMin)) + hueMin; // Forward
+ hue = hueMax -(((zDEM - zMin)/(zRange)) * (hueMax - hueMin)); // Reverse
+
+ // Set saturation based on desired range
+ double satMin = 0.50;
+ double satMax = 0.95;
+ sat = (((zDEM - zMin)/(zRange)) * (satMax - satMin)) + satMin;
+// sat = 0; // Use for grey-scale DEM only!
+
+ // Set value based on desired range
+ valMin = 0.40;
+ valMax = 0.80;
+ val = (((zDEM - zMin)/(zRange)) * (valMax - valMin)) + valMin;
+// val = valMax - (((zDEM - zMin)/(zRange)) * (valMax - valMin));
+
+ Color_HSVtoRGB(); // Call up color conversion
+ redcol = System.Convert.ToInt32(red*255);
+ greencol = System.Convert.ToInt32(green*255);
+ bluecol = System.Convert.ToInt32(blue*255);
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ alphacol = 125;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(alphacol,redcol,greencol,bluecol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ } // Close of Entire Grid Mask
+ } // Close of Column Loop
+ } // Close of Row Loop
+
+ } // Close of DEM check box (menuitem34)
+
+
+ // Find Ranges for those in Active Area
+ // Water Depth Range:
+ double wdCalc, wdMin = 100000.0, wdMax =-10.0, wdRange;
+
+ // Find Water Depth Ranges
+ for(x=1;x0)
+ {
+ if(wdCalcwdMax)wdMax=wdCalc;
+ }
+ }
+ }
+ wdRange = wdMax - wdMin;
+
+
+
+ // All these loop through just the 'Active Area'
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ if (1>0) // Index masks out so only 'active cells' shown was if(index[x,y]>-9999)
+ {
+ // Water Depth
+ if(menuItem3.Checked==true&&water_depth[x,y]>water_depth_erosion_threshold)//MIN_Q)//||discharge[x,y]>0)
+ {
+
+ z=0;
+ if (comboBox1.Text == "water depth")
+ {
+ z = (int)(water_depth[x, y] * (256 / wdRange));
+ }
+ else
+ {
+ z = (int)(water_depth[x, y] * 128);
+ }
+
+ if(z<0)z=0;
+ if(z>254)z=254;
+
+ greencol=255-z;
+ redcol=z;
+ bluecol = 255;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ alphacol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(alphacol,redcol,greencol,bluecol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+
+ // DoD Erosion/ Depostion
+ if(menuItem4.Checked==true)
+ {
+ tomsedi+=(init_elevs[x,y]-elev[x,y]);
+ tomsedi-=(Vsusptot[x,y]);
+ if(init_elevs[x,y]-elev[x,y]>=0.001) //eroding
+ {
+ if (comboBox1.Text == "erosion/dep")
+ {
+ z = (int)((init_elevs[x, y] - elev[x, y]) * 256 * contrastMultiplier);
+ }
+ else
+ {
+ z = (int)((init_elevs[x, y] - elev[x, y]) * 64);
+ }
+ if(z<0)z=0;
+ if(z>254)z=254;
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+ // red green blue
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(255,greencol,greencol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+
+ if(init_elevs[x,y]-elev[x,y]<=-0.001) //depositing
+ {
+ z=(int)((elev[x,y]-init_elevs[x,y])*64);
+ if(z<0)z=0;
+ if(z>254)z=254;
+ greencol=z;
+ redcol=255-z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,255,redcol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+
+ // if(init_elevs[x,y]-elev[x,y]>0.0001&&init_elevs[x,y]-elev[x,y]<0.1)graphics.DrawRectangle(Pens.Yellow,x*t,y*t,t,t);
+ // if(init_elevs[x,y]-elev[x,y]>0.1&&init_elevs[x,y]-elev[x,y]<0.2)graphics.DrawRectangle(Pens.Orange,x*t,y*t,t,t);
+ // if(init_elevs[x,y]-elev[x,y]>0.2&&init_elevs[x,y]-elev[x,y]<10)graphics.DrawRectangle(Pens.Red,x*t,y*t,t,t);
+ // if(init_elevs[x,y]-elev[x,y]<-0.0001&&init_elevs[x,y]-elev[x,y]>-0.1)graphics.DrawRectangle(Pens.LightGreen,x*t,y*t,t,t);
+ // if(init_elevs[x,y]-elev[x,y]<-0.1&&init_elevs[x,y]-elev[x,y]>-0.2)graphics.DrawRectangle(Pens.Green,x*t,y*t,t,t);
+ // if(init_elevs[x,y]-elev[x,y]<-0.2&&init_elevs[x,y]-elev[x,y]>-10)graphics.DrawRectangle(Pens.DarkGreen,x*t,y*t,t,t);
+
+
+ }
+
+ if(menuItem5.Checked==true)
+ {
+ //if(water_depth[x,y]>water_depth_erosion_threshold)//if(index[x,y]!=-9999)
+ {
+ z=(int)(veg[x,y,1]*256);
+
+ //z = rfarea[x, y] * 120;
+ //z = (int)(rfarea[x, y] * 12.6);
+
+ //z = (int)(Vsusptot[x, y] * 20050);
+ //z = (int)(discharge[x,y] * 50.6);
+ //z = (int)(edge2[x,y] * 1000);
+ //z = (int)(Math.Abs(mean_bed_slope (x, y)) * 50 * 256);
+
+ if (z < 0) z = 0;
+ if (z > 254) z = 254;
+ greencol = z;
+ redcol = 255 - z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol, 255, redcol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+ }
+
+
+ // now to draw second teir
+
+
+ if(menuItem7.Checked==true&&edge[x,y]>-9999)
+ {
+
+ if(edge[x,y]>=0) //Outside
+ {
+ z=0;
+ z=(int)((edge[x,y])*20000);
+
+ if(z<0)z=0;
+// z=(int)((2.131*Math.Pow(edge[x,y],-1.0794))*DX);
+// z=254-z;
+ if(z>254)z=254;
+ if(z<0)z=0;
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+ // red green blue
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(255,greencol,greencol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+
+ if(edge[x,y]<0) //inside
+ {
+ z=(int)((0-edge[x,y])*50);
+ if(z<0)z=0;
+ if(z>254)z=254;
+// z=(int)((2.131*Math.Pow(edge[x,y],-1.0794))*DX);
+// z=254+z;
+// if(z>254)z=254;
+// if(z<0)z=0;
+ greencol=z;
+ redcol=255-z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,255,redcol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+
+
+ }
+
+ if(menuItem8.Checked==true)
+
+
+ {
+
+ if(water_depth[x,y]>water_depth_erosion_threshold)
+ {
+ if (comboBox1.Text == "Bed sheer stress")
+ {
+ z = (int)(contrastMultiplier * 5 * Tau[x,y]);
+ }
+ else
+ {
+ z = (int)(5 * Tau[x,y]);
+ //z = (int)(Tau[x, y] * (4));
+ }
+
+ if(z<0)z=0;
+ if(z>254)z=254;
+ //if(z>100)z=254;
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,greencol,255));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+
+ }
+
+ // D50
+ if(menuItem9.Checked==true)
+ {
+ if(index[x,y]!=-9999)
+ {
+ if (comboBox1.Text == "grainsize")
+ {
+ tot_max = d50(index[x, y]) * 2000*contrastMultiplier;
+ }
+ else
+ {
+ tot_max = d50(index[x, y]) * 2000;
+ }
+ //Console.WriteLine((Convert.ToString(tot_max)));
+
+ tot=(int)tot_max;
+ if(tot>255)tot=255;
+ if(tot<0)tot=0;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(255-(tot*1),255-(tot*1),255-(tot*1)));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+ }
+
+
+
+ // area drained
+ if(menuItem26.Checked==true)
+ {
+ if(area[x,y]!=-9999)
+ {
+ z=(int)area[x,y];
+
+
+ if(z<0)z=0;
+ if(z>254)z=254;
+
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,greencol,255));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+ }
+
+ // Suspended Sediment Concentration
+ if(menuItem27.Checked==true)
+ {
+ if(index[x,y]!=-9999)
+ {
+ if (Vsusptot[x,y] > 0.0)
+ {
+ if (comboBox1.Text == "susp conc")
+ {
+ z = (int)(Vsusptot[x, y] * 25600*contrastMultiplier);
+ }
+ else
+ {
+ z = (int)(Vsusptot[x, y] * 25600);
+ }
+ if(z<0)z=0;
+ if(z>254)z=254;
+
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,greencol,255));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+ }
+ }
+
+ // Soil depth
+ if(menuItem28.Checked==true)
+ {
+ if(elev[x,y]>-9999)
+ {
+
+ if (comboBox1.Text == "soildepth")
+ {
+ z = (int)((elev[x, y]-bedrock[x,y]) * 2500 * contrastMultiplier);
+ }
+ else
+ {
+ z = (int)((elev[x, y] - bedrock[x, y]) * 2500);
+ }
+ if(z<0)z=0;
+ if(z>254)z=254;
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,greencol,255));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+ }
+
+ // Flow Velocity
+ if (menuItem31.Checked == true) //
+ {
+ if (index[x,y] != -9999)
+ {
+ if (water_depth[x,y]>water_depth_erosion_threshold)
+ {
+ z=0;
+ if (comboBox1.Text == "flow velocity")
+ {
+ z = (int)((Vel[x,y]) * 125 * contrastMultiplier);
+ }
+ else
+ {
+ z = (int)((Vel[x, y]) * 125);
+ }
+ //if(yyy>0.25)z=254;
+ if (z < 0) z = 0;
+ if (z > 254) z = 254;
+ greencol = 255-z;
+ redcol = z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,greencol,255));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+ }
+ }
+
+
+ } // Close of nodata check for 'active' grid only
+ } // Close of Collumn Loop
+ } // Close of Row Loop
+
+
+ this.QsStatusPanel.Text=string.Format("Qs = {0:F8}",tomsedi*DX*DX);
+
+ objGraphics.Dispose();
+ zoomPanImageBox1.Image = m_objDrawingSurface;
+
+ } // Close of drawwater() //
+
+ double erode(double mult_factor)
+ {
+ double rho = 1000.0;
+ //double gravity = 9.8;
+ double tempbmax = 0;
+
+ double[] gtot2;
+
+ gtot2 = new Double[20];
+
+ for (int n = 0; n <= G_MAX; n++)
+ {
+ gtot2[n] = 0;
+ }
+
+ time_factor = time_factor * 1.5;
+ if (time_factor > max_time_step) time_factor = max_time_step;
+
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax, options, delegate (int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+ // zero vels.
+ Vel[x, y] = 0;
+ Tau[x, y] = 0;
+ erodetot[x, y] = 0;
+ erodetot3[x, y] = 0;
+ temp_elev[x, y] = 0;
+
+ for (int n = 0; n < G_MAX; n++)
+ {
+ sr[x, y, n] = 0;
+ sl[x, y, n] = 0;
+ su[x, y, n] = 0;
+ sd[x, y, n] = 0;
+ }
+ ss[x, y] = 0;
+
+
+ if (water_depth[x, y] > water_depth_erosion_threshold)
+ {
+ double veltot = 0;
+ double vel = 0;
+ double qtot = 0;
+ double tau = 0;
+ double velnum = 0;
+ double slopetot = 0;
+
+
+
+ // add spatial mannings here
+ double temp_mannings = mannings;
+ if (SpatVarManningsCheckbox.Checked == true) temp_mannings = spat_var_mannings[x, y];
+
+ // check to see if index for that cell...
+ if (index[x, y] == -9999) addGS(x, y);
+
+ // now tot up velocity directions, velocities and edge directions.
+ for (int p = 1; p <= 8; p += 2)
+ {
+ int x2 = x + deltaX[p];
+ int y2 = y + deltaY[p];
+ if (water_depth[x2, y2] > water_depth_erosion_threshold)
+ {
+
+ if (vel_dir[x, y, p] > 0)
+ {
+ vel = vel_dir[x, y, p];
+ if (vel > max_vel)
+ {
+ this.tempStatusPanel.Text = Convert.ToString(x) + " " + Convert.ToString(y) + " " + Convert.ToString(vel);
+ vel = max_vel; // if vel too high cut it
+ }
+
+ veltot += vel * vel;
+ velnum++;
+ qtot += (vel * vel);
+ //slopetot += ((elev[x, y] - elev[x2, y2]) / DX);
+ slopetot += ((elev[x, y] - elev[x2, y2]) / DX) * vel;
+ }
+ }
+ }
+
+ if (qtot > 0)
+ {
+ vel = (Math.Sqrt(qtot));
+ Vel[x, y] = vel;
+ if (vel < 0)
+ {
+ this.tempStatusPanel.Text = Convert.ToString(x) + " " + Convert.ToString(y) + " " + Convert.ToString(vel);
+ }
+ if (vel > max_vel) vel = max_vel; // if vel too high cut it
+ double ci = gravity * (temp_mannings * temp_mannings) * Math.Pow(water_depth[x, y], -0.33);
+ //tauvel = 1000 * ci * vel * vel;
+ if (slopetot > 0) slopetot = 0;
+ //tauvel = 1000 * ci * vel * vel * (1 + (1 * (slopetot)));
+ tau = 1000 * ci * vel * vel * (1 + (1 * (slopetot / vel)));
+ Tau[x, y] = tau;
+ }
+ }
+ }
+ });
+
+
+ int counter2 = 0;
+ do
+ {
+ counter2++;
+ tempbmax = 0;
+ double[] tempbmax2;
+ tempbmax2 = new Double[ymax + 2];
+
+ //var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax, options, delegate (int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+ // now do some erosion
+ if (Tau[x, y] > 0)
+ {
+ double d_50 = 0;
+ double Fs = 0;
+ double Di = 0;
+ double graintot = 0;
+ double tau = Tau[x, y];
+ double temp_tau_ri = 0;
+ double U_star = 0;
+ double U_star_cubed = 0;
+
+ double[] temp_dist, tempdir;
+ tempdir = new Double[11]; // array that holds velocity directions temp - so they dont have to be calculated again
+ temp_dist = new Double[11]; // array that holds amount to be removed from cell in each grainsize
+
+ if (wilcock == 1)
+ {
+ d_50 = d50(index[x, y]);
+ if (d_50 < d1) d_50 = d1;
+ Fs = sand_fraction(index[x, y]);
+ for (int n = 1; n <= G_MAX; n++) graintot += (grain[index[x, y], n]);
+ temp_tau_ri = (0.021 + (0.015 * Math.Exp(-20 * Fs))) * (rho * gravity * d_50);
+ U_star = Math.Pow(tau / rho, 0.5);
+ U_star_cubed = U_star * U_star * U_star;
+ }
+ //////
+ double temptot1 = 0;
+
+ for (int n = 1; n <= G_MAX - 1; n++)
+ {
+
+ switch (n)
+ {
+ case 1: Di = d1; break;
+ case 2: Di = d2; break;
+ case 3: Di = d3; break;
+ case 4: Di = d4; break;
+ case 5: Di = d5; break;
+ case 6: Di = d6; break;
+ case 7: Di = d7; break;
+ case 8: Di = d8; break;
+ case 9: Di = d9; break;
+ }
+
+ // Wilcock and Crowe/Curran
+
+
+ if (wilcock == 1)
+ {
+ Double tau_ri = 0, Wi_star;
+ tau_ri = temp_tau_ri * Math.Pow((Di / d_50), (0.67 / (1 + Math.Exp(1.5 - (Di / d_50)))));
+ double Fi = grain[index[x, y], n] / graintot;
+
+ if ((tau / tau_ri) < 1.35)
+ {
+ Wi_star = 0.002 * Math.Pow(tau / tau_ri, 7.5);
+ }
+ else
+ {
+ Wi_star = 14 * Math.Pow(1 - (0.894 / Math.Pow(tau / tau_ri, 0.5)), 4.5);
+ }
+ //maybe should divide by DX as well..
+ temp_dist[n] = mult_factor * time_factor *
+ ((Fi * (U_star_cubed)) / ((2.65 - 1) * gravity)) * Wi_star / DX;
+ }
+ // Einstein sed tpt eqtn
+ if (einstein == 1)
+ {
+ // maybe should divide by DX as well..
+ temp_dist[n] = mult_factor * time_factor * (40 * Math.Pow((1 / (((2650 - 1000) * Di) / (tau / gravity))), 3))
+ / Math.Sqrt(1000 / ((2650 - 1000) * gravity * (Di * Di * Di))) / DX;
+ }
+
+ // Meyer-Peter_Muller set tpt eqtn https://en.m.wikipedia.org/wiki/Sediment_transport#Meyer-Peter_M.C3.BCller_and_derivatives
+ // here using Wiberg and Dungan 89 modification https://dx.doi.org/10.1061%2F%28ASCE%290733-9429%281989%29115%3A1%28101%29
+ if (meyer == 1)
+ {
+ double TauStar = tau / ((2650 - 1000) * gravity * Di);
+ if (TauStar > 0.047)
+ {
+ temp_dist[n] = mult_factor * time_factor * 9.64 * Math.Pow(TauStar, 0.166) * Math.Pow((TauStar - 0.047), 1.5);
+ }
+
+ }
+
+
+
+ //if (temp_dist[n] < 0.0000000000001) temp_dist[n] = 0;
+
+ // first check to see that theres not too little sediment in a cell to be entrained
+ if (temp_dist[n] > grain[index[x, y], n]) temp_dist[n] = grain[index[x, y], n];
+ // then check to see if this would make SS levels too high.. and if so reduce
+ if (isSuspended[n] && n == 1)
+ {
+ if ((temp_dist[n] + Vsusptot[x, y]) / water_depth[x, y] > Csuspmax)
+ {
+ //work out max amount of sediment that can be there (waterdepth * csuspmax) then subtract whats already there
+ // (Vsusptot) to leave what can be entrained. Check if < 0 after.
+ temp_dist[n] = (water_depth[x, y] * Csuspmax) - Vsusptot[x, y];
+ }
+ }
+ if (temp_dist[n] < 0) temp_dist[n] = 0;
+
+ // nwo placed here speeding up reduction of erode repeats.
+ temptot1 += temp_dist[n];
+
+ }
+
+
+ //check if this makes it below bedrock
+ if (elev[x, y] - temptot1 <= bedrock[x, y])
+ {
+ // now remove from proportion that can be eroded..
+ // we can do this as we have the prop (in temptot) that is there to be eroded.
+ double elevdiff = elev[x, y] - bedrock[x, y];
+ double temptot3 = temptot1;
+ temptot1 = 0;
+ for (int n = 1; n <= G_MAX - 1; n++)
+ {
+ if (elev[x, y] <= bedrock[x, y])
+ {
+ temp_dist[n] = 0;
+ }
+ else
+ {
+ temp_dist[n] = elevdiff * (temp_dist[n] / temptot3);
+ if (temp_dist[n] < 0) temp_dist[n] = 0;
+ }
+ temptot1 += temp_dist[n];
+ }
+
+ // here insert bedrock erosion routine?
+ if (tau > bedrock_erosion_threshold)
+ {
+ double amount = 0; // amount is amount of erosion into the bedrock.
+ amount = Math.Pow(bedrock_erosion_rate * tau, 1.5) * time_factor * mult_factor * 0.000000317; // las value to turn it into erosion per year (number of years per second)
+ bedrock[x, y] -= amount;
+ // now add amount of bedrock eroded into sediment proportions.
+ for (int n2 = 1; n2 <= G_MAX - 1; n2++)
+ {
+ grain[index[x, y], n2] += amount * dprop[n2];
+ }
+ }
+ }
+
+
+ // veg components
+ // here to erode the veg layer..
+ if (veg[x, y, 1] > 0 && tau > vegTauCrit)
+ {
+ // now to remove from veg layer..
+ veg[x, y, 1] -= mult_factor * time_factor * Math.Pow(tau - vegTauCrit, 0.5) * 0.00001;
+ if (veg[x, y, 1] < 0) veg[x, y, 1] = 0;
+ }
+
+ //// now to determine if movement should be restricted due to veg... (old method)
+ if (radioButton1.Checked && veg[x, y, 1] > 0.25)
+ {
+ // now checks if this removed from the cell would put it below the veg layer..
+ if (elev[x, y] - temptot1 <= veg[x, y, 0])
+ {
+ // now remove from proportion that can be eroded..
+ // we can do this as we have the prop (in temptot) that is there to be eroded.
+ double elevdiff = 0;
+ elevdiff = elev[x, y] - veg[x, y, 0];
+ if (elevdiff < 0) elevdiff = 0;
+ double temptot3 = temptot1;
+ temptot1 = 0;
+ for (int n = 1; n <= G_MAX - 1; n++)
+ {
+ temp_dist[n] = elevdiff * (temp_dist[n] / temptot3);
+ if (elev[x, y] <= veg[x, y, 0]) temp_dist[n] = 0;
+ temptot1 += temp_dist[n];
+ }
+ //temptot1 -= elevdiff;
+ if (temptot1 < 0) temptot1 = 0;
+
+ }
+ //tempStatusPanel.Text = Convert.ToString(1);
+ }
+
+ //// now to determine if movement should be restricted due to veg... (new method)
+ if (radioButton2.Checked && veg[x, y, 1] > 0.1)
+ {
+ temptot1 = 0;
+ for (int n = 1; n <= G_MAX - 1; n++)
+ {
+ temp_dist[n] *= 1 - (veg[x, y, 1] * (1 - veg_lat_restriction));
+ temptot1 += temp_dist[n];
+ }
+ //temptot1 -= elevdiff;
+ if (temptot1 < 0) temptot1 = 0;
+
+ //tempStatusPanel.Text = Convert.ToString(2);
+ }
+
+ if (temptot1 > tempbmax2[y]) tempbmax2[y] = temptot1;
+ //tempStatusPanel.Text = Convert.ToString(temptot1);
+
+ // now work out what portion of bedload has to go where...
+ // only allow actual transfer of sediment if there is flow in a direction - i.e. some sedeiment transport
+
+ // wonder if this part could be separately parallelised?
+ if (temptot1 > 0)
+ {
+ double temptot2 = 0;
+ double veltot = 0;
+ for (int p = 1; p <= 8; p += 2)
+ {
+ int x2 = x + deltaX[p];
+ int y2 = y + deltaY[p];
+ if (water_depth[x2, y2] > water_depth_erosion_threshold)
+ {
+ if (edge[x, y] > edge[x2, y2])
+ {
+ temptot2 += (edge[x, y] - edge[x2, y2]);
+ }
+
+ if (vel_dir[x, y, p] > 0)
+ {
+ // first work out velocities in each direction (for sedi distribution)
+ double vel = vel_dir[x, y, p];
+ tempdir[p] = vel * vel;
+ veltot += tempdir[p];
+ }
+ }
+ }
+
+
+ for (int p = 1; p <= 8; p += 2)
+ {
+ int x2 = x + deltaX[p];
+ int y2 = y + deltaY[p];
+
+
+
+ if (water_depth[x2, y2] > water_depth_erosion_threshold)
+ {
+ if (index[x2, y2] == -9999) addGS(x2, y2);
+ double factor = 0;
+
+ // vel slope
+ if (vel_dir[x, y, p] > 0)
+ {
+ factor += 0.75 * tempdir[p] / veltot;
+ }
+ // now for lateral gradient.
+ if (edge[x, y] > edge[x2, y2])
+ {
+ factor += 0.25 * ((edge[x, y] - edge[x2, y2]) / temptot2);
+ }
+
+ // now loop through grainsizes
+ for (int n = 1; n <= G_MAX - 1; n++)
+ {
+ if (temp_dist[n] > 0)
+ {
+ if (n == 1 && isSuspended[n])
+ {
+ // put amount entrained by ss in to ss[,]
+ ss[x, y] = temp_dist[n];
+ }
+ else
+ {
+ switch (p)
+ {
+ case 1: su[x, y, n] = temp_dist[n] * factor; break;
+ case 3: sr[x, y, n] = temp_dist[n] * factor; break;
+ case 5: sd[x, y, n] = temp_dist[n] * factor; break;
+ case 7: sl[x, y, n] = temp_dist[n] * factor; break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ });
+
+ // we have to do a reduction on tempbmax.
+ for (int y = 1; y <= ymax; y++) if (tempbmax2[y] > tempbmax) tempbmax = tempbmax2[y];
+
+ if (tempbmax > ERODEFACTOR)
+ {
+ time_factor *= (ERODEFACTOR / tempbmax) * 0.5;
+ }
+ } while(tempbmax > ERODEFACTOR);
+
+ //tempStatusPanel.Text = Convert.ToString(counter2);
+
+ //
+ // new temp erode array.
+
+
+ var options1 = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(2, ymax, options1, delegate(int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+
+ if (water_depth[x, y] > water_depth_erosion_threshold && x < xmax && x > 1)
+ {
+
+ if (index[x, y] == -9999) addGS(x, y);
+ for (int n = 1; n <= G_MAX-1; n++)
+ {
+ if (n == 1 && isSuspended[n])
+ {
+ // updating entrainment of SS
+ Vsusptot[x, y] += ss[x, y];
+ grain[index[x, y], n] -= ss[x, y];
+ erodetot[x, y] -= ss[x, y];
+
+ // this next part is unusual. You have to stop susp sed deposition on the input cells, otherwies
+ // it drops sediment out, but cannot entrain as ss levels in input are too high leading to
+ // little mountains of sediment. This means a new array in order to check whether a cell is an
+ // input point or not..
+ if (!inputpointsarray[x, y])
+ {
+ // now calc ss to be dropped
+ double coeff = (fallVelocity[n] * time_factor * mult_factor) / water_depth[x, y];
+ if (coeff > 1) coeff = 1;
+ double Vpdrop = coeff * Vsusptot[x, y];
+ if (Vpdrop > 0.001) Vpdrop = 0.001; //only allow 1mm to be deposited per iteration
+ grain[index[x, y], n] += Vpdrop;
+ erodetot[x, y] += Vpdrop;
+ Vsusptot[x, y] -= Vpdrop;
+ //if (Vsusptot[x, y] < 0) Vsusptot[x, y] = 0; NOT this line.
+ }
+ }
+ else
+ {
+ //else update grain and elevations for bedload.
+ double val1 = (su[x, y, n] + sr[x, y, n] + sd[x, y, n] + sl[x, y, n]);
+ double val2 = (su[x, y + 1, n] + sd[x, y - 1, n] + sl[x + 1, y, n] + sr[x - 1, y, n]);
+ grain[index[x, y], n] += val2 - val1;
+ erodetot[x, y] += val2 - val1;
+ erodetot3[x, y] += val1;
+ }
+ }
+
+ temp_elev[x, y] += erodetot[x, y];
+ if (erodetot[x, y] != 0) sort_active(x, y);
+
+ //
+ // test lateral code...
+ //
+
+ if (erodetot3[x,y] > 0)
+ {
+
+ if (elev[x - 1, y] > elev[x, y] && x > 2)
+ {
+ double amt = 0;
+
+ if (water_depth[x - 1, y] < water_depth_erosion_threshold)
+ amt = mult_factor * lateral_constant * Tau[x, y] * edge[x - 1, y] * time_factor /DX;
+ else amt = bed_proportion * erodetot3[x, y] * (elev[x - 1, y] - elev[x, y]) / DX * 0.1;
+
+ if (amt > 0)
+ {
+ amt *= 1 - (veg[x - 1, y, 1] * (1 - veg_lat_restriction));
+ if ((elev[x - 1, y] - amt) < bedrock[x - 1, y] || x - 1 == 1) amt = 0;
+ if (amt > ERODEFACTOR * 0.1) amt = ERODEFACTOR * 0.1;
+ //if (amt > erodetot2 / 2) amt = erodetot2 / 2;
+ temp_elev[x, y] += amt;
+ temp_elev[x - 1, y] -= amt;
+ slide_GS(x - 1, y, amt, x, y);
+ }
+ }
+ if (elev[x + 1, y] > elev[x, y] && x < xmax-1)
+ {
+ double amt = 0;
+ if (water_depth[x + 1, y] < water_depth_erosion_threshold)
+ amt = mult_factor * lateral_constant * Tau[x, y] * edge[x + 1, y] * time_factor / DX;
+ else amt = bed_proportion * erodetot3[x, y] * (elev[x + 1, y] - elev[x, y]) / DX * 0.1;
+
+ if (amt > 0)
+ {
+ amt *= 1 - (veg[x + 1, y, 1] * (1 - veg_lat_restriction));
+ if ((elev[x + 1, y] - amt) < bedrock[x + 1, y] || x + 1 == xmax) amt = 0;
+ if (amt > ERODEFACTOR * 0.1) amt = ERODEFACTOR * 0.1;
+ //if (amt > erodetot2 /2) amt = erodetot2 /2;
+ temp_elev[x, y] += amt;
+ temp_elev[x + 1, y] -= amt;
+ slide_GS(x + 1, y, amt, x, y);
+ }
+ }
+
+
+ }
+ }
+ }
+ });
+
+ Parallel.For(2, xmax, options1, delegate (int x)
+ {
+ int inc = 1;
+ while (cross_scan[x, inc] > 0)
+ {
+ int y = cross_scan[x, inc];
+ inc++;
+
+ {
+
+ if (erodetot3[x, y] > 0)
+ {
+ if (elev[x, y - 1] > elev[x, y])
+ {
+ double amt = 0;
+ if (water_depth[x, y - 1] < water_depth_erosion_threshold)
+ amt = mult_factor * lateral_constant * Tau[x, y] * edge[x, y - 1] * time_factor / DX;
+ else amt = bed_proportion * erodetot3[x, y] * (elev[x, y - 1] - elev[x, y]) / DX * 0.1;
+
+ if (amt > 0)
+ {
+ amt *= 1 - (veg[x, y - 1, 1] * (1 - veg_lat_restriction));
+ if ((elev[x, y - 1] - amt) < bedrock[x, y - 1] || y - 1 == 1) amt = 0;
+ if (amt > ERODEFACTOR * 0.1) amt = ERODEFACTOR * 0.1;
+ //if (amt > erodetot2 / 2) amt = erodetot2 / 2;
+ temp_elev[x, y] += amt;
+ temp_elev[x, y - 1] -= amt;
+ slide_GS(x, y - 1, amt, x, y);
+ }
+ }
+ if (elev[x, y + 1] > elev[x, y])
+ {
+ double amt = 0;
+ if (water_depth[x, y + 1] < water_depth_erosion_threshold)
+ amt = amt = mult_factor * lateral_constant * Tau[x, y] * edge[x, y + 1] * time_factor / DX;
+ else amt = bed_proportion * erodetot3[x, y] * (elev[x, y + 1] - elev[x, y]) / DX * 0.1;
+
+ if (amt > 0)
+ {
+ amt *= 1 - (veg[x, y + 1, 1] * (1 - veg_lat_restriction));
+ if ((elev[x, y + 1] - amt) < bedrock[x, y + 1] || y + 1 == ymax) amt = 0;
+ if (amt > ERODEFACTOR * 0.1) amt = ERODEFACTOR * 0.1;
+ //if (amt > erodetot2 / 2) amt = erodetot2 / 2;
+ temp_elev[x, y] += amt;
+ temp_elev[x, y + 1] -= amt;
+ slide_GS(x, y + 1, amt, x, y);
+ }
+ }
+
+
+ }
+ }
+ }
+ });
+
+ Parallel.For(2, ymax, options, delegate (int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+ if(x>1 && x< xmax) elev[x, y] += temp_elev[x, y];
+
+ }
+ });
+
+
+ // now calculate sediment outputs from all four edges...
+ for (int y = 2; y < ymax; y++)
+ {
+ if (water_depth[xmax, y] > water_depth_erosion_threshold || Vsusptot[xmax, y] > 0)
+ {
+ for (int n = 1; n <= G_MAX-1; n++)
+ {
+ if (isSuspended[n])
+ {
+ gtot2[n] += Vsusptot[xmax, y];
+ Vsusptot[xmax, y] = 0;
+ }
+ else
+ {
+ gtot2[n] += sr[xmax - 1, y, n];
+ }
+ }
+ }
+ if (water_depth[1, y] > water_depth_erosion_threshold || Vsusptot[1, y] > 0)
+ {
+ for (int n = 1; n <= G_MAX-1; n++)
+ {
+ if (isSuspended[n])
+ {
+ gtot2[n] += Vsusptot[1, y];
+ Vsusptot[1, y] = 0;
+ }
+ else
+ {
+ gtot2[n] += sl[2, y, n];
+ }
+ }
+ }
+ }
+
+ for (int x = 2; x < xmax; x++)
+ {
+ if (water_depth[x, ymax] > water_depth_erosion_threshold || Vsusptot[x, ymax] > 0)
+ {
+ for (int n = 1; n <= G_MAX-1; n++)
+ {
+ if (isSuspended[n])
+ {
+ gtot2[n] += Vsusptot[x, ymax];
+ Vsusptot[x, ymax] = 0;
+ }
+ else
+ {
+ gtot2[n] += sd[x, ymax - 1, n];
+ }
+ }
+ }
+ if (water_depth[x, 1] > water_depth_erosion_threshold || Vsusptot[x, 1] > 0)
+ {
+ for (int n = 1; n <= G_MAX-1; n++)
+ {
+ if (isSuspended[n])
+ {
+ gtot2[n] += Vsusptot[x, 1];
+ Vsusptot[x, 1] = 0;
+ }
+ else
+ {
+ gtot2[n] += su[x, 2, n];
+ }
+ }
+ }
+ }
+
+ /// now update files for outputing sediment and re-circulating...
+ ///
+
+ sediQ = 0;
+ for (int n = 1; n <= G_MAX; n++)
+ {
+ if (temp_grain[n] < 0) temp_grain[n] = 0;
+ if (recirculatebox.Checked == true && reach_mode_box.Checked == true)
+ temp_grain[n] += gtot2[n] * recirculate_proportion; // important to divide input by time factor, so it can be reduced if re-circulating too much...
+ sediQ += gtot2[n] * DX * DX;
+ globalsediq += gtot2[n] * DX * DX;
+ sum_grain[n] += gtot2[n] * DX * DX; // Gez
+ }
+
+ return tempbmax;
+
+ }
+
+ void slide_3()
+ {
+ int x,y,inc;
+ double wet_factor;
+ double factor=Math.Tan((failureangle*(3.141592654/180)))*DX;
+ double diff=0;
+
+ for(y=2;y0)
+ {
+ x=down_scan[y,inc];
+ if(x==xmax)x=xmax-1;
+ if(x==1)x=2;
+
+ inc++;
+ /** check to see if under water **/
+ wet_factor=factor;
+ //if(water_depth[x,y]>0.01)wet_factor=factor/2;
+ if(elev[x,y]<=(bedrock[x,y]+active))wet_factor=10000;
+
+ /** chexk landslides in channel slowly */
+
+ if(((elev[x,y]-elev[x+1,y+1])/1.41)>wet_factor&&elev[x+1,y+1]> -9999)
+ {
+ diff=((elev[x,y]-elev[x+1,y+1])/1.41)-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x+1,y+1]+=diff;
+ slide_GS(x,y,diff,x+1,y+1);
+ }
+ if((elev[x,y]-elev[x,y+1])>wet_factor&&elev[x,y+1]> -9999)
+ {
+ diff=(elev[x,y]-elev[x,y+1])-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x,y+1]+=diff;
+ slide_GS(x,y,diff,x,y+1);
+ }
+ if(((elev[x,y]-elev[x-1,y+1])/1.41)>wet_factor&&elev[x-1,y+1]> -9999)
+ {
+ diff=((elev[x,y]-elev[x-1,y+1])/1.41)-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x-1,y+1]+=diff;
+ slide_GS(x,y,diff,x-1,y+1);
+ }
+ if((elev[x,y]-elev[x-1,y])>wet_factor&&elev[x-1,y]> -9999)
+ {
+ diff=(elev[x,y]-elev[x-1,y])-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x-1,y]+=diff;
+ slide_GS(x,y,diff,x-1,y);
+ }
+
+ if(((elev[x,y]-elev[x-1,y-1])/1.41)>wet_factor&&elev[x-1,y-1]> -9999)
+ {
+ diff=((elev[x,y]-elev[x-1,y-1])/1.41)-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x-1,y-1]+=diff;
+ slide_GS(x,y,diff,x-1,y-1);
+ }
+ if((elev[x,y]-elev[x,y-1])>wet_factor&&elev[x,y-1]> -9999)
+ {
+ diff=(elev[x,y]-elev[x,y-1])-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x,y-1]+=diff;
+ slide_GS(x,y,diff,x,y-1);
+ }
+ if(((elev[x,y]-elev[x+1,y-1])/1.41)>wet_factor&&elev[x+1,y-1]> -9999)
+ {
+ diff=((elev[x,y]-elev[x+1,y-1])/1.41)-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x+1,y-1]+=diff;
+ slide_GS(x,y,diff,x+1,y-1);
+ }
+
+ if ((elev[x, y] - elev[x + 1, y]) > wet_factor && elev[x + 1, y] > -9999)
+ {
+ diff = (elev[x, y] - elev[x + 1, y]) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ elev[x, y] -= diff;
+ elev[x + 1, y] += diff;
+ slide_GS(x, y, diff, x + 1, y);
+ }
+
+ }
+ }
+
+ }
+
+ void slide_5()
+ {
+ int x, y, inc=0;
+ double wet_factor;
+ double factor = Math.Tan((failureangle * (3.141592654 / 180))) * DX;
+ //if(landslidesBox.Checked == true) factor = DX * ((-265000 * j_mean) + 1.38);
+ double diff = 0;
+ double total = 0;
+
+ if (DuneBox.Checked == true)
+ {
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ elev[x, y] -= sand[x, y];
+ }
+ }
+ }
+
+
+
+ do
+ {
+ total = 0;
+ inc++;
+ for (y = 2; y < ymax; y++)
+ {
+ for (x = 2; x < xmax; x++)
+ {
+
+ wet_factor = factor;
+ //if(water_depth[x,y]>0.01)wet_factor=factor/2;
+ if (elev[x, y] <= (bedrock[x, y] + active)) wet_factor = 10 * DX;
+
+ /** chexk landslides in channel slowly */
+
+ if (((elev[x, y] - elev[x + 1, y + 1]) / 1.41) > wet_factor && elev[x + 1, y + 1]> -9999)
+ {
+ diff = ((elev[x, y] - elev[x + 1, y + 1]) / 1.41) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x + 1, y + 1] += diff;
+ total += diff;
+ }
+ if ((elev[x, y] - elev[x, y + 1]) > wet_factor && elev[x, y + 1]> -9999)
+ {
+ diff = (elev[x, y] - elev[x, y + 1]) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x, y + 1] += diff;
+ total += diff;
+ }
+ if (((elev[x, y] - elev[x - 1, y + 1]) / 1.41) > wet_factor && elev[x - 1, y + 1]> -9999)
+ {
+ diff = ((elev[x, y] - elev[x - 1, y + 1]) / 1.41) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x - 1, y + 1] += diff;
+ total += diff;
+ }
+ if ((elev[x, y] - elev[x - 1, y]) > wet_factor && elev[x - 1, y]> -9999)
+ {
+ diff = (elev[x, y] - elev[x - 1, y]) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x - 1, y] += diff;
+ total += diff;
+ }
+
+ if (((elev[x, y] - elev[x - 1, y - 1]) / 1.41) > wet_factor && elev[x - 1, y - 1]> -9999)
+ {
+ diff = ((elev[x, y] - elev[x - 1, y - 1]) / 1.41) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x - 1, y - 1] += diff;
+ total += diff;
+ }
+ if ((elev[x, y] - elev[x, y - 1]) > wet_factor && elev[x, y - 1]> -9999)
+ {
+ diff = (elev[x, y] - elev[x, y - 1]) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x, y - 1] += diff;
+ total += diff;
+ }
+ if (((elev[x, y] - elev[x + 1, y - 1]) / 1.41) > wet_factor && elev[x + 1, y - 1]> -9999)
+ {
+ diff = ((elev[x, y] - elev[x + 1, y - 1]) / 1.41) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x + 1, y - 1] += diff;
+ total += diff;
+ }
+
+
+
+ if ((elev[x, y] - elev[x + 1, y]) > wet_factor && elev[x + 1, y]> -9999)
+ {
+ diff = (elev[x, y] - elev[x + 1, y]) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x + 1, y] += diff;
+ total += diff;
+ }
+
+ }
+ }
+ } while (total > 0&&inc<200);
+
+ if (DuneBox.Checked == true)
+ {
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ elev[x, y] += sand[x, y];
+ }
+ }
+ }
+
+ }
+
+ void slide_4(int x, int y) // landslides from sand dunes...
+ {
+ double wet_factor;
+ double factor = Math.Tan((double.Parse(textBox10.Text) * (3.141592654 / 180))) * (DX/dune_mult);
+ double diff = 0;
+
+ wet_factor = factor;
+
+
+
+ if ((((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y + 1] + sand2[x + 1, y + 1])) / 1.41) > wet_factor && (elev2[x + 1, y + 1] + sand2[x + 1, y + 1]) > 0)
+ {
+ diff = (((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y + 1] + sand2[x + 1, y + 1])) / 1.41) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x + 1, y + 1] += diff;
+ }
+ if (((elev2[x, y] + sand2[x, y]) - (elev2[x, y + 1] + sand2[x, y + 1])) > wet_factor && (elev2[x, y + 1] + sand2[x, y + 1]) > 0)
+ {
+ diff = ((elev2[x, y] + sand2[x, y]) - (elev2[x, y + 1] + sand2[x, y + 1])) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x, y + 1] += diff;
+ }
+ if ((((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y + 1] + sand2[x - 1, y + 1])) / 1.41) > wet_factor && (elev2[x - 1, y + 1] + sand2[x - 1, y + 1]) > 0)
+ {
+ diff = (((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y + 1] + sand2[x - 1, y + 1])) / 1.41) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ // if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x - 1, y + 1] += diff;
+ }
+ if (((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y] + sand2[x - 1, y])) > wet_factor && (elev2[x - 1, y] + sand2[x - 1, y]) > 0)
+ {
+ diff = ((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y] + sand2[x - 1, y])) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x - 1, y] += diff;
+ }
+
+ if ((((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y - 1] + sand2[x - 1, y - 1])) / 1.41) > wet_factor && (elev2[x - 1, y - 1] + sand2[x - 1, y - 1]) > 0)
+ {
+ diff = (((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y - 1] + sand2[x - 1, y - 1])) / 1.41) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x - 1, y - 1] += diff;
+
+
+ }
+ if (((elev2[x, y] + sand2[x, y]) - (elev2[x, y - 1] + sand2[x, y - 1])) > wet_factor && (elev2[x, y - 1] + sand2[x, y - 1]) > 0)
+ {
+ diff = ((elev2[x, y] + sand2[x, y]) - (elev2[x, y - 1] + sand2[x, y - 1])) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x, y - 1] += diff;
+
+
+ }
+ if ((((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y - 1] + sand2[x + 1, y - 1])) / 1.41) > wet_factor && (elev2[x + 1, y - 1] + sand2[x + 1, y - 1]) > 0)
+ {
+ diff = (((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y - 1] + sand2[x + 1, y - 1])) / 1.41) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x + 1, y - 1] += diff;
+
+ }
+
+
+ if (((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y] + sand2[x + 1, y])) > wet_factor && (elev2[x + 1, y] + sand2[x + 1, y]) > 0)
+ {
+ diff = ((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y] + sand2[x + 1, y])) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x + 1, y] += diff;
+
+ }
+
+
+ }
+
+ void slide_GS(int x,int y,double amount,int x2,int y2)
+ {
+
+ /** Ok, heres how it works, x and y are ones material moved from,
+ x2 and y2 are ones material moved to...
+ amd amount is the amount shifted. */
+
+ int n;
+ double total = 0;
+
+ // do only for cells where both have grainsize..
+
+ if (index[x, y] != -9999 && index[x2, y2] != -9999)
+ {
+ for (n = 1; n <= (G_MAX - 1); n++)
+ {
+ if (grain[index[x, y], n] > 0) total += grain[index[x, y], n];
+ }
+
+ if (amount > total)
+ {
+ for (n = 1; n <= G_MAX - 1; n++)
+ {
+ grain[index[x2, y2], n] += (amount - total) * dprop[n];
+ }
+
+ amount = total;
+ }
+
+ if (total > 0)
+ {
+ for (n = 1; n <= (G_MAX - 1); n++)
+ {
+ double transferamt = amount * (grain[index[x, y], n] / total);
+ grain[index[x2, y2], n] += transferamt;
+ grain[index[x, y], n] -= transferamt;
+ if (grain[index[x, y], n] < 0) grain[index[x, y], n] = 0;
+ }
+
+ }
+
+ /* then to set active layer to correct depth before erosion, */
+ sort_active(x, y);
+ sort_active(x2, y2);
+ return;
+ }
+
+ //now do for cells where only recieving cells have grainsize
+ // just adds amount to reviving cells of normal..
+ if (index[x, y] == -9999 && index[x2, y2] != -9999)
+ {
+ for (n = 1; n <= G_MAX - 1; n++)
+ {
+ grain[index[x2, y2], n] += (amount) * dprop[n];
+ }
+
+ /* then to set active layer to correct depth before erosion, */
+ sort_active(x2, y2);
+ return;
+ }
+
+ // now for cells whre dontaing cell has grainsize
+ if (index[x, y] != -9999 && index[x2, y2] == -9999)
+ {
+
+ addGS(x2, y2); // add grainsize array for recieving cell..
+
+ if (amount > active)
+ {
+
+ for (n = 1; n <= G_MAX - 1; n++)
+ {
+ grain[index[x2, y2], n] += (amount - active) * dprop[n];
+ }
+
+ amount = active;
+ }
+
+
+ for (n = 1; n <= (G_MAX - 1); n++)
+ {
+ if (grain[index[x, y], n] > 0) total += grain[index[x, y], n];
+ }
+
+ for (n = 1; n <= (G_MAX - 1); n++)
+ {
+ if (total > 0)
+ {
+ grain[index[x2, y2], n] += amount * (grain[index[x, y], n] / total);
+ if (grain[index[x, y], n] > 0.0001) grain[index[x, y], n] -= amount * (grain[index[x, y], n] / total);
+ if (grain[index[x, y], n] < 0) grain[index[x, y], n] = 0;
+ }
+
+ }
+
+ /* then to set active layer to correct depth before erosion, */
+ sort_active(x, y);
+ sort_active(x2, y2);
+ return;
+ }
+ }
+
+ double mean_ws_elev(int x, int y)
+ {
+ double elevtot = 0;
+ int counter = 0;
+
+ for (int dir = 1; dir <= 8; dir++)
+ {
+ int x2, y2;
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+
+ if (water_depth[x2, y2] > water_depth_erosion_threshold)
+ {
+ elevtot += water_depth[x2, y2] + elev[x2, y2];
+ counter++;
+ }
+
+ }
+ if (counter > 0) {
+ elevtot /= counter;
+ return elevtot;
+ }
+
+ else return 0;
+ }
+
+ void lateral3()
+ {
+
+ double[,] edge_temp, edge_temp2, water_depth2;
+ int[,] upscale, upscale_edge;
+
+ edge_temp = new Double[xmax + 1, ymax + 1];
+ edge_temp2 = new Double[xmax + 1, ymax + 1];
+ water_depth2 = new Double[xmax + 1, ymax + 1];
+ upscale = new int[(xmax + 1) * 2, (ymax + 1) * 2];
+ upscale_edge = new int[(xmax + 1) * 2, (ymax + 1) * 2];
+
+
+ // first make water depth2 equal to water depth then remove single wet cells frmo water depth2 that have an undue influence..
+ double mft = 0.1;// water_depth_erosion_threshold;//MIN_Q;// vel_dir threshold
+
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax, options, delegate (int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+
+ edge_temp[x, y] = 0;
+ if (x == 1) x++;
+ if (x == xmax) x--;
+ inc++;
+
+ if (Tau[x, y] > mft)
+ {
+ water_depth2[x, y] = Tau[x, y];
+ int tempcounter = 0;
+ for (int dir = 1; dir <= 8; dir++)
+ {
+ int x2, y2;
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+ if (Tau[x2, y2] < mft) tempcounter++;
+ }
+ if (tempcounter > 6) water_depth2[x, y] = 0;
+ }
+ }
+ });
+
+ // first make water depth2 equal to water depth then remove single wet cells frmo water depth2 that have an undue influence..
+ //double mft = water_depth_erosion_threshold;//MIN_Q;// vel_dir threshold
+ //for (int y = 2; y < ymax; y++)
+ //{
+
+ // int inc = 1;
+ // while (down_scan[y, inc] > 0)
+ // {
+ // int x = down_scan[y, inc];
+
+ // edge_temp[x, y] = 0;
+ // if (x == 1) x++;
+ // if (x == xmax) x--;
+ // inc++;
+
+ // if (water_depth[x, y] > mft)
+ // {
+ // water_depth2[x, y] = water_depth[x, y];
+ // int tempcounter = 0;
+ // for (int dir = 1; dir <= 8; dir++)
+ // {
+ // int x2, y2;
+ // x2 = x + deltaX[dir];
+ // y2 = y + deltaY[dir];
+ // if (water_depth[x2, y2] < mft) tempcounter++;
+ // }
+ // if (tempcounter > 6) water_depth2[x, y] = 0;
+ // }
+ // }
+ //}
+
+
+ // first determine which cells are at the edge of the channel
+
+ //var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(2, ymax, options, delegate (int y)
+ {
+ Parallel.For(2, xmax, options, delegate (int x)
+ {
+ edge[x, y] = -9999;
+
+ if (water_depth2[x, y] < mft)
+ {
+ // if water depth < threshold then if its next to a wet cell then its an edge cell
+ if (water_depth2[x, y - 1] > mft ||
+ water_depth2[x - 1, y] > mft ||
+ water_depth2[x + 1, y] > mft ||
+ water_depth2[x, y + 1] > mft)
+ {
+ edge[x, y] = 0;
+ }
+
+ // unless its a dry cell surrounded by wet...
+ if (water_depth2[x, y - 1] > mft &&
+ water_depth2[x - 1, y] > mft &&
+ water_depth2[x + 1, y] > mft &&
+ water_depth2[x, y + 1] > mft)
+ {
+ edge[x, y] = -9999;
+ edge2[x, y] = -9999;
+ }
+
+ // then update upscaled grid..
+ upscale[(x * 2), (y * 2)] = 0; // if dry
+ upscale[(x * 2), (y * 2) - 1] = 0;
+ upscale[(x * 2) - 1, (y * 2)] = 0;
+ upscale[(x * 2) - 1, (y * 2) - 1] = 0;
+ }
+
+ // update upscaled grid with wet cells (if wet)
+ if (water_depth2[x, y] >= mft)
+ {
+ upscale[(x * 2), (y * 2)] = 1; // if wet
+ upscale[(x * 2), (y * 2) - 1] = 1;
+ upscale[(x * 2) - 1, (y * 2)] = 1;
+ upscale[(x * 2) - 1, (y * 2) - 1] = 1;
+ }
+ });
+ });
+
+
+
+ // now determine edge cells on the new grid..
+
+ Parallel.For(2, ymax*2, options, delegate (int y)
+ {
+ Parallel.For(2, xmax*2, options, delegate (int x)
+ {
+ upscale_edge[x, y] = 0;
+ if (upscale[x, y] == 0)
+ {
+ if (upscale[x, y - 1] == 1 ||
+ upscale[x - 1, y] == 1 ||
+ upscale[x + 1, y] == 1 ||
+ upscale[x, y + 1] == 1)
+ {
+ upscale[x, y] = 2;
+ }
+ }
+ });
+
+ });
+
+
+
+ // now tall up inside and outside on upscaled grid
+
+ Parallel.For(2, ymax * 2, options, delegate (int y)
+ {
+ Parallel.For(2, xmax * 2, options, delegate (int x)
+ {
+ if (upscale[x, y] == 2)
+ {
+ int wetcells = 0;
+ int drycells = 0;
+ int water = 0;
+ int edge_cell_counter = 1;
+
+ // sum up dry cells and edge cells -
+ // now manhattan neighbors
+ for (int dir = 1; dir <= 7; dir += 2)
+ {
+ int x2, y2;
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+
+ if (upscale[x2, y2] == 1) wetcells += 1;
+ if (upscale[x2, y2] == 0) drycells += 1;
+ if (upscale[x2, y2] == 2) edge_cell_counter += 1;
+ }
+
+ if (edge_cell_counter > 3) drycells += edge_cell_counter - 2;
+ //
+ water = wetcells - drycells;
+ upscale_edge[x, y] = water;
+ }
+ });
+
+ });
+
+
+ // now update normal edge array..
+
+ Parallel.For(1, ymax+1, options, delegate (int y)
+ {
+ Parallel.For(1, xmax+1, options, delegate (int x)
+ {
+ if (edge[x, y] == 0)
+ {
+ edge[x, y] = (double)(upscale_edge[(x * 2), (y * 2)] +
+ upscale_edge[(x * 2), (y * 2) - 1] +
+ upscale_edge[(x * 2) - 1, (y * 2)] +
+ upscale_edge[(x * 2) - 1, (y * 2) - 1]);
+ if (edge[x, y] > 2) edge[x, y] = 2; // important line to stop too great inside bends...
+ if (edge[x, y] < -2) edge[x, y] = -2;
+
+ }
+ });
+ });
+
+ //then apply a smoothing filter over the top of this. here its done X number of times -
+
+ double smoothing_times = double.Parse(avge_smoothbox.Text);
+ double downstream_shift = double.Parse(downstreamshiftbox.Text);
+
+ for (int n = 1; n <= smoothing_times+downstream_shift; n++)
+ {
+ //var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(2, ymax, options, delegate(int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+
+ edge_temp[x, y] = 0;
+ if (x == 1) x++;
+ if (x == xmax) x--;
+ if (y == 1) y++;
+ if (y == ymax) y--;
+ inc++;
+
+ if (edge[x, y] > -9999)
+ {
+ double mean = 0;
+ double num = 0;
+ double water_flag = 0;
+
+
+ // add in cell itself..
+ mean += edge[x, y];
+ num++;
+
+
+ for (int dir = 1; dir <= 8; dir++)
+ {
+ int x2, y2;
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+ if (water_depth2[x2, y2] > mft) water_flag++;
+
+ if ( n > smoothing_times && edge[x2, y2] > -9999 && water_depth2[x2, y2] < mft && mean_ws_elev(x2,y2)>mean_ws_elev(x,y))
+ {
+ //now to mean manhattan neighbours - only if they share a wet diagonal neighbour
+ if ((Math.Abs(deltaX[dir]) + Math.Abs(deltaY[dir])) != 2)
+ {
+ if (deltaX[dir] == 1 && deltaY[dir] == 0 &&
+ (water_depth2[x + 1, y - 1] > mft ||
+ water_depth2[x + 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 0 && deltaY[dir] == 1 &&
+ (water_depth2[x + 1, y + 1] > mft ||
+ water_depth2[x - 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == -1 && deltaY[dir] == 0 &&
+ (water_depth2[x - 1, y - 1] > mft ||
+ water_depth2[x - 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 0 && deltaY[dir] == -1 &&
+ (water_depth2[x - 1, y - 1] > mft ||
+ water_depth2[x + 1, y - 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ }
+ //now non manahttan neighbours, with concected by a dry cell checked..
+ else
+ {
+ if (deltaX[dir] == -1 && deltaY[dir] == -1 &&
+ (water_depth2[x, y - 1] < mft ||
+ water_depth2[x - 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 1 && deltaY[dir] == -1 &&
+ (water_depth2[x, y - 1] < mft ||
+ water_depth2[x + 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 1 && deltaY[dir] == 1 &&
+ (water_depth2[x + 1, y] < mft ||
+ water_depth2[x, y + 1] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == -1 && deltaY[dir] == 1 &&
+ (water_depth2[x, y + 1] < mft ||
+ water_depth2[x - 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ }
+ }
+
+ else if ( n <= smoothing_times && edge[x2, y2] > -9999 && water_depth2[x2, y2] < mft)
+ {
+ //now to mean manhattan neighbours - only if they share a wet diagonal neighbour
+ if ((Math.Abs(deltaX[dir]) + Math.Abs(deltaY[dir])) != 2)
+ {
+ if (deltaX[dir] == 1 && deltaY[dir] == 0 &&
+ (water_depth2[x + 1, y - 1] > mft ||
+ water_depth2[x + 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 0 && deltaY[dir] == 1 &&
+ (water_depth2[x + 1, y + 1] > mft ||
+ water_depth2[x - 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == -1 && deltaY[dir] == 0 &&
+ (water_depth2[x - 1, y - 1] > mft ||
+ water_depth2[x - 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 0 && deltaY[dir] == -1 &&
+ (water_depth2[x - 1, y - 1] > mft ||
+ water_depth2[x + 1, y - 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ }
+ //now non manahttan neighbours, with concected by a dry cell checked..
+ else
+ {
+ if (deltaX[dir] == -1 && deltaY[dir] == -1 &&
+ (water_depth2[x, y - 1] < mft ||
+ water_depth2[x - 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 1 && deltaY[dir] == -1 &&
+ (water_depth2[x, y - 1] < mft ||
+ water_depth2[x + 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 1 && deltaY[dir] == 1 &&
+ (water_depth2[x + 1, y] < mft ||
+ water_depth2[x, y + 1] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == -1 && deltaY[dir] == 1 &&
+ (water_depth2[x, y + 1] < mft ||
+ water_depth2[x - 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ }
+ }
+ }
+ if (mean != 0) edge_temp[x, y] = mean / num;
+
+ // removes too many cells - islands etc..
+
+ //if(num>5&&edge[x,y]>0)edge_temp[x,y]=0;
+ //if(num+water_flag>7&&edge[x,y]>0)edge_temp[x,y]=0;
+
+ //remove edge effects
+ if (x < 3 || x > (xmax - 3)) edge_temp[x, y] = 0;
+ if (y < 3 || y > (ymax - 3)) edge_temp[x, y] = 0;
+
+ }
+ }
+ });
+
+ Parallel.For(2, ymax, options, delegate (int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ //if (x == 1) x++;
+ //if (x == xmax) x--;
+ inc++;
+ if (edge[x, y] > -9999)
+ {
+ edge[x, y] = edge_temp[x, y];
+ }
+ }
+ });
+ }
+
+
+ // trial line to remove too high inside bends,,
+ Parallel.For(1, ymax + 1, options, delegate (int y)
+ {
+ Parallel.For(1, xmax + 1, options, delegate (int x)
+ {
+ if (edge[x, y] > -9999)
+ {
+ if (edge[x, y] > 0) edge[x, y] = 0;
+ //if (edge[x, y] < -0.25) edge[x, y] = -0.25;
+ edge[x, y] = 0 - edge[x, y];
+ edge[x, y] = 1 / ((2.131 * Math.Pow(edge[x, y], -1.0794)) * DX);
+ //if (edge[x, y] > (1 / (DX * 3))) edge[x, y] = 1 / (DX * 3);
+ //edge[x, y] = 1 / edge[x, y];
+
+ }
+ if (water_depth[x, y] > water_depth_erosion_threshold && edge[x, y] == -9999) edge[x, y] = 0;
+ });
+ });
+
+ //// now smooth across the channel..
+ double tempdiff = 0;
+ double counter = 0;
+ do
+ {
+ counter++;
+ //var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(2, ymax, options, delegate(int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+
+ edge_temp[x, y] = 0;
+ if (x == 1) x++;
+ if (x == xmax) x--;
+ inc++;
+ if (water_depth2[x, y] > mft && edge[x, y] == -9999) edge[x, y] = 0;
+
+ if (edge[x, y] > -9999 && water_depth2[x, y] > mft)
+ {
+ double mean = 0;
+ int num = 0;
+ for (int dir = 1; dir <= 8; dir+=2)
+ {
+ int x2, y2;
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+
+ if (water_depth2[x2, y2] > mft && edge[x2, y2] == -9999) edge[x2, y2] = 0;
+ if (edge[x2, y2] > -9999)
+ {
+ mean += (edge[x2, y2]);
+ num++;
+ }
+ }
+ edge_temp[x, y] = mean / num;
+ }
+ }
+ });
+
+ tempdiff = 0;
+ //Parallel.For(2, ymax, options, delegate (int y)
+ //{
+
+ // reduction needed here:
+ for (int y = 2; y < ymax; y++)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ if (x == 1) x++;
+ if (x == xmax) x--;
+ inc++;
+ if (edge[x, y] > -9999 && water_depth2[x, y] > mft)
+ {
+ if (Math.Abs(edge[x, y] - edge_temp[x, y]) > tempdiff) tempdiff = Math.Abs(edge[x, y] - edge_temp[x, y]);
+ edge[x, y] = edge_temp[x, y];
+ }
+ }
+ }
+ //});
+ } while (tempdiff > lateral_cross_channel_smoothing); //this makes it loop until the averaging across the stream stabilises
+ // so that the difference between the old and new values are < 0.0001
+ //tempStatusPanel.Text = Convert.ToString(counter);
+
+ }
+
+ private void Form1_Load(object sender, System.EventArgs e)
+ {
+
+ zoomPanImageBox1.Height = this.Height - 225;
+ zoomPanImageBox1.Width = this.Width - 20;
+ //googleToggle();
+
+ //HttpWebRequest req;
+ //HttpWebResponse res;
+ //try
+ //{
+ // req = (HttpWebRequest) WebRequest.Create("http://www.coulthard.org.uk/");
+ // res = (HttpWebResponse) req.GetResponse();
+ //}
+ //catch(Exception ex)
+ //{
+ // /// do nothing.
+ //}
+
+ //JMW <20040929 -start>
+ this.Text = basetext;
+ //DoingGraphics = false;
+ //JMW <20040929 - end>
+
+
+ // comment out all of the below to run normally. Leave uncommented in order to run in batch mode.
+ ////////////////////////
+ //////////////////////////
+
+
+
+ ///// first load up xml file from command line:
+ /////
+ //string temp_xml_name = " ";
+
+ //foreach (string arg in Environment.GetCommandLineArgs())
+ //{
+ // if (arg != "CAESAR.exe") temp_xml_name = arg;
+ //}
+
+ ///// then load up .xml file
+ /////
+
+ //XmlTextReader xreader;
+ //String dum;
+
+ //if (1 > 0)
+ //{
+
+ // xreader = new XmlTextReader(temp_xml_name);
+
+ // //Read the file
+ // if (xreader != null)
+ // {
+ // xreader.ReadStartElement("Parms");
+ // xreader.ReadStartElement("General-Parms");
+ // try
+ // {
+ // overrideheaderBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("headeroverride"));
+ // }
+ // catch
+ // { };
+ // xtextbox.Text = xreader.ReadElementString("x-coordinate");
+ // ytextbox.Text = xreader.ReadElementString("y-coordinate");
+ // initscansbox.Text = xreader.ReadElementString("initscans");
+ // erodefactorbox.Text = xreader.ReadElementString("maxerodelimit");
+ // dxbox.Text = xreader.ReadElementString("cellsize");
+ // limitbox.Text = xreader.ReadElementString("memorylimit");
+ // minqbox.Text = xreader.ReadElementString("minq");
+ // creepratebox.Text = xreader.ReadElementString("creeprate");
+ // lateralratebox.Text = xreader.ReadElementString("lateralerosionrate");
+ // itermaxbox.Text = xreader.ReadElementString("maxiter");
+ // textBox1.Text = xreader.ReadElementString("runstarttime");
+ // cyclemaxbox.Text = xreader.ReadElementString("maxrunduration");
+ // slopebox.Text = xreader.ReadElementString("slopefailurethreshold");
+ // smoothbox.Text = xreader.ReadElementString("wssmoothingradius");
+ // mvaluebox.Text = xreader.ReadElementString("mvalue");
+
+ // grasstextbox.Text = xreader.ReadElementString("growgrasstime");
+ // textBox2.Text = xreader.ReadElementString("initialq");
+ // try
+ // {
+ // checkBox3.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("wssmoothing"));
+ // }
+ // catch
+ // { };
+ // grassbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("grass-sediment"));
+
+ // try // MJ 24/01/05
+ // {
+ // textBox3.Text = xreader.ReadElementString("flowdistribution");
+ // mintimestepbox.Text = xreader.ReadElementString("mintimestep");
+ // }
+ // catch
+ // { };
+
+ // try // MJ 15/03/05
+ // {
+ // k_evapBox.Text = xreader.ReadElementString("evaporation");
+ // }
+ // catch
+ // { };
+
+ // try // MJ 10/05/05
+ // {
+ // vegTauCritBox.Text = xreader.ReadElementString("vegcritshear");
+ // }
+ // catch
+ // { };
+
+ // try
+ // {
+ // bedslope_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("bedslope"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("wsslope"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // veltaubox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("veltaubox"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // catchment_mode_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("catchment_mode"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // reach_mode_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("reach_mode"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // latbox1.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("lat1"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // latbox2.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("lat2"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("lat3"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // string dum_string = xreader.ReadElementString("cross_stream_grad");
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // max_vel_box.Text = xreader.ReadElementString("max_vel");
+ // }
+ // catch { };
+
+
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem12.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem13.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem14.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem15.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem16.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem17.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem18.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem19.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem20.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem21.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem22.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem23.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem24.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem25.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // try
+ // {
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem29.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem33.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem34.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g1box.Text = xreader.ReadElementString("gs");
+ // gp1box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS1box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS1box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g2box.Text = xreader.ReadElementString("gs");
+ // gp2box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS2box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS2box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g3box.Text = xreader.ReadElementString("gs");
+ // gp3box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS3box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS3box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g4box.Text = xreader.ReadElementString("gs");
+ // gp4box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS4box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS4box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g5box.Text = xreader.ReadElementString("gs");
+ // gp5box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS5box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS5box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g6box.Text = xreader.ReadElementString("gs");
+ // gp6box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS6box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS6box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g7box.Text = xreader.ReadElementString("gs");
+ // gp7box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS7box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS7box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g8box.Text = xreader.ReadElementString("gs");
+ // gp8box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS8box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS8box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // try
+ // {
+ // xreader.ReadStartElement("Grain-Size");
+ // g9box.Text = xreader.ReadElementString("gs");
+ // gp9box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS9box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS9box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+
+ // xreader.ReadStartElement("File-Parms");
+
+ // input_time_step_box.Text = xreader.ReadElementString("inputtimestep");
+ // saveintervalbox.Text = xreader.ReadElementString("saveinterval");
+ // outputfilesaveintervalbox.Text = xreader.ReadElementString("savetologfileinterval");
+ // tracerbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("tracerrun"));
+ // uniquefilecheck.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("uniquefilecheck"));
+
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // openfiletextbox.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // graindataloadbox.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // bedrockbox.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // raindataloadbox.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // tracerfile.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // tracerhydrofile.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // tracergrainbox.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // try
+ // {
+
+ // xreader.ReadStartElement("Sources");
+ // inbox1.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox1.Text = xreader.ReadElementString("X");
+ // ybox1.Text = xreader.ReadElementString("Y");
+ // infile1.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox2.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox2.Text = xreader.ReadElementString("X");
+ // ybox2.Text = xreader.ReadElementString("Y");
+ // infile2.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox3.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox3.Text = xreader.ReadElementString("X");
+ // ybox3.Text = xreader.ReadElementString("Y");
+ // infile3.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox4.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox4.Text = xreader.ReadElementString("X");
+ // ybox4.Text = xreader.ReadElementString("Y");
+ // infile4.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox5.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox5.Text = xreader.ReadElementString("X");
+ // ybox5.Text = xreader.ReadElementString("Y");
+ // infile5.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox6.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox6.Text = xreader.ReadElementString("X");
+ // ybox6.Text = xreader.ReadElementString("Y");
+ // infile6.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox7.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox7.Text = xreader.ReadElementString("X");
+ // ybox7.Text = xreader.ReadElementString("Y");
+ // infile7.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox8.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox8.Text = xreader.ReadElementString("X");
+ // ybox8.Text = xreader.ReadElementString("Y");
+ // infile8.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Description");
+ // DescBox.Text = xreader.ReadElementString("S");
+ // xreader.ReadEndElement();
+
+ // //JMW 2004-11-11
+ // try
+ // {
+ // xreader.ReadStartElement("OutputFile-Parms");
+ // checkBoxGenerateAVIFile.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("generateavifile"));
+ // textBoxAVIFile.Text = xreader.ReadElementString("avifile");
+ // try
+ // {
+ // saveintervalbox.Text = xreader.ReadElementString("avifreq");
+ // checkBoxGenerateTimeSeries.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("generatetimeseriesfile"));
+ // TimeseriesOutBox.Text = xreader.ReadElementString("timeseriesfile");
+ // outputfilesaveintervalbox.Text = xreader.ReadElementString("timeseriesfreq");
+ // checkBoxGenerateIterations.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("generateiterationsfile"));
+ // IterationOutbox.Text = xreader.ReadElementString("iterationsfile");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+
+ // try
+ // {
+ // xreader.ReadStartElement("Display");
+ // // have to have dumpvariable here as window not displayed yet...
+ // int dumpvarible = XmlConvert.ToInt16(xreader.ReadElementString("top"));
+ // dumpvarible = XmlConvert.ToInt16(xreader.ReadElementString("left"));
+ // dumpvarible = XmlConvert.ToInt16(xreader.ReadElementString("width"));
+ // dumpvarible = XmlConvert.ToInt16(xreader.ReadElementString("height"));
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+
+ // try
+ // {
+ // xreader.ReadStartElement("Lateral");
+ // bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("oldlat"));
+ // newlateral.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("newlat"));
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // xreader.ReadStartElement("Add_Ons");
+ // tracerOutcheckBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("tracer-out"));
+ // tracerOutputtextBox.Text = xreader.ReadElementString("tracer-out-filename");
+ // googleAnimationCheckbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("google_animation"));
+ // googleAnimationTextBox.Text = xreader.ReadElementString("google_animation_file_name");
+ // googleBeginDate.Text = xreader.ReadElementString("google_begin");
+ // googAnimationSaveInterval.Text = xreader.ReadElementString("google_interval");
+ // jmeaninputfilebox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("jMean"));
+ // avge_smoothbox.Text = xreader.ReadElementString("edge_smoothing");
+ // string dum_string = xreader.ReadElementString("displacement");
+ // propremaining.Text = xreader.ReadElementString("prop_remain");
+ // max_time_step_Box.Text = xreader.ReadElementString("max_time_step");
+ // mine_checkBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("contam_input"));
+ // mineX_textBox.Text = xreader.ReadElementString("mineX");
+ // mineY_textBox.Text = xreader.ReadElementString("mineY");
+ // mine_input_textBox.Text = xreader.ReadElementString("contam_input_file");
+ // soil_ratebox.Text = xreader.ReadElementString("soil_rate");
+ // SiberiaBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("siberia"));
+ // Beta1Box.Text = xreader.ReadElementString("beta1");
+ // Beta3Box.Text = xreader.ReadElementString("beta3");
+ // m1Box.Text = xreader.ReadElementString("m1");
+ // m3Box.Text = xreader.ReadElementString("m3");
+ // n1Box.Text = xreader.ReadElementString("n1");
+ // Q2box.Text = xreader.ReadElementString("W_depth_erosion_threshold");
+ // dum_string = xreader.ReadElementString("fexp");
+ // div_inputs_box.Text = xreader.ReadElementString("div_inputs");
+
+ // init_depth_box.Text = xreader.ReadElementString("initial_sand_depth");
+ // slab_depth_box.Text = xreader.ReadElementString("maxslabdepth");
+ // shadow_angle_box.Text = xreader.ReadElementString("angle");
+ // upstream_check_box.Text = xreader.ReadElementString("checkup");
+ // depo_prob_box.Text = xreader.ReadElementString("dep_probability");
+ // offset_box.Text = xreader.ReadElementString("downstream_offset");
+ // dune_time_box.Text = xreader.ReadElementString("dune_timestep");
+ // dune_grid_size_box.Text = xreader.ReadElementString("dune_gridsize");
+
+ // wilcockbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("wilcock"));
+ // einsteinbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("einstein"));
+ // DuneBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("dune"));
+
+ // UTMgridcheckbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("UTM"));
+ // UTMsouthcheck.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("South"));
+ // UTMzonebox.Text = xreader.ReadElementString("UTMzone");
+
+ // raintimestepbox.Text = xreader.ReadElementString("raindatatimestep");
+ // activebox.Text = xreader.ReadElementString("activelayerthickness");
+
+ // xreader.ReadEndElement();
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+
+ // xreader.Close();
+
+
+ // this.Text = basetext + " (" + Path.GetFileName(cfgname) + ")";
+ // button2.Enabled = true;
+ // start_button.Enabled = false;
+ // Panel1.Visible = false;
+ // tabControl1.Visible = true;
+
+ // }
+ //}
+
+ //////// then initialise
+
+ //int ok;
+ //ok = read_header();
+
+ //if (ok == 1)
+ //{
+ // initialise();
+ // zero_values();
+ // load_data();
+
+ // // nActualGridSize
+ // // moved from initialse() to here MJ 29/03/05
+ // int x, y;
+ // nActualGridCells = 0;
+ // for (x = 1; x <= xmax; x++)
+ // {
+ // for (y = 1; y <= ymax; y++)
+ // {
+ // if (elev[x, y] > -9999) nActualGridCells++;
+ // }
+ // }
+
+ // tabControl1.Visible = false;
+ // checkBox1.Checked = false;
+ // zoomPanImageBox1.Visible = true;// MJ 14/01/05
+ // Panel1.Visible = true; // MJ 14/01/05
+ // button2.Enabled = false; // MJ 17/01/05
+ // start_button.Enabled = true; // MJ 17/01/05
+ // groupBox2.Visible = true;
+ // groupBox3.Visible = true;
+ //}
+
+ //// then run program
+
+ //main_loop(this, null);
+
+ ////
+ //// end of batch mode section
+ ////
+ ////
+ }
+
+ void button1_Click(object sender, System.EventArgs e)
+ {
+ //close google earth animation kml and make kmz
+ if (googleAnimationCheckbox.Checked == true)
+ {
+ StreamWriter kmlsr = File.AppendText(KML_FILE_NAME);
+ kml = "\n"
+ + "\n";
+ kmlsr.WriteLine(kml);
+ kmlsr.Close();
+ }
+
+ if (menuItem25.Checked == true) save_data(1, 0); // save waterdepths
+ if (menuItem13.Checked == true) save_data(2, 0); // save elevdiff
+ if (menuItem12.Checked == true) save_data(3, 0); // save elevations
+ if (menuItem14.Checked == true) save_data(4, 0); // save grainsize
+ if (menuItem29.Checked == true) save_data(15, 0); // save d50 top layer
+ if (menuItem33.Checked == true) save_data(16, 0); // save velocity
+ if (menuItem34.Checked == true) save_data(17, 0); // save soil_saturation
+
+ this.Close();
+ }
+ private void button2_Click(object sender, System.EventArgs e)
+ {
+ int ok;
+ ok = read_header();
+ int nnn;
+ double temp = -9999;
+
+ if (ok == 1)
+ {
+ initialise();
+ zero_values();
+ load_data();
+
+ // nActualGridSize
+ // moved from initialse() to here MJ 29/03/05
+ int x, y;
+ //nActualGridCells = 0;
+ for (int ii = 1; ii <= rfnum; ii++) nActualGridCells[ii] = 0;
+
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ if (elev[x, y] > -9999) nActualGridCells[rfarea[x, y]]++;
+ }
+ }
+
+ tabControl1.Visible = false;
+ checkBox1.Checked = false;
+ zoomPanImageBox1.Visible = true;// MJ 14/01/05
+ Panel1.Visible = true; // MJ 14/01/05
+ button2.Enabled = false; // MJ 17/01/05
+ start_button.Enabled = true; // MJ 17/01/05
+ groupBox2.Visible = true;
+ groupBox3.Visible = true;
+ }
+
+ string message = "Variables check:";
+ if((xmax*ymax)>250000) message +="\n\nWarning, number of cells is greater than 250 000 - this may result in slow model operation";
+ if (MIN_Q < (DX / 120)) message += "\n\nWarning, Min_Q may be set too low - suitable value is normally cell size / 100";
+ if (MIN_Q > (DX / 80)) message += "\n\nWarning, Min_Q may be set too high - suitable value is normally cell size / 100";
+ if (reach_mode_box.Checked == true && inbox1.Checked == false) message += "\n\nWarning, model set to run in reach mode, but no point inputs selected (Hydrology tab)";
+ if (reach_mode_box.Checked == true && div_inputs < 0) message += "\n\nWarning, model set to run in reach mode, but divide inputs box (Hydrology tab) set to 0\nit must be 1 or greater";
+ if (max_time_step > 3600)
+ {
+ message += "\n\nMax time step (numerical tab) is set to greater than 3600 - if running in catchment mode\nthis must be smaller than 3600";
+
+ }
+ if (water_depth_erosion_threshold > 0.02)
+ {
+ message += "\n\nWarning, Min depth for erosion threshold (numerical tab) may be set too high";
+ message += "\nthis could result in erosion not happening in cells where water depths are low try a value of 0.02 or lower";
+ }
+ if (water_depth_erosion_threshold < 0.005)
+ {
+ message += "\n\nWarning, Min depth for erosion threshold (numerical tab) may be set too low";
+ message += "\nthis may lead to slow operation as the model tries to erode where very shallow depths ";
+ }
+ if (d1 > d2 || d2 > d3 || d3 > d4) message += "\n\nWarning, sediment sizes (sediment tab) must be entered in ASCENDING order of size";
+ //if (M > 0.1 || M < 0.001) message += "\n\nWarning, M value is unusually high or low. Typical values range from 0.005 to 0.02";
+
+ //check for -9999's on RH edge of DEM
+ for (nnn = 1; nnn <= ymax; nnn++)
+ {
+ if (elev[xmax, nnn] > temp) temp = elev[xmax, nnn];
+ }
+ if (temp < -10)
+ {
+ message += "\n\nDEM ERROR: CAESAR will not function properly, as the right hand column of the DEM is all nodata (-9999) values. This will prevent any water or sediment from leaving the Rh edge of the model/dem";
+ }
+ if (edgeslope > 0.01) message += "\nThe edge slope (slope at exit cells for hydraulic model) is probably set too high.. normal values are 0.01 to 0.001";
+ //if (bed_proportion > 0.05) message += "\nThe proportion of bedslope erosion is set high - please check";
+ //if (bed_proportion > 1) message += "\nProportion of bedlsope erosion is greater than 1 - this must be reduced or the model will not function correctly";
+ if (courant_number > 0.7) message += "\nThe courant number is set too high, numerical instabilities are highly likely, it is best set to < 0.5";
+ if (courant_number >= 0.4 && DX <= 25) message += "\nThe courant number may be set a little to high for this resolution - consider changing to below 0.4";
+ if (courant_number >= 0.3 && DX <= 10) message += "\nThe courant number may be set a little to high for this resolution - consider changing to below 0.3";
+ //if (min_time_step <= 0) message += "\nConsider using a minimum time step (e.g. 1 sec or greater) as low time steps can lead to excessive scour during the first few min of model operation";
+ if (in_out_difference != 0) message += "\n\nYou have set the input/output difference to be greater than zero, which means the model will speed up/run in steady state when the difference between water input and output is less than this value";
+
+ message += "\n\nAll other variables are OK";
+ MessageBox.Show(message);
+
+ //main_loop(this, null);
+
+ }
+ private void textBox2_TextChanged(object sender, System.EventArgs e)
+ {
+
+ }
+ private void contextMenu1_Popup(object sender, System.EventArgs e)
+ {
+
+ }
+ private void popComboBox1()
+ {
+ if (comboBox1.Items.Count == 1)
+ {
+ comboBox1.Text = "water depth";
+ comboBox1.Text = "erosion/dep";
+ comboBox1.Text = "Bed sheer stress";
+ comboBox1.Text = "grainsize";
+ comboBox1.Text = "tracer";
+ comboBox1.Text = "susp conc";
+ comboBox1.Text = "soil depth";
+ comboBox1.Text = "flow velocity";
+ }
+ }
+ private void menuItem3_Click(object sender, System.EventArgs e)
+ {
+ menuItem3.Checked=(!menuItem3.Checked);
+ if (menuItem3.Checked == true)
+ {
+ comboBox1.Items.Add("water depth");
+ }
+ else
+ {
+ comboBox1.Items.Remove("water depth");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+
+ }
+ private void menuItem4_Click(object sender, System.EventArgs e)
+ {
+ menuItem4.Checked=(!menuItem4.Checked);
+ if (menuItem4.Checked == true)
+ {
+ comboBox1.Items.Add("erosion/dep");
+ }
+ else
+ {
+ comboBox1.Items.Remove("erosion/dep");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem5_Click(object sender, System.EventArgs e)
+ {
+ menuItem5.Checked=(!menuItem5.Checked);
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem7_Click(object sender, System.EventArgs e)
+ {
+ menuItem7.Checked=(!menuItem7.Checked);
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem8_Click(object sender, System.EventArgs e)
+ {
+ menuItem8.Checked=(!menuItem8.Checked);
+ if (menuItem8.Checked == true)
+ {
+ comboBox1.Items.Add("Bed sheer stress");
+ }
+ else
+ {
+ comboBox1.Items.Remove("Bed sheer stress");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem9_Click(object sender, System.EventArgs e)
+ {
+ menuItem9.Checked=(!menuItem9.Checked);
+ if (menuItem9.Checked == true)
+ {
+ comboBox1.Items.Add("grainsize");
+ }
+ else
+ {
+ comboBox1.Items.Remove("grainsize");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem12_Click(object sender, System.EventArgs e)
+ {
+ menuItem12.Checked=(!menuItem12.Checked);
+ }
+ private void menuItem13_Click(object sender, System.EventArgs e)
+ {
+ menuItem13.Checked=(!menuItem13.Checked);
+ }
+ private void menuItem14_Click(object sender, System.EventArgs e)
+ {
+ menuItem14.Checked=(!menuItem14.Checked);
+ }
+ private void menuItem25_Click(object sender, System.EventArgs e)
+ {
+ menuItem25.Checked=(!menuItem25.Checked);
+ }
+ private void menuItem26_Click(object sender, System.EventArgs e)
+ {
+ menuItem26.Checked=(!menuItem26.Checked);
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem27_Click(object sender, System.EventArgs e)
+ {
+ menuItem27.Checked=(!menuItem27.Checked);
+ if (menuItem27.Checked == true)
+ {
+ comboBox1.Items.Add("susp conc");
+ }
+ else
+ {
+ comboBox1.Items.Remove("susp conc");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem28_Click(object sender, System.EventArgs e)
+ {
+ menuItem28.Checked=(!menuItem28.Checked);
+ if (menuItem28.Checked == true)
+ {
+ comboBox1.Items.Add("soil depth");
+ }
+ else
+ {
+ comboBox1.Items.Remove("soil depth");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem29_Click(object sender, System.EventArgs e)
+ {
+ menuItem29.Checked=(!menuItem29.Checked);
+ }
+ private void menuItem30_Click(object sender, System.EventArgs e)
+ {
+ menuItem30.Checked=(!menuItem30.Checked);
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem31_Click(object sender, System.EventArgs e)
+ {
+ menuItem31.Checked=(!menuItem31.Checked);
+ if (menuItem31.Checked == true)
+ {
+ comboBox1.Items.Add("flow velocity");
+ }
+ else
+ {
+ comboBox1.Items.Remove("flow velocity");
+ }
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem33_Click(object sender, System.EventArgs e)
+ {
+ menuItem33.Checked=(!menuItem33.Checked);
+ }
+ private void menuItem34_Click(object sender, System.EventArgs e)
+ {
+ menuItem34.Checked=(!menuItem34.Checked);
+ }
+ private void button3_Click(object sender, System.EventArgs e)
+ {
+ grow_grass(1);
+ }
+ private void menuItemConfigFileOpen_Click(object sender, System.EventArgs e)
+ {
+ XmlTextReader xreader;
+ String dum;
+
+ OpenFileDialog openFileDialog1 = new OpenFileDialog();
+
+ openFileDialog1.InitialDirectory = workdir ;
+ openFileDialog1.Filter = "cfg files (*.xml)|*.xml|All files (*.*)|*.*" ;
+ openFileDialog1.FilterIndex = 1 ;
+ openFileDialog1.RestoreDirectory = false ;
+
+ if(openFileDialog1.ShowDialog() == DialogResult.OK)
+ {
+ cfgname = openFileDialog1.FileName;
+
+ xreader = new XmlTextReader(cfgname);
+
+ //Read the file
+ if (xreader != null)
+ {
+ xreader.ReadStartElement("Parms");
+ xreader.ReadStartElement("General-Parms");
+ try
+ {
+ overrideheaderBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("headeroverride"));
+ }
+ catch
+ {};
+ xtextbox.Text = xreader.ReadElementString("x-coordinate");
+ ytextbox.Text = xreader.ReadElementString("y-coordinate");
+ initscansbox.Text = xreader.ReadElementString("initscans");
+ erodefactorbox.Text = xreader.ReadElementString("maxerodelimit");
+ dxbox.Text = xreader.ReadElementString("cellsize");
+ limitbox.Text = xreader.ReadElementString("memorylimit");
+ minqbox.Text = xreader.ReadElementString("minq");
+ creepratebox.Text = xreader.ReadElementString("creeprate");
+ lateralratebox.Text = xreader.ReadElementString("lateralerosionrate");
+ itermaxbox.Text = xreader.ReadElementString("maxiter");
+ textBox1.Text = xreader.ReadElementString("runstarttime");
+ cyclemaxbox.Text = xreader.ReadElementString("maxrunduration");
+ slopebox.Text = xreader.ReadElementString("slopefailurethreshold");
+ smoothbox.Text = xreader.ReadElementString("wssmoothingradius");
+ mvaluebox.Text = xreader.ReadElementString("mvalue");
+
+ grasstextbox.Text = xreader.ReadElementString("growgrasstime");
+ textBox2.Text = xreader.ReadElementString("initialq");
+ try
+ {
+ bool dummy6 = XmlConvert.ToBoolean(xreader.ReadElementString("wssmoothing"));
+ }
+ catch
+ { };
+ flowonlybox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("grass-sediment"));
+
+ try // MJ 24/01/05
+ {
+ textBox3.Text = xreader.ReadElementString("flowdistribution");
+ mintimestepbox.Text = xreader.ReadElementString("mintimestep");
+ }
+ catch
+ {};
+
+ try // MJ 15/03/05
+ {
+ k_evapBox.Text = xreader.ReadElementString("evaporation");
+ }
+ catch
+ {};
+
+ try // MJ 10/05/05
+ {
+ vegTauCritBox.Text = xreader.ReadElementString("vegcritshear");
+ }
+ catch
+ {};
+
+ try
+ {
+ bedslope_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("bedslope"));
+ }
+ catch
+ {};
+ try
+ {
+ bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("wsslope"));
+ }
+ catch
+ {};
+ try
+ {
+ veltaubox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("veltaubox"));
+ }
+ catch
+ { };
+ try
+ {
+ catchment_mode_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("catchment_mode"));
+ }
+ catch
+ {};
+ try
+ {
+ reach_mode_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("reach_mode"));
+ }
+ catch
+ {};
+ try
+ {
+ bool dum_bool2 = XmlConvert.ToBoolean(xreader.ReadElementString("lat1"));
+ }
+ catch
+ {};
+ try
+ {
+ bool dum_bool2 = XmlConvert.ToBoolean(xreader.ReadElementString("lat2"));
+ }
+ catch
+ {};
+ try
+ {
+ bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("lat3"));
+ }
+ catch
+ {};
+ try
+ {
+ string dum_string = xreader.ReadElementString("cross_stream_grad");
+ }
+ catch
+ {};
+ try
+ {
+ max_vel_box.Text = xreader.ReadElementString("max_vel");
+ }
+ catch { };
+
+
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem12.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem13.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem14.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ bool dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem25.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ try
+ {
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem29.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem33.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem34.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g1box.Text = xreader.ReadElementString("gs");
+ gp1box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS1box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS1box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g2box.Text = xreader.ReadElementString("gs");
+ gp2box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS2box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS2box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g3box.Text = xreader.ReadElementString("gs");
+ gp3box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS3box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS3box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g4box.Text = xreader.ReadElementString("gs");
+ gp4box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS4box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS4box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g5box.Text = xreader.ReadElementString("gs");
+ gp5box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS5box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS5box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g6box.Text = xreader.ReadElementString("gs");
+ gp6box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS6box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS6box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g7box.Text = xreader.ReadElementString("gs");
+ gp7box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS7box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS7box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g8box.Text = xreader.ReadElementString("gs");
+ gp8box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS8box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS8box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ try
+ {
+ xreader.ReadStartElement("Grain-Size");
+ g9box.Text = xreader.ReadElementString("gs");
+ gp9box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS9box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS9box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+
+ xreader.ReadStartElement("File-Parms");
+
+ input_time_step_box.Text = xreader.ReadElementString("inputtimestep");
+ saveintervalbox.Text = xreader.ReadElementString("saveinterval");
+ outputfilesaveintervalbox.Text = xreader.ReadElementString("savetologfileinterval");
+ tracerbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("tracerrun"));
+ uniquefilecheck.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("uniquefilecheck"));
+
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ openfiletextbox.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ graindataloadbox.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ bedrockbox.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ raindataloadbox.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ tracerfile.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ tracerhydrofile.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ string dummystring4 = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ try{
+
+ xreader.ReadStartElement("Sources");
+ inbox1.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox1.Text = xreader.ReadElementString("X");
+ ybox1.Text = xreader.ReadElementString("Y");
+ infile1.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox2.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox2.Text = xreader.ReadElementString("X");
+ ybox2.Text = xreader.ReadElementString("Y");
+ infile2.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox3.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox3.Text = xreader.ReadElementString("X");
+ ybox3.Text = xreader.ReadElementString("Y");
+ infile3.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox4.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox4.Text = xreader.ReadElementString("X");
+ ybox4.Text = xreader.ReadElementString("Y");
+ infile4.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox5.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox5.Text = xreader.ReadElementString("X");
+ ybox5.Text = xreader.ReadElementString("Y");
+ infile5.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox6.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox6.Text = xreader.ReadElementString("X");
+ ybox6.Text = xreader.ReadElementString("Y");
+ infile6.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox7.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox7.Text = xreader.ReadElementString("X");
+ ybox7.Text = xreader.ReadElementString("Y");
+ infile7.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox8.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox8.Text = xreader.ReadElementString("X");
+ ybox8.Text = xreader.ReadElementString("Y");
+ infile8.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Description");
+ DescBox.Text = xreader.ReadElementString("S");
+ xreader.ReadEndElement();
+
+ //JMW 2004-11-11
+ try
+ {
+ xreader.ReadStartElement("OutputFile-Parms");
+ try
+ {
+ bool a124 = XmlConvert.ToBoolean(xreader.ReadElementString("generateavifile"));
+ string a123 = xreader.ReadElementString("avifile");
+
+ }
+ catch { };
+ try
+ {
+ saveintervalbox.Text = xreader.ReadElementString("avifreq");
+ checkBoxGenerateTimeSeries.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("generatetimeseriesfile"));
+ TimeseriesOutBox.Text = xreader.ReadElementString("timeseriesfile");
+ outputfilesaveintervalbox.Text = xreader.ReadElementString("timeseriesfreq");
+ checkBoxGenerateIterations.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("generateiterationsfile"));
+ IterationOutbox.Text = xreader.ReadElementString("iterationsfile");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+
+ try
+ {
+ xreader.ReadStartElement("Display");
+ Form1.ActiveForm.Top = XmlConvert.ToInt16(xreader.ReadElementString("top"));
+ Form1.ActiveForm.Left = XmlConvert.ToInt16(xreader.ReadElementString("left"));
+ Form1.ActiveForm.Width = XmlConvert.ToInt16(xreader.ReadElementString("width"));
+ Form1.ActiveForm.Height = XmlConvert.ToInt16(xreader.ReadElementString("height"));
+
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+
+ try
+ {
+ xreader.ReadStartElement("Lateral");
+ bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("oldlat"));
+ newlateral.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("newlat"));
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+ try
+ {
+ xreader.ReadStartElement("Add_Ons");
+ tracerOutcheckBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("tracer-out"));
+ tracerOutputtextBox.Text = xreader.ReadElementString("tracer-out-filename");
+ googleAnimationCheckbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("google_animation"));
+ googleAnimationTextBox.Text = xreader.ReadElementString("google_animation_file_name");
+ googleBeginDate.Text = xreader.ReadElementString("google_begin");
+ googAnimationSaveInterval.Text = xreader.ReadElementString("google_interval");
+ jmeaninputfilebox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("jMean"));
+ avge_smoothbox.Text = xreader.ReadElementString("edge_smoothing");
+ string dum_string = xreader.ReadElementString("displacement");
+ propremaining.Text = xreader.ReadElementString("prop_remain");
+ max_time_step_Box.Text = xreader.ReadElementString("max_time_step");
+ bool dummy1 = XmlConvert.ToBoolean(xreader.ReadElementString("contam_input"));
+ string dummystring1 = xreader.ReadElementString("mineX");
+ string dummystring2 = xreader.ReadElementString("mineY");
+ string dummystring3 = xreader.ReadElementString("contam_input_file");
+ soil_ratebox.Text = xreader.ReadElementString("soil_rate");
+ SiberiaBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("siberia"));
+ Beta1Box.Text = xreader.ReadElementString("beta1");
+ Beta3Box.Text = xreader.ReadElementString("beta3");
+ m1Box.Text = xreader.ReadElementString("m1");
+ m3Box.Text = xreader.ReadElementString("m3");
+ n1Box.Text = xreader.ReadElementString("n1");
+ Q2box.Text = xreader.ReadElementString("W_depth_erosion_threshold");
+ dum_string = xreader.ReadElementString("fexp");
+ div_inputs_box.Text = xreader.ReadElementString("div_inputs");
+
+ init_depth_box.Text = xreader.ReadElementString("initial_sand_depth");
+ slab_depth_box.Text = xreader.ReadElementString("maxslabdepth");
+ shadow_angle_box.Text = xreader.ReadElementString("angle");
+ upstream_check_box.Text = xreader.ReadElementString("checkup");
+ depo_prob_box.Text = xreader.ReadElementString("dep_probability");
+ offset_box.Text = xreader.ReadElementString("downstream_offset");
+ dune_time_box.Text = xreader.ReadElementString("dune_timestep");
+ dune_grid_size_box.Text = xreader.ReadElementString("dune_gridsize");
+
+ wilcockbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("wilcock"));
+ einsteinbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("einstein"));
+ DuneBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("dune"));
+
+ UTMgridcheckbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("UTM"));
+ UTMsouthcheck.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("South"));
+ UTMzonebox.Text = xreader.ReadElementString("UTMzone");
+
+
+ raintimestepbox.Text = xreader.ReadElementString("raindatatimestep");
+ activebox.Text = xreader.ReadElementString("activelayerthickness");
+
+ // more add on's 21/5/2012
+ downstreamshiftbox.Text = xreader.ReadElementString("downstreamshift");
+ courantbox.Text = xreader.ReadElementString("courantnumber");
+ textBox4.Text = xreader.ReadElementString("hflow");
+ textBox7.Text = xreader.ReadElementString("lateralsmoothing");
+ textBox8.Text = xreader.ReadElementString("froude_limit");
+ textBox9.Text = xreader.ReadElementString("mannings");
+
+ checkBox3.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("TidalorStage"));
+ MinQmaxvalue.Text = xreader.ReadElementString("MinQmaxvalue");
+ TidalXmin.Text = xreader.ReadElementString("TidalXmin");
+ TidalXmax.Text = xreader.ReadElementString("TidalXmax");
+ TidalYmin.Text = xreader.ReadElementString("TidalYmin");
+ TidalYmax.Text = xreader.ReadElementString("TidalYmax");
+ TidalFileName.Text = xreader.ReadElementString("TidalFileName");
+ TidalInputStep.Text = xreader.ReadElementString("TidalInputStep");
+
+ // more add ons for bedrock erosion 19/1/14
+ bedrock_erosion_threshold_box.Text = xreader.ReadElementString("bedrock_erosion_threshold");
+ bedrock_erosion_rate_box.Text = xreader.ReadElementString("bedrock_erosion_rate");
+
+ // more add ons for spatially variable rainfall
+ rfnumBox.Text = xreader.ReadElementString("rfnum");
+ hydroindexBox.Text = xreader.ReadElementString("hydroindex");
+ checkBox7.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("MultiRainfall"));
+
+ // more addons for soil development and spatially variable mannings 28/8/2015
+ soildevbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("soildevbox"));
+ checkBox4.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("bedrocklowering"));
+ checkBox5.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("physicalweathering"));
+ checkBox6.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("chemicalweathering"));
+ textBox11.Text = xreader.ReadElementString("P1");
+ textBox12.Text = xreader.ReadElementString("b1");
+ textBox13.Text = xreader.ReadElementString("k1");
+ textBox14.Text = xreader.ReadElementString("c1");
+ textBox15.Text = xreader.ReadElementString("c2");
+ textBox16.Text = xreader.ReadElementString("k2");
+ textBox17.Text = xreader.ReadElementString("c3");
+ textBox18.Text = xreader.ReadElementString("c4");
+
+ SpatVarManningsCheckbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("SpatVarManningsCheckbox"));
+ textBox19.Text = xreader.ReadElementString("spatvarmanningsfilename");
+ mfiletimestepbox.Text = xreader.ReadElementString("mfiletimestepbox");
+ mvalueloadbox.Text = xreader.ReadElementString("mvalueloadbox");
+
+ // 5/12/16
+ meyerbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("meyer"));
+
+ //18/7/18
+ checkBox8.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("all_nine_grainsizes"));
+
+ // 11/9/18
+ radioButton1.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("oldveg"));
+ radioButton2.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("newveg"));
+
+ xreader.ReadEndElement();
+ xreader.ReadEndElement();
+ }
+ catch
+ { };
+
+
+ xreader.Close();
+
+
+ this.Text = basetext + " (" + Path.GetFileName(cfgname) + ")";
+ button2.Enabled = true;
+ start_button.Enabled = false;
+ Panel1.Visible = false;
+ tabControl1.Visible = true;
+
+ }
+ }
+ }
+ // JMW - Config File Save & SaveAs Event Handler
+ private void menuItemConfigFileSave_Click(object sender, System.EventArgs e)
+ {
+ XmlTextWriter xwriter;
+
+ if ((sender == menuItemConfigFileSaveAs) || (cfgname == null))
+ {
+
+ SaveFileDialog saveFileDialog1 = new SaveFileDialog();
+
+ saveFileDialog1.InitialDirectory = workdir ;
+ saveFileDialog1.Filter = "cfg files (*.xml)|*.xml|All files (*.*)|*.*" ;
+ saveFileDialog1.FilterIndex = 1 ;
+ saveFileDialog1.RestoreDirectory = false ;
+
+ if(saveFileDialog1.ShowDialog() == DialogResult.OK)
+ {
+ cfgname = saveFileDialog1.FileName;
+ }
+
+ }
+
+ if (cfgname != null)
+ {
+
+ //Create a new XmlTextWriter.
+ xwriter = new XmlTextWriter(cfgname,System.Text.Encoding.UTF8);
+ //Write the beginning of the document including the
+ //document declaration. Standalone is true.
+ //Use indentation for readability.
+ xwriter.Formatting = Formatting.Indented;
+ xwriter.Indentation = 4;
+
+
+ xwriter.WriteStartDocument(true);
+
+ //Write the beginning of the "data" element. This is
+ //the opening tag to our data
+ xwriter.WriteStartElement("Parms");
+ xwriter.WriteStartElement("General-Parms");
+ xwriter.WriteElementString("headeroverride",XmlConvert.ToString(overrideheaderBox.Checked));
+ xwriter.WriteElementString("x-coordinate",xtextbox.Text);
+ xwriter.WriteElementString("y-coordinate",ytextbox.Text);
+ xwriter.WriteElementString("initscans",initscansbox.Text);
+ xwriter.WriteElementString("maxerodelimit",erodefactorbox.Text);
+ xwriter.WriteElementString("cellsize",dxbox.Text);
+ xwriter.WriteElementString("memorylimit",limitbox.Text);
+ xwriter.WriteElementString("minq",minqbox.Text);
+ xwriter.WriteElementString("creeprate",creepratebox.Text);
+ xwriter.WriteElementString("lateralerosionrate",lateralratebox.Text);
+ xwriter.WriteElementString("maxiter",itermaxbox.Text);
+ xwriter.WriteElementString("runstarttime",textBox1.Text);
+ xwriter.WriteElementString("maxrunduration",cyclemaxbox.Text);
+ xwriter.WriteElementString("slopefailurethreshold",slopebox.Text);
+ xwriter.WriteElementString("wssmoothingradius",smoothbox.Text);
+ xwriter.WriteElementString("mvalue",mvaluebox.Text);
+ xwriter.WriteElementString("growgrasstime",grasstextbox.Text);
+ xwriter.WriteElementString("initialq",textBox2.Text);
+ xwriter.WriteElementString("wssmoothing","false");
+ xwriter.WriteElementString("grass-sediment",XmlConvert.ToString(flowonlybox.Checked));
+ xwriter.WriteElementString("flowdistribution",textBox3.Text); // MJ 24/01/05
+ xwriter.WriteElementString("mintimestep",mintimestepbox.Text); // MJ 24/01/05
+ xwriter.WriteElementString("evaporation",k_evapBox.Text); // MJ 15/03/05
+ xwriter.WriteElementString("vegcritshear",vegTauCritBox.Text); // MJ 10/05/05
+ xwriter.WriteElementString("bedslope",XmlConvert.ToString(bedslope_box.Checked));
+ xwriter.WriteElementString("wsslope",XmlConvert.ToString(false));
+ xwriter.WriteElementString("veltaubox", XmlConvert.ToString(veltaubox.Checked));
+ xwriter.WriteElementString("catchment_mode",XmlConvert.ToString(catchment_mode_box.Checked));
+ xwriter.WriteElementString("reach_mode",XmlConvert.ToString(reach_mode_box.Checked));
+ xwriter.WriteElementString("lat1",XmlConvert.ToString(false));
+ xwriter.WriteElementString("lat2",XmlConvert.ToString(false));
+ xwriter.WriteElementString("lat3",XmlConvert.ToString(false));
+ xwriter.WriteElementString("cross_stream_grad", XmlConvert.ToString(0));
+ xwriter.WriteElementString("max_vel", max_vel_box.Text);
+
+
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","elevations");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem12.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","elevdiff");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem13.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","grainsize");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem14.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","total tracer g/s");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 1");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 2");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 3");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 4");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 5");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 6");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 7");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 8");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 9");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","water depth");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem25.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","d50");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem29.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","flow velocity");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem33.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","soil saturation");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem34.Checked));
+ xwriter.WriteEndElement();
+
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g1box.Text);
+ xwriter.WriteElementString("gp",gp1box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS1box.Checked));
+ xwriter.WriteElementString("fv",fallGS1box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g2box.Text);
+ xwriter.WriteElementString("gp",gp2box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS2box.Checked));
+ xwriter.WriteElementString("fv",fallGS2box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g3box.Text);
+ xwriter.WriteElementString("gp",gp3box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS3box.Checked));
+ xwriter.WriteElementString("fv",fallGS3box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g4box.Text);
+ xwriter.WriteElementString("gp",gp4box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS4box.Checked));
+ xwriter.WriteElementString("fv",fallGS4box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g5box.Text);
+ xwriter.WriteElementString("gp",gp5box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS5box.Checked));
+ xwriter.WriteElementString("fv",fallGS5box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g6box.Text);
+ xwriter.WriteElementString("gp",gp6box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS6box.Checked));
+ xwriter.WriteElementString("fv",fallGS6box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g7box.Text);
+ xwriter.WriteElementString("gp",gp7box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS7box.Checked));
+ xwriter.WriteElementString("fv",fallGS7box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g8box.Text);
+ xwriter.WriteElementString("gp",gp8box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS8box.Checked));
+ xwriter.WriteElementString("fv",fallGS8box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g9box.Text);
+ xwriter.WriteElementString("gp",gp9box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS9box.Checked));
+ xwriter.WriteElementString("fv",fallGS9box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("File-Parms");
+
+ xwriter.WriteElementString("inputtimestep",input_time_step_box.Text);
+ xwriter.WriteElementString("saveinterval",saveintervalbox.Text);
+ xwriter.WriteElementString("savetologfileinterval",outputfilesaveintervalbox.Text);
+ xwriter.WriteElementString("tracerrun",XmlConvert.ToString(tracerbox.Checked));
+ xwriter.WriteElementString("uniquefilecheck",XmlConvert.ToString(uniquefilecheck.Checked));
+
+
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","DEM Data File");
+ xwriter.WriteElementString("Name",openfiletextbox.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Grain Data File");
+ xwriter.WriteElementString("Name",graindataloadbox.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Bedrock Data File");
+ xwriter.WriteElementString("Name",bedrockbox.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Rain Data File");
+ xwriter.WriteElementString("Name",raindataloadbox.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Tracer File");
+ xwriter.WriteElementString("Name",tracerfile.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Tracer Sed Vol File");
+ xwriter.WriteElementString("Name",tracerhydrofile.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Tracer Grain Size Data File");
+ xwriter.WriteElementString("Name","null");
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox1.Checked));
+ xwriter.WriteElementString("X",xbox1.Text);
+ xwriter.WriteElementString("Y",ybox1.Text);
+ xwriter.WriteElementString("Filename",infile1.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox2.Checked));
+ xwriter.WriteElementString("X",xbox2.Text);
+ xwriter.WriteElementString("Y",ybox2.Text);
+ xwriter.WriteElementString("Filename",infile2.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox3.Checked));
+ xwriter.WriteElementString("X",xbox3.Text);
+ xwriter.WriteElementString("Y",ybox3.Text);
+ xwriter.WriteElementString("Filename",infile3.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox4.Checked));
+ xwriter.WriteElementString("X",xbox4.Text);
+ xwriter.WriteElementString("Y",ybox4.Text);
+ xwriter.WriteElementString("Filename",infile4.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox5.Checked));
+ xwriter.WriteElementString("X",xbox5.Text);
+ xwriter.WriteElementString("Y",ybox5.Text);
+ xwriter.WriteElementString("Filename",infile5.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox6.Checked));
+ xwriter.WriteElementString("X",xbox6.Text);
+ xwriter.WriteElementString("Y",ybox6.Text);
+ xwriter.WriteElementString("Filename",infile6.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox7.Checked));
+ xwriter.WriteElementString("X",xbox7.Text);
+ xwriter.WriteElementString("Y",ybox7.Text);
+ xwriter.WriteElementString("Filename",infile7.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox8.Checked));
+ xwriter.WriteElementString("X",xbox8.Text);
+ xwriter.WriteElementString("Y",ybox8.Text);
+ xwriter.WriteElementString("Filename",infile8.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteEndElement();
+
+
+ xwriter.WriteStartElement("Description");
+ xwriter.WriteElementString("S",DescBox.Text);
+ xwriter.WriteEndElement();
+
+ //JMW 2004-11-11; updated MJ 24/01/05
+ xwriter.WriteStartElement("OutputFile-Parms");
+ xwriter.WriteElementString("generateavifile","false");
+ xwriter.WriteElementString("avifile","novalue");
+ xwriter.WriteElementString("avifreq",saveintervalbox.Text);
+ xwriter.WriteElementString("generatetimeseriesfile",XmlConvert.ToString(checkBoxGenerateTimeSeries.Checked));
+ xwriter.WriteElementString("timeseriesfile",TimeseriesOutBox.Text);
+ xwriter.WriteElementString("timeseriesfreq",outputfilesaveintervalbox.Text);
+ xwriter.WriteElementString("generateiterationsfile",XmlConvert.ToString(checkBoxGenerateIterations.Checked));
+ xwriter.WriteElementString("iterationsfile",IterationOutbox.Text);
+ xwriter.WriteEndElement();
+
+
+ xwriter.WriteStartElement("Display");
+ xwriter.WriteElementString("top",string.Format(" {0}",Form1.ActiveForm.Top));
+ xwriter.WriteElementString("left",string.Format(" {0}",Form1.ActiveForm.Left));
+ xwriter.WriteElementString("width",string.Format(" {0}",Form1.ActiveForm.Width));
+ xwriter.WriteElementString("height",string.Format(" {0}",Form1.ActiveForm.Height));
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Lateral");
+ xwriter.WriteElementString("oldlat",XmlConvert.ToString(false));
+ xwriter.WriteElementString("newlat",XmlConvert.ToString(newlateral.Checked));
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Add_Ons");
+ xwriter.WriteElementString("tracer-out", XmlConvert.ToString(tracerOutcheckBox.Checked));
+ xwriter.WriteElementString("tracer-out-filename", tracerOutputtextBox.Text);
+ xwriter.WriteElementString("google_animation", XmlConvert.ToString(googleAnimationCheckbox.Checked));
+ xwriter.WriteElementString("google_animation_file_name", googleAnimationTextBox.Text);
+ xwriter.WriteElementString("google_begin", googleBeginDate.Text);
+ xwriter.WriteElementString("google_interval", googAnimationSaveInterval.Text);
+ xwriter.WriteElementString("jMean", XmlConvert.ToString(jmeaninputfilebox.Checked));
+ xwriter.WriteElementString("edge_smoothing", avge_smoothbox.Text);
+ xwriter.WriteElementString("displacement", XmlConvert.ToString(false));
+ xwriter.WriteElementString("prop_remain", propremaining.Text);
+ xwriter.WriteElementString("max_time_step", max_time_step_Box.Text);
+ xwriter.WriteElementString("contam_input", XmlConvert.ToString(false));
+ xwriter.WriteElementString("mineX", "null");
+ xwriter.WriteElementString("mineY", "null");
+ xwriter.WriteElementString("contam_input_file", "null");
+ xwriter.WriteElementString("soil_rate", soil_ratebox.Text);
+ xwriter.WriteElementString("siberia", XmlConvert.ToString(SiberiaBox.Checked));
+ xwriter.WriteElementString("beta1", Beta1Box.Text);
+ xwriter.WriteElementString("beta3", Beta3Box.Text);
+ xwriter.WriteElementString("m1", m1Box.Text);
+ xwriter.WriteElementString("m3", m3Box.Text);
+ xwriter.WriteElementString("n1", n1Box.Text);
+ xwriter.WriteElementString("W_depth_erosion_threshold", Q2box.Text);
+ xwriter.WriteElementString("fexp",XmlConvert.ToString(1));
+ xwriter.WriteElementString("div_inputs",div_inputs_box.Text);
+ xwriter.WriteElementString("initial_sand_depth", init_depth_box.Text);
+ xwriter.WriteElementString("maxslabdepth", slab_depth_box.Text);
+ xwriter.WriteElementString("angle", shadow_angle_box.Text);
+ xwriter.WriteElementString("checkup", upstream_check_box.Text);
+ xwriter.WriteElementString("dep_probability", depo_prob_box.Text);
+ xwriter.WriteElementString("downstream_offset", offset_box.Text);
+ xwriter.WriteElementString("dune_timestep", dune_time_box.Text);
+ xwriter.WriteElementString("dune_gridsize", dune_grid_size_box.Text);
+ xwriter.WriteElementString("wilcock", XmlConvert.ToString(wilcockbox.Checked));
+ xwriter.WriteElementString("einstein", XmlConvert.ToString(einsteinbox.Checked));
+ xwriter.WriteElementString("dune", XmlConvert.ToString(DuneBox.Checked));
+ // three UTM interface elements
+ xwriter.WriteElementString("UTM", XmlConvert.ToString(UTMgridcheckbox.Checked));
+ xwriter.WriteElementString("South", XmlConvert.ToString(UTMsouthcheck.Checked));
+ xwriter.WriteElementString("UTMzone", UTMzonebox.Text);
+
+ xwriter.WriteElementString("raindatatimestep", raintimestepbox.Text);
+ xwriter.WriteElementString("activelayerthickness", activebox.Text);
+
+ // more add on's 21/5/2012
+
+ xwriter.WriteElementString("downstreamshift", downstreamshiftbox.Text);
+ xwriter.WriteElementString("courantnumber", courantbox.Text);
+ xwriter.WriteElementString("hflow", textBox4.Text);
+ xwriter.WriteElementString("lateralsmoothing", textBox7.Text);
+ xwriter.WriteElementString("froude_limit", textBox8.Text);
+ xwriter.WriteElementString("mannings", textBox9.Text);
+
+ // more add on's 4/7/13
+ xwriter.WriteElementString("TidalorStage", XmlConvert.ToString(checkBox3.Checked));
+ xwriter.WriteElementString("MinQmaxvalue", MinQmaxvalue.Text);
+ xwriter.WriteElementString("TidalXmin", TidalXmin.Text);
+ xwriter.WriteElementString("TidalXmax", TidalXmax.Text);
+ xwriter.WriteElementString("TidalYmin", TidalYmin.Text);
+ xwriter.WriteElementString("TidalYmax", TidalYmax.Text);
+ xwriter.WriteElementString("TidalFileName", TidalFileName.Text);
+ xwriter.WriteElementString("TidalInputStep", TidalInputStep.Text);
+
+ // more add ons for bedrock erosion 19/1/14
+ xwriter.WriteElementString("bedrock_erosion_threshold", bedrock_erosion_threshold_box.Text);
+ xwriter.WriteElementString("bedrock_erosion_rate", bedrock_erosion_rate_box.Text);
+
+ // more add ons for spatially variable rainfall
+ xwriter.WriteElementString("rfnum", rfnumBox.Text);
+ xwriter.WriteElementString("hydroindex", hydroindexBox.Text);
+ xwriter.WriteElementString("MultiRainfall", XmlConvert.ToString(checkBox7.Checked));
+
+ // more addons for soil development and spatially variable mannings 28/8/2015
+ xwriter.WriteElementString("soildevbox", XmlConvert.ToString(soildevbox.Checked));
+ xwriter.WriteElementString("bedrocklowering", XmlConvert.ToString(checkBox4.Checked));
+ xwriter.WriteElementString("physicalweathering", XmlConvert.ToString(checkBox5.Checked));
+ xwriter.WriteElementString("chemicalweathering", XmlConvert.ToString(checkBox6.Checked));
+ xwriter.WriteElementString("P1", textBox11.Text);
+ xwriter.WriteElementString("b1", textBox12.Text);
+ xwriter.WriteElementString("k1", textBox13.Text);
+ xwriter.WriteElementString("c1", textBox14.Text);
+ xwriter.WriteElementString("c2", textBox15.Text);
+ xwriter.WriteElementString("k2", textBox16.Text);
+ xwriter.WriteElementString("c3", textBox17.Text);
+ xwriter.WriteElementString("c4", textBox18.Text);
+
+ xwriter.WriteElementString("SpatVarManningsCheckbox", XmlConvert.ToString(SpatVarManningsCheckbox.Checked));
+ xwriter.WriteElementString("spatvarmanningsfilename", textBox19.Text);
+
+ // 4/10/15 spat variable mannings box
+ xwriter.WriteElementString("mfiletimestepbox", mfiletimestepbox.Text);
+ xwriter.WriteElementString("mvalueloadbox", mvalueloadbox.Text);
+
+ // 5/12/16
+ xwriter.WriteElementString("meyer", XmlConvert.ToString(meyerbox.Checked));
+ //18/7/18
+ xwriter.WriteElementString("all_nine_grainsizes", XmlConvert.ToString(checkBox8.Checked));
+ // 11/9/18
+ xwriter.WriteElementString("oldveg", XmlConvert.ToString(radioButton1.Checked));
+ xwriter.WriteElementString("newveg", XmlConvert.ToString(radioButton2.Checked));
+
+
+ //xwriter.WriteElementString();
+
+ xwriter.WriteEndElement();
+ xwriter.WriteEndElement();
+
+
+ //End the document
+ xwriter.WriteEndDocument();
+
+ //Flush the xml document to the underlying stream and
+ //close the underlying stream. The data will not be
+ //written out to the stream until either the Flush()
+ //method is called or the Close() method is called.
+ xwriter.Close();
+
+ this.Text = basetext + " (" + Path.GetFileName(cfgname) + ")";
+ }
+ }
+ private void suspCheckedChange(object sender, System.EventArgs e)
+ {
+ fallGS1box.Enabled = suspGS1box.Checked;
+ fallGS2box.Enabled = suspGS2box.Checked;
+ fallGS3box.Enabled = suspGS3box.Checked;
+ fallGS4box.Enabled = suspGS4box.Checked;
+ fallGS5box.Enabled = suspGS5box.Checked;
+ fallGS6box.Enabled = suspGS6box.Checked;
+ fallGS7box.Enabled = suspGS7box.Checked;
+ fallGS8box.Enabled = suspGS8box.Checked;
+ fallGS9box.Enabled = suspGS9box.Checked;
+ }
+ private void fracGSchanged(object sender, System.EventArgs e)
+ {
+ double sum;
+
+ sum = 0.0;
+ if (gp1box.Text != "") sum += double.Parse(gp1box.Text);
+ if (gp2box.Text != "") sum += double.Parse(gp2box.Text);
+ if (gp3box.Text != "") sum += double.Parse(gp3box.Text);
+ if (gp4box.Text != "") sum += double.Parse(gp4box.Text);
+ if (gp5box.Text != "") sum += double.Parse(gp5box.Text);
+ if (gp6box.Text != "") sum += double.Parse(gp6box.Text);
+ if (gp7box.Text != "") sum += double.Parse(gp7box.Text);
+ if (gp8box.Text != "") sum += double.Parse(gp8box.Text);
+ if (gp9box.Text != "") sum += double.Parse(gp9box.Text);
+
+ if (Math.Abs(sum-1.0) < 0.000000001)
+ {
+ gpSumLabel.Text = "OK";
+ gpSumLabel.ForeColor = Color.Black;
+ gpSumLabel2.ForeColor = Color.Black;
+ }
+ else
+ {
+ gpSumLabel.Text = string.Format("{0:F8}",sum);
+ gpSumLabel.ForeColor = Color.Red;
+ gpSumLabel2.ForeColor = Color.Red;
+ }
+ }
+ private void button4_Click_1(object sender, System.EventArgs e)
+ {
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void overrideheaderBox_CheckedChanged(object sender, System.EventArgs e)
+ {
+ label1.Enabled = overrideheaderBox.Checked;
+ label2.Enabled = overrideheaderBox.Checked;
+ label11.Enabled = overrideheaderBox.Checked;
+ xtextbox.Enabled = overrideheaderBox.Checked;
+ ytextbox.Enabled = overrideheaderBox.Checked;
+ dxbox.Enabled = overrideheaderBox.Checked;
+ }
+ private void checkBox1_CheckedChanged(object sender, System.EventArgs e)
+ {
+
+ }
+ private void bedslope_box_CheckedChanged(object sender, System.EventArgs e)
+ {
+ if(bedslope_box.Checked==true){
+ veltaubox.Checked=false;
+ bedslopebox2.Checked = false;
+ }
+ }
+ private void newlateral_CheckedChanged(object sender, System.EventArgs e)
+ {
+
+ if (newlateral.Checked == true) nolateral.Checked = false;
+ }
+ private void label54_Click(object sender, System.EventArgs e)
+ {
+
+ }
+ private void button5_Click(object sender, System.EventArgs e)
+ {
+ Form1.ActiveForm.Show();
+ }
+ private void button5_Click_1(object sender, System.EventArgs e)
+ {
+ get_area();
+ }
+ private void veltaubox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (veltaubox.Checked == true)
+ {
+
+ bedslope_box.Checked = false;
+ bedslopebox2.Checked = false;
+ }
+ }
+ private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
+ {
+ erodedepo();
+ }
+ private void nolateral_CheckedChanged(object sender, EventArgs e)
+ {
+
+ if (nolateral.Checked == true) newlateral.Checked = false;
+ }
+ private void Form1_Resize(object sender, EventArgs e)
+ {
+ zoomPanImageBox1.Height = this.Height - 225;
+ zoomPanImageBox1.Width = this.Width - 20;
+ }
+ private void zoomPanImageBox1_Load(object sender, EventArgs e)
+ {
+
+ }
+ private void trackBar1_Scroll(object sender, EventArgs e)
+ {
+ contrastMultiplier = contrastFactor[trackBar1.Value];
+ drawwater(mygraphics);
+ }
+ private void trackBar2_Scroll(object sender, EventArgs e)
+ {
+ magnifyValue = zoomFactor[this.trackBar2.Value];
+ zoomPanImageBox1.setZoom();
+ }
+ private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
+ {
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void n1Box_TextChanged(object sender, EventArgs e)
+ {
+
+ }
+ private void graphicToGoogleEarthButton_Click(object sender, EventArgs e)
+ {
+ if (coordinateDone == 0)
+ {
+ //transfrom coordinates
+ point testPoint = new point(xll, yll);
+ if (UTMgridcheckbox.Checked)
+ {
+ testPoint.UTMzone = System.Convert.ToInt32(UTMzonebox.Text);
+ testPoint.south = System.Convert.ToBoolean(UTMsouthcheck.Checked);
+ testPoint.transformUTMPoint();
+ }
+ else
+ {
+ testPoint.transformPoint();
+ }
+ yurcorner = yll + (System.Convert.ToDouble(ymax) * System.Convert.ToDouble(DX));
+ xurcorner = xll + (System.Convert.ToDouble(xmax) * System.Convert.ToDouble(DX));
+ point testPoint2 = new point(xurcorner, yurcorner);
+ if (UTMgridcheckbox.Checked)
+ {
+ testPoint2.UTMzone = System.Convert.ToInt32(UTMzonebox.Text);
+ testPoint2.south = System.Convert.ToBoolean(UTMsouthcheck.Checked);
+ testPoint2.transformUTMPoint();
+ }
+ else
+ {
+ testPoint2.transformPoint();
+ }
+
+
+
+ urfinalLati = testPoint2.ycoord;
+ urfinalLongi = testPoint2.xcoord;
+ llfinalLati = testPoint.ycoord;
+ llfinalLongi = testPoint.xcoord;
+ coordinateDone = 1;
+ }
+
+ //Save image
+ m_objDrawingSurface.MakeTransparent();
+ m_objDrawingSurface.Save(@"mysavedimage" + imageCount + ".png", System.Drawing.Imaging.ImageFormat.Png);
+ //create kml file for image
+ string kml_file_name = "image" + imageCount + ".kml";
+ StreamWriter kmlsr = File.CreateText(kml_file_name);
+ string kml = @"
+
+
+ Untitled Image Overlay";
+ kml = kml + "\n"
+ + "\nmySavedImage" + imageCount + ".png"
+ + "\n"
+ + "\n";
+ kml = kml + "\n" + urfinalLati + ""
+ + "\n" + llfinalLati + ""
+ + "\n" + urfinalLongi + ""
+ + "\n" + llfinalLongi + "\n";
+ kml = kml + @"
+
+
+ ";
+ kmlsr.Write(kml);
+ kmlsr.Close();
+ imageCount++;
+ }
+ private void einsteinbox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (wilcockbox.Checked == true) wilcockbox.Checked = false;
+ if (meyerbox.Checked == true) meyerbox.Checked = false;
+ }
+ private void wilcockbox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (einsteinbox.Checked == true) einsteinbox.Checked = false;
+ if (meyerbox.Checked == true) meyerbox.Checked = false;
+ }
+ private void HydrologyTab_Click(object sender, EventArgs e)
+ {
+
+ }
+ private void button6_Click(object sender, EventArgs e)
+ {
+ int x, y;
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ if (x > 0 && x <= 200) elev[x, y] += 1;
+ }
+ }
+ }
+ private void checkBox1_CheckedChanged_1(object sender, EventArgs e)
+ {
+ if (checkBox1.Checked==false) tabControl1.Visible = false;
+ if (checkBox1.Checked == true) tabControl1.Visible = true;
+ }
+ private void tabPage5_Click(object sender, EventArgs e)
+ {
+
+ }
+ private void label88_Click(object sender, EventArgs e)
+ {
+
+ }
+ private void textBox12_TextChanged(object sender, EventArgs e)
+ {
+
+ }
+ private void label58_Click(object sender, EventArgs e)
+ {
+
+ }
+ private void checkBox4_CheckedChanged(object sender, EventArgs e)
+ {
+ if (UTMgridcheckbox.Checked)
+ {
+ UTMzonebox.Visible = true;
+ textBox6.Visible = true;
+ UTMsouthcheck.Visible = true;
+ groupBox4.Visible = true;
+ }
+ }
+ private void bedslopebox2_CheckedChanged(object sender, EventArgs e)
+ {
+ if (bedslopebox2.Checked == true)
+ {
+ veltaubox.Checked = false;
+ bedslope_box.Checked = false;
+
+
+ }
+ }
+ private void UTMgridcheckbox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (UTMgridcheckbox.Checked)
+ {
+ UTMzonebox.Visible = true;
+ textBox6.Visible = true;
+ UTMsouthcheck.Visible = true;
+ groupBox4.Visible = true;
+ }
+
+ }
+ private void mouseclick2(object sender, MouseEventArgs e)
+ {
+
+ }
+
+ private void checkBox2_CheckedChanged(object sender, EventArgs e)
+ {
+
+ if (checkBox2.Checked == true)
+ {
+ CAESAR_lisflood_1._0.Form2 secondForm = new CAESAR_lisflood_1._0.Form2();
+ secondForm.Show();
+
+ }
+
+ }
+
+ private void checkBox7_CheckedChanged(object sender, EventArgs e)
+ {
+ if (checkBox7.Checked == true)
+ {
+ rfnumBox.Visible=true;
+ hydroindexBox.Visible = true;
+ label102.Visible = true;
+ label103.Visible = true;
+ }
+ }
+
+ private void SpatVarManningsCheckbox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (SpatVarManningsCheckbox.Checked == true)
+ {
+ textBox19.Visible = true;
+ label104.Visible = true;
+
+ }
+ }
+
+ private void meyerbox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (wilcockbox.Checked == true) wilcockbox.Checked = false;
+ if (einsteinbox.Checked == true) einsteinbox.Checked = false;
+ }
+
+ }
+
+
+
+ class point
+ {
+ //lat long variables
+ public double xcoord;
+ public double ycoord;
+ public int UTMzone;
+ public bool south;
+ double transParallelX = 446.448;
+ double transParallelY = -125.157;
+ double transParallelZ = 542.060;
+ double scaleChange = -20.4894 * 0.000001;
+ double rotX = (0.1502 / 3600) * (Math.PI / 180);
+ double rotY = (0.2470 / 3600) * (Math.PI / 180);
+ double rotZ = (0.8421 / 3600) * (Math.PI / 180);
+ double a = 6377563.396; //airy 1830 semi-major axis
+ double b = 6356256.910; //airy 1830 semi-minor axis
+ double a2 = 6378137.000;
+ double b2 = 6356752.3142;
+ double eSquared = 0;
+ double eSquared2 = 0;
+ double nO = -100000;//northing of true origin
+ double eO = 400000;//easting of true origin
+ double fO = 0.9996012717;//scale factor
+ double latTrue = 49.0 * (Math.PI / 180.0);//latitude of true origin
+ double longTrue = -2.0 * (Math.PI / 180.0);//longitude of true origin
+ double psiHash, MBig, v, v2, v3, nLittle, rho, nSquare = 0;
+ double vii, viii, ix, Tx2, xi, xii, xiia = 0;
+ double helmertX, helmertY, helmertZ, cartX, cartY, cartZ;
+ double Height2 = 0;
+ double finalLati, finalLongi, latiRad, longiRad = 0;
+ double rootXYSqr = 0;
+ double PHI1, PHI2, PHI = 0;
+
+ public point(double theXcoord, double theYcoord)//constructor
+ {
+ this.xcoord = theXcoord;
+ this.ycoord = theYcoord;
+ }
+
+ public void transformPoint()//british os to lat long
+ {
+ eSquared = (Math.Pow(a, 2) - Math.Pow(b, 2)) / Math.Pow(a, 2);
+ Height2 = 0;
+
+ //OSGB36 easting and northing to OSGB36 latitude and longitude (lower left corner of DTM)
+ psiHash = ((this.ycoord - nO) / (a * fO)) + latTrue;
+ nLittle = (a - b) / (a + b);
+ MBig = b * fO * (((1 + nLittle + ((5.0 / 4.0) * Math.Pow(nLittle, 2)) + ((5.0 / 4.0) * Math.Pow(nLittle, 3))) * (psiHash -
+ latTrue))
+ - (((3.0 * nLittle) + (3.0 * Math.Pow(nLittle, 2)) + ((21.0 / 8.0) * Math.Pow(nLittle, 3))) *
+ Math.Sin(psiHash - latTrue) * Math.Cos(psiHash + latTrue))
+ + (((15.0 / 8.0 * Math.Pow(nLittle, 2)) + (15.0 / 8.0 * Math.Pow(nLittle, 3))) * Math.Sin(2.0 * (psiHash - latTrue)) * Math.Cos(2.0 * (psiHash + latTrue)))
+ - ((35.0 / 24.0 * Math.Pow(nLittle, 3)) * Math.Sin(3.0 * (psiHash - latTrue)) * Math.Cos(3.0 * (psiHash + latTrue))));
+ if (Math.Abs((this.ycoord - nO - MBig)) >= 0.01)
+ {
+ while (Math.Abs((this.ycoord - nO - MBig)) >= 0.01)
+ {
+ psiHash = ((this.ycoord - nO - MBig) / (a * fO)) + psiHash;
+ MBig = b * fO * (((1 + nLittle + ((5.0 / 4.0) * Math.Pow(nLittle, 2)) + ((5.0 / 4.0) * Math.Pow(nLittle, 3))) * (psiHash -
+ latTrue))
+ - (((3.0 * nLittle) + (3.0 * Math.Pow(nLittle, 2)) + ((21.0 / 8.0) * Math.Pow(nLittle, 3))) *
+ Math.Sin(psiHash - latTrue) * Math.Cos(psiHash + latTrue))
+ + (((15.0 / 8.0 * Math.Pow(nLittle, 2)) + (15.0 / 8.0 * Math.Pow(nLittle, 3))) * Math.Sin(2.0 * (psiHash - latTrue)) * Math.Cos(2.0 * (psiHash + latTrue)))
+ - ((35.0 / 24.0 * Math.Pow(nLittle, 3)) * Math.Sin(3.0 * (psiHash - latTrue)) * Math.Cos(3.0 * (psiHash + latTrue))));
+ }
+ }
+ v = a * fO * Math.Pow(1 - eSquared * Math.Pow(Math.Sin(psiHash), 2), -.5);
+ rho = a * fO * (1 - eSquared) * Math.Pow(1.0 - eSquared * Math.Pow(Math.Sin(psiHash), 2), -1.5);
+ nSquare = v / rho - 1.0;
+ vii = (Math.Tan(psiHash)) / (2.0 * rho * v);
+ viii = ((Math.Tan(psiHash)) / (24.0 * rho * Math.Pow(v, 3))) * (5 + 3.0 * Math.Pow(Math.Tan(psiHash), 2) + nSquare - 9.0 * (Math.Pow(Math.Tan(psiHash), 2) * nSquare));
+ ix = (Math.Tan(psiHash) / ((720.0 * rho * Math.Pow(v, 5)))) * (61 + 90.0 * Math.Pow(Math.Tan(psiHash), 2) + 45.0 * Math.Pow(Math.Tan(psiHash), 4));
+ Tx2 = (1.0 / Math.Cos(psiHash)) / v;
+ xi = (1.0 / Math.Cos(psiHash)) / (6.0 * Math.Pow(v, 3)) * ((v / rho) + (2.0 * Math.Pow(Math.Tan(psiHash), 2)));
+ xii = (1.0 / Math.Cos(psiHash)) / (120.0 * Math.Pow(v, 5)) * (5.0 + (28.0 * Math.Pow(Math.Tan(psiHash), 2)) + (24.0 * Math.Pow(Math.Tan(psiHash), 4)));
+ xiia = ((1.0 / Math.Cos(psiHash)) / (5040.0 * Math.Pow(v, 7))) * (61.0 + (662.0 * Math.Pow(Math.Tan(psiHash), 2)) + (1320.0 * Math.Pow(Math.Tan(psiHash), 4)) + (720.0 * Math.Pow(Math.Tan(psiHash), 6)));
+ latiRad = psiHash - (vii * Math.Pow((this.xcoord - eO), 2)) + (viii * Math.Pow((this.xcoord - eO), 4)) - (ix * Math.Pow((this.xcoord - eO), 6));
+ longiRad = longTrue + (Tx2 * (this.xcoord - eO)) - (xi * (Math.Pow((this.xcoord - eO), 3))) + (xii * (Math.Pow((this.xcoord - eO), 5))) - (xiia * (Math.Pow((this.xcoord - eO), 7)));
+ //Console.WriteLine(latiRad * (180 / Math.PI));
+ //Console.WriteLine(longiRad * (180 / Math.PI));
+ //OSGB36 Latitude Longitude Height to OSGB36 Cartesian XYZ
+ v2 = a / (Math.Sqrt(1 - (eSquared * ((Math.Pow(Math.Sin(latiRad), 2))))));
+ cartX = (v2 + Height2) * Math.Cos(latiRad) * Math.Cos(longiRad);
+ cartY = (v2 + Height2) * (Math.Cos(latiRad) * Math.Sin(longiRad));
+ cartZ = ((v2 * (1 - eSquared)) + Height2) * Math.Sin(latiRad);
+ //Console.WriteLine();
+ //Console.WriteLine(cartX);
+ //Console.WriteLine(cartY);
+ //Helmert Datum Transformation (OSGB36 to WGS84)
+ helmertX = cartX + (cartX * scaleChange) - (cartY * rotZ) + (cartZ * rotY) + transParallelX;
+ helmertY = (cartX * rotZ) + cartY + (cartY * scaleChange) - (cartZ * rotX) + transParallelY;
+ helmertZ = (-1 * cartX * rotY) + (cartY * rotX) + cartZ + (cartZ * scaleChange) + transParallelZ;
+ //Console.WriteLine();
+ //Console.WriteLine(helmertX);
+ //Console.WriteLine(helmertY);
+ //WGS84 Cartesian XYZ to WGS84 Latitude, longitude and Ellipsoidal height
+ rootXYSqr = Math.Sqrt((Math.Pow(helmertX, 2)) + (Math.Pow(helmertY, 2)));
+ eSquared2 = (Math.Pow(a2, 2) - Math.Pow(b2, 2)) / Math.Pow(a2, 2);
+ PHI1 = Math.Atan(helmertZ / (rootXYSqr * (1 - eSquared2)));
+ v3 = a2 / (Math.Sqrt(1.0 - (eSquared2 * ((Math.Pow(Math.Sin(PHI1), 2))))));
+ PHI2 = Math.Atan((helmertZ + (eSquared2 * v3 * (Math.Sin(PHI1)))) / rootXYSqr);
+ while (Math.Abs(PHI1 - PHI2) > 0.000000001)
+ {
+ PHI1 = PHI2;
+ v3 = a2 / (Math.Sqrt(1 - (eSquared2 * ((Math.Pow(Math.Sin(PHI1), 2))))));
+ PHI2 = Math.Atan((helmertZ + (eSquared2 * v3 * (Math.Sin(PHI1)))) / rootXYSqr);
+ }
+ PHI = PHI2;
+ finalLati = PHI * (180.0 / Math.PI);
+ finalLongi = (Math.Atan(helmertY / helmertX)) * (180.0 / Math.PI);
+ this.xcoord = finalLongi;
+ this.ycoord = finalLati;
+ }
+
+ public void transformUTMPoint()
+ {
+ //transforms coordinates in UTM WGS84 to lat long
+ //requires x, y, zone and north/south
+ //the code in this function was found at http://home.hiwaay.net/~taylorc/toolbox/geography/geoutm.html
+ //made by Chuck Taylor
+ //tested in xls for points in Poland, Turkey and South Africa
+
+ // The code first calculates TM coordinates from UTM coordinates
+ // Then calculates corresponding latitude and longitude in radians
+ // Before converting back to degrees
+
+ // first version ArT 12-06-09
+
+ double footpointlatitude = 0;
+ double UTMscalefactor = 0.9996;
+ double centralmeridian_deg = 0;
+ double centralmeridian_rad = 0;
+ double y_ = 0;
+ double WGS84_sm_a = 6378137;
+ double WGS84_sm_b = 6356752.314;
+ double n = (WGS84_sm_a-WGS84_sm_b) / (WGS84_sm_a+WGS84_sm_b);
+
+ this.xcoord = (this.xcoord - 500000) / UTMscalefactor;
+ if (this.south) this.ycoord = (this.ycoord - 10000000) / UTMscalefactor;
+ else this.ycoord /= UTMscalefactor;
+
+ centralmeridian_deg = -183 + (this.UTMzone * 6);
+ centralmeridian_rad = centralmeridian_deg / 180 * Math.PI;
+
+ double alpha = (((WGS84_sm_a+WGS84_sm_b)/2)*(1+Math.Pow(n,2)/4)+(Math.Pow(n,4)/64));
+ double beta = (3*n/2)+(-27*Math.Pow(n,3)/32)+(269*Math.Pow(n,5)/512);
+ double gamma = (21*Math.Pow(n,2)/16)+(-55*Math.Pow(n,4)/32);
+ double delta = (151*Math.Pow(n,3)/96)+(-417*Math.Pow(n,5)/128);
+ double epsilon = (1097*Math.Pow(n,4)/512);
+
+ y_ = this.ycoord / (alpha);
+ footpointlatitude = y_ + (beta*Math.Sin(2*y_)) + (gamma*Math.Sin(4*y_)) + (delta*Math.Sin(6*y_)) + (epsilon*Math.Sin(8*y_));
+
+ double ep2 = (Math.Pow(WGS84_sm_a,2)-Math.Pow(WGS84_sm_b,2)) / Math.Pow(WGS84_sm_b,2);
+ double cf = Math.Cos(footpointlatitude);
+ double nuf2 = ep2*Math.Pow(cf,2);
+ double nf = Math.Pow(WGS84_sm_a,2)/(WGS84_sm_b*Math.Sqrt(1+nuf2));
+
+ double tf = Math.Tan(footpointlatitude);
+ double tf2 = Math.Pow(tf,2);
+ double tf4 = Math.Pow(tf,4);
+
+ double x1frac = 1 /(1* Math.Pow(nf,1) * cf);
+ double x2frac = tf /(2* Math.Pow(nf,2));
+ double x3frac = 1 /(6* Math.Pow(nf,3) * cf);
+ double x4frac = tf /(24* Math.Pow(nf,4));
+ double x5frac = 1 /(120* Math.Pow(nf,5) * cf);
+ double x6frac = tf /(720* Math.Pow(nf,6));
+ double x7frac = 1 /(5040* Math.Pow(nf,7) * cf);
+ double x8frac = tf /(40320*Math.Pow(nf,8));
+
+ double x2poly = -1 - nuf2;
+ double x3poly = -1 - nuf2 - (2*tf2);
+ double x4poly = 5 + 3*tf2+6*nuf2-6*tf2*nuf2-3*Math.Pow(nuf2,2)-9*tf2*nuf2*nuf2;
+ double x5poly = 5 + 28*tf2+24*tf4+6*nuf2+8*tf2*nuf2;
+ double x6poly = -61 - 90*tf2-45*tf4-107*nuf2+162*tf2*nuf2;
+ double x7poly = -61 - 662*tf2-1320*tf4-720*tf4*tf2;
+ double x8poly = 1385 + 3633*tf2+4095*tf4+1575*tf4*tf2;
+
+ double latitude = footpointlatitude
+ + x2frac*x2poly*Math.Pow(this.xcoord,2)
+ + x4frac*x4poly*Math.Pow(this.xcoord,4)
+ + x6frac*x6poly*Math.Pow(this.xcoord,6)
+ + x8frac*x8poly*Math.Pow(this.xcoord,8);
+ double longitude = centralmeridian_rad
+ + x1frac * 1 *Math.Pow(this.xcoord,1)
+ + x3frac*x3poly*Math.Pow(this.xcoord,3)
+ + x5frac*x5poly*Math.Pow(this.xcoord,5)
+ + x7frac*x7poly*Math.Pow(this.xcoord,7);
+
+ this.ycoord = latitude / Math.PI * 180;
+ this.xcoord = longitude / Math.PI * 180;
+ }
+
+ }
+
+
+}
+
+
+
+
diff --git a/Makefile b/Makefile
index 7f25831..abac376 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@ TARGET := bin/HAIL-CAESAR.exe
SRCEXT := cpp
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
-CFLAGS := -g -std=c++11 -fopenmp $(GITREV) -DOMP_COMPILE_FOR_PARALLEL #-Wall -DDEBUG
+CFLAGS := -O3 -std=c++11 -fopenmp $(GITREV) -DOMP_COMPILE_FOR_PARALLEL #-DDEBUG
LIB := -fopenmp
INC := -I include
diff --git a/include/catchmentmodel/LSDCatchmentModel.hpp b/include/catchmentmodel/LSDCatchmentModel.hpp
index dea825d..894cf4d 100644
--- a/include/catchmentmodel/LSDCatchmentModel.hpp
+++ b/include/catchmentmodel/LSDCatchmentModel.hpp
@@ -95,10 +95,15 @@ class LSDCatchmentModel: public LSDRaster
/// @brief Is this a hydrology only simulation?
/// I.e. no erosion methods.
bool is_hydro_only() const { return hydro_only; }
+ bool is_stage_mode() const { return stage_mode_input; }
+ bool is_tide_mode() const { return tide_mode_input; }
bool groundwater_mode() const { return groundwater_on; }
bool groundwater_basic_model() const { return groundwater_basic; }
bool groundwater_SLiM_model() const { return groundwater_SLiM; }
+ // Number of stage input stations (or tidal inputs)
+ int get_number_stage_inputs() const { return number_of_stage_points; }
+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// INPUT/OUTPUT
// Methods for loading and manipulating files
@@ -113,6 +118,8 @@ class LSDCatchmentModel: public LSDRaster
/// as well as those default initial values in the code.
void print_parameters();
+ void print_stage_data(std::vector);
+
/// @brief Loads the rainfall data file which is in a special format (headerless text file)
/// @author DAV
/// @details Rainfall data file is not too big, so think it's okay to use the vector
@@ -122,6 +129,11 @@ class LSDCatchmentModel: public LSDRaster
/// @return Returns a vector of vector. (A 2D-like vector).
std::vector< std::vector > read_rainfalldata(std::string FILENAME);
+ /// Reads the stage date directly into the stage_inputs_vector
+ void read_stagedata(std::string FILENAME);
+ void read_tide_data(std::string FILENAME);
+
+
/// @brief Reads in the grain data file, note, that this is not a raster and in
/// a special format like the rainfall file.
/// @author DAV
@@ -344,6 +356,10 @@ class LSDCatchmentModel: public LSDRaster
/// @brief Calculates the hydrological inputs using just reach mode
void reach_water_and_sediment_input();
+ void stage_input();
+ void tide_input();
+
+ void read_tide_data();
std::vector > read_reachfile(std::string REACHINPUTFILE);
/// @brief Gets the number of catchment cells that have water input to them
@@ -401,6 +417,8 @@ class LSDCatchmentModel: public LSDRaster
/// during periods of low water flow. (e.g. inter-storm periods.)
void set_inputoutput_diff();
+ void stage_tidal_input(double local_time_factor);
+
// =-=-=-=-=-=-=-=-=-=-=
// VEGETATION
// =-=-=-=-=-=-=-=-=-=-=
@@ -446,8 +464,15 @@ class LSDCatchmentModel: public LSDRaster
const std::array deltaY = {{0, -1, -1, 0, 1, 1, 1, 0, -1}};
double water_depth_erosion_threshold = 0.01;
+
+ // Reach inputs
int reach_input_data_timestep = 60;
- int stage_reach_input_data_timestep = 60;
+
+
+
+
+
+
int number_of_points = 0;
double globalsediq = 0;
double time_1 = 1;
@@ -607,6 +632,7 @@ class LSDCatchmentModel: public LSDRaster
TNT::Array2D qy;
TNT::Array2D qxs;
TNT::Array2D qys;
+
// TODO - these are for the dune model which is as of yet unimplemented
TNT::Array2D area_depth;
TNT::Array2D sand;
@@ -629,6 +655,47 @@ class LSDCatchmentModel: public LSDRaster
std::string reach2_input_file;
std::string reach3_input_file;
+ // Stage and tide inputs
+
+ // OLD - singular file vars for stage
+ //std::string stage_inputfile;
+ //int stage_reach_input_data_timestep = 60;
+ //int fromx = 0, tox = 0, fromy = 0, toy = 0;
+ //std::vector stage_inputs_vector;
+
+ // Vars for the multiple stage inputs
+ // NOT USED YET - USE THE OLD METHOD VARS BELOW
+ int number_of_stage_points = 1;
+
+ // TODO - Implement more generic multi-stage options
+ std::vector< std::vector > stage_inputs_vectors; // 2D "Table" of all the input stages for each stage.
+ std::vector stage_input_filenames;
+ std::vector stage_input_timesteps;
+ std::vector fromxs;
+ std::vector toxs;
+ std::vector fromys;
+ std::vector toys;
+
+ // Multiple stage and tide inputs - you could do it this way but its not very scalable.
+ std::string stage_inputfile;
+ std::string stage_datum_type;
+ int stage_reach_input_data_timestep = 60;
+ int stage_fromx = 0, stage_tox = 0, stage_fromy = 0, stage_toy = 0; // Bounding box to set stage and tide inputs
+
+ std::string tide_inputfile;
+ std::string tide_datum_type;
+ int tide_input_data_timestep = 60;
+ int tide_fromx = 0, tide_tox = 0, tide_fromy = 0, tide_toy = 0; // Bounding box to set stage and tide inputs
+
+ // Stage / tide inputfile
+ std::vector stage_inputs_vector;
+ std::vector tide_inputs_vector;
+
+ // Arrays for stage/tidal mode input points
+ TNT::Array2D stagepoints;
+ TNT::Array2D stagepointsarray;
+
+ // TODO, careful these are actually row cols and need clarifying in the docs or chaning internally.
int reach1_x;
int reach1_y;
int reach2_x;
@@ -643,11 +710,8 @@ class LSDCatchmentModel: public LSDRaster
std::vector< std::vector > hourly_rain_data;
std::vector > > inputfile;
//TNT::Array3D inputfile;
- std::vector stage_inputfile;
- // TODO above these all need initialising from read ins.
-
- double stage_input_time_step = 1;
+ // TODO above these all need initialising from read ins.
std::vector catchment_input_x_coord;
std::vector catchment_input_y_coord;
@@ -700,6 +764,8 @@ class LSDCatchmentModel: public LSDRaster
// (Dear god I've been working on this code for 9 years nearly...)
bool recirculate_opt = false;
bool reach_mode_opt = false;
+ bool stage_mode_input = false;
+ bool tide_mode_input = false;
bool dunes_opt = false;
bool bedrock_lower_opt = false;
bool physical_weather_opt = false;
diff --git a/src/catchmentmodel/LSDCatchmentModel.cpp b/src/catchmentmodel/LSDCatchmentModel.cpp
index 75e9315..46c33ed 100644
--- a/src/catchmentmodel/LSDCatchmentModel.cpp
+++ b/src/catchmentmodel/LSDCatchmentModel.cpp
@@ -716,6 +716,89 @@ std::vector< std::vector > LSDCatchmentModel::read_rainfalldata(
return raingrid;
}
+
+void LSDCatchmentModel::read_stagedata(
+ string FILENAME)
+{
+ std::cout << "\n\n Loading Stage/Tide/Levels File, \
+ the filename is: "
+ << FILENAME << std::endl;
+
+ // open the data file
+ std::ifstream infile(FILENAME.c_str());
+
+ std::string line;
+ int i = 0;
+
+
+ while (std::getline(infile, line))
+ {
+ double value;
+ value = std::stod(line); // Assumption in this simplified reader is one value per line
+ //std::stringstream ss(line);
+
+ stage_inputs_vector[i] = value;
+
+
+ //stage_inputs_vector.push_back(std::vector());
+
+ // Stage file is only a single column of values, no nested inner vector/loop needed
+ /*
+ while (ss >> value)
+ {
+ stage_inputs_vector[i].push_back(value);
+ }
+ */
+ ++i;
+ }
+ //return stage_inputs_vector;
+ #ifdef DEBUG
+ print_stage_data(stage_inputs_vector);
+ #endif
+}
+
+
+void LSDCatchmentModel::read_tide_data(
+ string FILENAME)
+{
+ std::cout << "\n\n Loading Stage/Tide/Levels File, \
+ the filename is: "
+ << FILENAME << std::endl;
+
+ // open the data file
+ std::ifstream infile(FILENAME.c_str());
+
+ std::string line;
+ int i = 0;
+
+
+ while (std::getline(infile, line))
+ {
+ double value;
+ value = std::stod(line); // Assumption in this simplified reader is one value per line
+ //std::stringstream ss(line);
+
+ tide_inputs_vector[i] = value;
+
+
+ //stage_inputs_vector.push_back(std::vector());
+
+ // Stage file is only a single column of values, no nested inner vector/loop needed
+ /*
+ while (ss >> value)
+ {
+ stage_inputs_vector[i].push_back(value);
+ }
+ */
+ ++i;
+ }
+ //return stage_inputs_vector;
+ #ifdef DEBUG
+ print_stage_data(tide_inputs_vector);
+ #endif
+}
+
+
std::vector< std::vector > LSDCatchmentModel::read_reachfile(
string REACHINPUTFILENAME)
{
@@ -794,6 +877,7 @@ void LSDCatchmentModel::print_rainfall_data()
}
}
+
// void LSDCatchmentModel::OLD_print_reach_data()
// {
// std::vector< std::vector< std::vector > > vector3d = inputfile;
@@ -829,6 +913,17 @@ void LSDCatchmentModel::print_reach_data()
std::cout << "\n";
}
+void LSDCatchmentModel::print_stage_data(std::vector vector)
+{
+ for( std::vector::const_iterator i = vector.begin(); i != vector.end(); ++i)
+ {
+ int index_num_i = i - vector.begin();
+ std::cout << "~~~~~~~~ TIDE/STAGE AT TIME INDEX: ~~~~~~~~~~" << "[ " << index_num_i << " ]" << std::endl;
+ cout<<*i<<' ';
+ }
+ std::cout << "\n";
+}
+
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// This function gets all the data from a parameter file
//
@@ -1469,6 +1564,84 @@ void LSDCatchmentModel::initialise_variables(std::string pname,
std::cout << "reach input data timestep: " << reach_input_data_timestep << std::endl;
}
+ //=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ // Stage Mode
+ //=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ else if (lower == "stage_mode_input_on")
+ {
+ stage_mode_input = (value == "yes") ? true : false;
+ }
+ else if (lower == "number_of_stage_points")
+ {
+ number_of_stage_points = atoi(value.c_str());
+ }
+ else if (lower == "tide_mode_input_on")
+ {
+ tide_mode_input = (value == "yes") ? true : false;
+ }
+
+
+ // OLD SINGLE VARS, use these for now, but ideally need a more scalable solution.
+ // Backwards compatible with the old function
+ else if (lower == "stage_inputfile")
+ {
+ stage_inputfile = value;
+ }
+ else if (lower == "stage_input_timestep")
+ {
+ stage_reach_input_data_timestep = atoi(value.c_str());
+ }
+ else if (lower == "stage_fromx")
+ {
+ stage_fromx = atoi(value.c_str());
+ }
+ else if (lower == "stage_tox")
+ {
+ stage_tox = atoi(value.c_str());
+ }
+ else if (lower == "stage_fromy")
+ {
+ stage_fromy = atoi(value.c_str());
+ }
+ else if (lower == "stage_toy")
+ {
+ stage_toy = atoi(value.c_str());
+ }
+ else if (lower == "stage_datum_type")
+ {
+ stage_datum_type = value;
+ }
+
+ // TIDE
+ else if (lower == "tide_inputfile")
+ {
+ tide_inputfile = value;
+ }
+ else if (lower == "tide_input_timestep")
+ {
+ tide_input_data_timestep = atoi(value.c_str());
+ }
+ else if (lower == "tide_fromx")
+ {
+ tide_fromx = atoi(value.c_str());
+ }
+ else if (lower == "tide_tox")
+ {
+ tide_tox = atoi(value.c_str());
+ }
+ else if (lower == "tide_fromy")
+ {
+ tide_fromy = atoi(value.c_str());
+ }
+ else if (lower == "tide_toy")
+ {
+ tide_toy = atoi(value.c_str());
+ }
+ else if (lower == "tide_datum_type")
+ {
+ tide_datum_type = value;
+ }
+
//=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Groundwater
//=-=-=-=-=-=-=-=-=-=-=-=-=-=
@@ -1662,7 +1835,17 @@ void LSDCatchmentModel::initialise_arrays()
// TODO use vector isntead
//inputfile = TNT::Array3D (number_of_points,(int)((maxcycle*60)/reach_input_data_timestep)+10,16);
- stage_inputfile = std::vector ((int)((maxcycle * 60) / stage_reach_input_data_timestep) + 10);
+ int vector_len_stage = static_cast((maxcycle * 60) / stage_reach_input_data_timestep);
+ int vector_len_tide = static_cast((maxcycle * 60) / tide_input_data_timestep);
+ #ifdef DEBUG
+ std::cout << "DEBUG Maxcycle is: " << maxcycle << "\n";
+ std::cout << "DEBUG stage timestep is: " << stage_reach_input_data_timestep << "\n";
+ std::cout << "DEBUG Vector size allocation will be (no of elements): " << vector_len_stage << "\n";
+ #endif
+ stage_inputs_vector = std::vector (vector_len_stage + 10, 0.0); // Initialise zeros
+ tide_inputs_vector = std::vector (vector_len_tide + 10, 0.0); // Initialise zeros
+
+ // Vector needs to be length of maximum cycle (Model hours -> Model minutes, then divide by stage timestep to get no of timesteps in vector for stage data)
// Will come back to this later - DAV
@@ -1766,6 +1949,44 @@ void LSDCatchmentModel::initialise_arrays()
fallVelocity = std::vector(G_MAX+1, 0.0);
set_fall_velocities();
+
+ // Stage/Tide Mode
+ if (stage_mode_input)
+ {
+ std::string STAGE_FULLFILENAME = read_path + "/" + stage_inputfile;
+
+ if (!does_file_exist(STAGE_FULLFILENAME))
+ {
+ std::cout << "No stage input data file found by name of: "
+ << STAGE_FULLFILENAME << std::endl
+ << "You specified to use a stage/levels mode input file, \
+ \n but no matching file was found. Try again." << std::endl;
+ exit(EXIT_FAILURE);
+ }
+ std::cout << "FOR STAGE FILE ZONE 1" << std::endl;
+ read_stagedata(STAGE_FULLFILENAME);
+ }
+
+
+
+ // Stage/Tide Mode
+ if (tide_mode_input)
+ {
+ std::string TIDE_FULLFILENAME = read_path + "/" + tide_inputfile;
+
+ if (!does_file_exist(TIDE_FULLFILENAME))
+ {
+ std::cout << "No tide input data file found by name of: "
+ << TIDE_FULLFILENAME << std::endl
+ << "You specified to use a tide mode input file, \
+ \n but no matching file was found. Try again." << std::endl;
+ exit(EXIT_FAILURE);
+ }
+ std::cout << "FOR TIDE FILE ZONE 1" << std::endl;
+ read_tide_data(TIDE_FULLFILENAME);
+ }
+
+
// Reach mode
if (reach_mode_opt)
{
@@ -3849,6 +4070,102 @@ void LSDCatchmentModel::scan_area()
}
+void LSDCatchmentModel::stage_input() // local_time_factor now a function call within function.
+{
+
+ //double flow_timestep = get_flow_timestep();
+
+/* #ifdef DEBUG
+ std::cout << "ENTERING STAGE INPUTS UPDATE\n";
+ #endif */
+
+ #ifdef DEBUG_LVL_3
+ std::cout << "From x: " << stage_fromx << " To x: " << stage_tox << "\n";
+ std::cout << "From y: " << stage_fromy << " To y: " << stage_toy << "\n";
+ #endif
+
+
+ //for (int i : number_of_stage_points)
+ //{
+ // For each stage file, add the water to the catchment, getting the current extent and inputs from said file.
+ // You will still need to have read in the files in the initialisation section.
+ //int fromx = fromxs[i]; // fromys = [34, 53, 12] etc... vector of the x points
+ //int tox = toxs[i]; // etc
+ //int fromy = fromys[i];
+ //int toy = toys[i];
+
+ //int stage_reach_input_data_timestep = stage_input_timesteps[i]; // vector of all the input timesteps
+
+ for (int x = std::min(stage_fromx, stage_tox); x <= std::max(stage_fromx, stage_tox); x++)
+ {
+ for (int y = std::min(stage_fromy, stage_toy); y <= std::max(stage_fromy, stage_toy); y++)
+ {
+ double interpolated_input1 = stage_inputs_vector[static_cast(cycle / stage_reach_input_data_timestep)];
+ double interpolated_input2 = stage_inputs_vector[static_cast(cycle / stage_reach_input_data_timestep) + 1];
+ double proportion_between_time1and2 = (((static_cast(cycle / stage_reach_input_data_timestep) + 1) * stage_reach_input_data_timestep) - cycle)
+ / stage_reach_input_data_timestep;
+
+ double input = interpolated_input1 + ((interpolated_input2 - interpolated_input1) * (1 - proportion_between_time1and2));
+
+ if ((elev[x][y] > no_data_value) && (input > elev[x][y]))
+ {
+ /* #ifdef DEBUG
+ std::cout << "CALCULATING WATER INPUTS FOR STAGE INPUT\n";
+ #endif */
+ water_depth[x][y] = input - elev[x][y];
+ /* if (suspended_opt)
+ {
+ if (water_depth[x][y] > 0)
+ {
+ Vsusptot[x][y] = water_depth[x][y] * 0.001; //0.0005 is 500mg l.. approx.
+ }
+ } */
+ }
+ }
+ }
+ //}
+}
+
+
+
+
+void LSDCatchmentModel::tide_input() // local_time_factor now a function call within function.
+{
+ #ifdef DEBUG_LVL_3
+ std::cout << "From x: " << tide_fromx << " To x: " << tide_tox << "\n";
+ std::cout << "From y: " << tide_fromy << " To y: " << tide_toy << "\n";
+ #endif
+
+ for (int x = std::min(tide_fromx, tide_tox); x <= std::max(tide_fromx, tide_tox); x++)
+ {
+ for (int y = std::min(tide_fromy, tide_toy); y <= std::max(tide_fromy, tide_toy); y++)
+ {
+ double interpolated_input1 = tide_inputs_vector[static_cast(cycle / tide_input_data_timestep)];
+ double interpolated_input2 = tide_inputs_vector[static_cast(cycle / tide_input_data_timestep) + 1];
+ double proportion_between_time1and2 = (((static_cast(cycle / tide_input_data_timestep) + 1) * tide_input_data_timestep) - cycle)
+ / tide_input_data_timestep;
+
+ double input = interpolated_input1 + ((interpolated_input2 - interpolated_input1) * (1 - proportion_between_time1and2));
+
+ if ((elev[x][y] > no_data_value) && (input > elev[x][y]))
+ {
+ /* #ifdef DEBUG
+ std::cout << "CALCULATING WATER INPUTS FOR STAGE INPUT\n";
+ #endif */
+ water_depth[x][y] = input - elev[x][y];
+ /* if (suspended_opt)
+ {
+ if (water_depth[x][y] > 0)
+ {
+ Vsusptot[x][y] = water_depth[x][y] * 0.001; //0.0005 is 500mg l.. approx.
+ }
+ } */
+ }
+ }
+ }
+
+}
+
// __________________________________________
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// EROSIONAL METHODS
diff --git a/src/main.cpp b/src/main.cpp
index 9e93282..6f9283d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -152,6 +152,18 @@ int main(int argc, char *argv[])
// In reach mode, add the reach inputs and hydrology
simulation.reach_water_and_sediment_input();
+
+ // Stage mode
+ if (simulation.is_stage_mode())
+ {
+ int num_stage_inputs = simulation.get_number_stage_inputs();
+ simulation.stage_input();
+ }
+ // Tide mode
+ if (simulation.is_tide_mode())
+ {
+ simulation.tide_input();
+ }
// Add water to the catchment from rainfall input file
simulation.catchment_waterinputs(runoff);
// Distribute the water with the LISFLOOD Cellular Automaton algorithm
diff --git a/test/input_data/idealised/Idealised.params b/test/input_data/idealised/Idealised.params
index 424b605..0b8f1e8 100644
--- a/test/input_data/idealised/Idealised.params
+++ b/test/input_data/idealised/Idealised.params
@@ -9,7 +9,7 @@ Plane with E->W sloping gradient 11x11
dem_read_extension: asc
dem_write_extension: asc
read_path: /home/decval/dev/HAIL-CAESAR/test/input_data/idealised/
-write_path: /home/decval/dev/HAIL-CAESAR/test/results/idealised_reach_spat_manning/
+write_path: /home/decval/dev/HAIL-CAESAR/test/results/idealised_reach_basic//
read_fname: idealised
write_fname: idealised_reach.dat
timeseries_save_interval: 60
@@ -18,7 +18,7 @@ timeseries_save_interval: 60
#====================
# REMEMBER TO SPECIFY A BEDROCK DEM FILE IF YOU TURN THIS ON
spatial_mannings_dem_file: spatial_mannings.asc
-spatially_variable_mannings_on: yes
+spatially_variable_mannings_on: no
# NUMERICAL
#===========
diff --git a/test/input_data/idealised/Idealised_stage.params b/test/input_data/idealised/Idealised_stage.params
new file mode 100644
index 0000000..a7c6227
--- /dev/null
+++ b/test/input_data/idealised/Idealised_stage.params
@@ -0,0 +1,145 @@
+# LSDCatchmentModel (DAV Version) Parameter File
+# 04/04/2020
+
+Idealised, reach mode test
+Plane with E->W sloping gradient 11x11
+
+# FILE INFORMATION
+#==================
+dem_read_extension: asc
+dem_write_extension: asc
+read_path: /home/decval/dev/HAIL-CAESAR/test/input_data/idealised/
+write_path: /home/decval/dev/HAIL-CAESAR/test/results/idealised_reach_basic//
+read_fname: idealised
+write_fname: idealised_reach.dat
+timeseries_save_interval: 60
+
+# SUPPLEMENTARY FILES
+#====================
+# REMEMBER TO SPECIFY A BEDROCK DEM FILE IF YOU TURN THIS ON
+spatial_mannings_dem_file: spatial_mannings.asc
+spatially_variable_mannings_on: no
+
+# NUMERICAL
+#===========
+min_time_step: 0 # IN SECONDS
+max_time_step: 3600 # IN SECONDS
+run_time_start: 0 # ZERO UNLESS RESTARTING RUN
+max_run_duration: 131400 # IN MODEL HOURS, MUST BE T-1, I.E. '71' FOR 72HR SIMULATION - SORRY!
+memory_limit: 1 # IGNORE
+
+# SEDIMENT
+#==========
+transport_law: wilcock # CHOICES ARE wilcock OR einstein
+max_tau_velocity: 5 # METRES/SECOND
+active_layer_thickness: 0.1 # METRES
+chann_lateral_erosion: 10 # IN CHANNEL LATERAL EROSION RATE, PREVENTS OVERDEEPENING FEEDBACK
+erosion_limit: 0.02 # LIMITS THE MOUNT OF EROSION PER TIMESTEP
+suspended_sediment_on: yes # 1ST FRACTION ONLY, AT PRESENT
+read_in_graindata_from_file: no # MUST SPECIFY GRAINDATA FILE ABOVE IF YES
+
+# LATERAL EROSION
+#=================
+lateral_erosion_on: no # UNTESTED! - LATERAL EROSION NOT FULLY IMPLEMENTED YET
+lateral_erosion_const: 0.001 # LATERAL EROSION CONSTANT
+edge_smoothing_passes: 30 # NUMBER OF PASSES FOR EDGE SMOOTHING FILTER
+downstream_cell_shift: 3 # CELLS TO SHIFT LATERAL EROSION DOWNSTREAM
+lateral_cross_chan_smoothing: 0.0001 # MAX DIFFERENCE IN CROSS CHANNEL SMOOTHING OF EDGE VALUES
+
+# HYDROLOGY
+#===========
+hydro_model_only: yes # SWITCHES OFF THE EROSION
+topmodel_m_value: 0.015 # SEE LITERATURE FOR GUIDANCE
+in_out_difference: 5 # CUMECS, UNTESTED
+min_q_for_depth_calc: 0.1 # CUMECS
+max_q_for_depth_calc: 1000 # CUMECS
+water_depth_erosion_threshold: 0.01 # METRES
+slope_on_edge_cell: 0.001 # SHOULD BE APPROX EQUAL TO CHAN SLOPE NEAR OUTLET
+evaporation_rate: 0.0 # NOT YET IMPLEMENTED
+courant_number: 0.7 # NO LOWER THAN 3 PLEASE, MAX AROUND 0.7 - NUMERICAL STABILITY CONTROL
+froude_num_limit: 0.8 # CONTROLS FLOW BETWEEN CELLS PER TIME STEP (SEE DOCS)
+mannings_n: 0.04 # SEE LITERATURE FOR GUIDANCE
+hflow_threshold: 0.001 # IN METRES, DETERMINES IF HORIZ. FLOW CALCULATED
+
+# REACH MODE HYDROLOGY
+#=====================
+reach_mode: yes # Run in reach mode with input discharge data
+divide_inputs_by: 3
+reach_input_data_timestep: 6000000
+
+# REACH INPUTS
+#==============
+
+reach1_input_file: input2.txt
+reach1_input_on: yes
+reach1_x: 10
+reach1_y: 4
+
+reach2_input_file: input2.txt
+reach2_input_on: yes
+reach2_x: 10
+reach2_y: 5
+
+reach3_input_file: input2.txt
+reach3_input_on: yes
+reach3_x: 10
+reach3_y: 6
+
+# STAGE INPUTS
+#==============
+
+stage_mode_input_on: yes
+stage_input_timestep: 60
+fromx: 9
+tox: 10
+fromy: 3
+toy: 6
+
+
+# PRECIPITATION
+#==============
+rainfall_data_on: no # IF YES, HAVE YOU SET A RAINFALL FILE?
+ # VALUES IN MM/HR, REGARDLESS OF TIMESTEP
+rain_data_time_step: 60 # MINUTES, MUST MATCH RAINFALL FILE
+spatial_var_rain: no # IF YES, HAVE YOU SET A HYDROINDEX FILE?
+num_unique_rain_cells: 1 # SHOULD MATCH NO. OF HYDROINDEX ZONES, COUNT THEM
+spatially_complex_rainfall_on: no # UNTESTED...
+interpolation_method: cubic # CAREFUL NOW.
+generate_artificial_rainfall: no # PIPE DREAM.
+
+
+# VEGETATION
+#===========
+vegetation_on: yes # VEGETATION NOT IMPLEMENTED/TESTED YET
+grass_grow_rate: 0.0 # TIME IN WHICH VEGETATION REACHES MATURITY IN YEARS
+vegetation_crit_shear: 5.0 # VALUE ABOVE WHICH VEGETATION REMOVED BY EROSION
+veg_erosion_prop: 0.1 # PROPORTION OF EROSION ALLOWED TO OCCUR WHEN VEG IS FULLY GROWN
+
+# HILLSLOPE
+#==========
+creep_rate: 0.0025 # METRES/YEAR (?UNTESTED)
+slope_failure_thresh: 45 # CRITICAL ANGLE OF FAILURE
+soil_erosion_rate: 0.0
+soil_j_mean_depends: yes # UNTESTED
+call_muddpile_model: yes # NOT YET IMPLEMENTED
+
+# WRITE OUTPUT RASTERS
+#======================
+raster_output_interval: 100000 # IN MODEL MINUTES
+write_waterdepth_file: yes
+waterdepth_outfile_name: WaterDepths
+write_elev_file: no
+write_elevation_file: Elevations
+write_grainsize_file: no
+grainsize_file: Grainz
+
+write_elevdiff_file: no
+elevdiff_outfile_name: ElevationDiff
+
+raingrid_fname_out: raindata_grid # MAINLY FOR DEBUG PURPOSES,
+ # YOU DON'T REALLY NEED TO PRINT THIS OUT
+
+# DEBUG OPTIONS
+#================
+debug_print_cycle: yes # PRINTS THE CURRENT CYCLE ITERATION TO CONSOLE
+debug_write_raingrid: no # WRITES RAINGRID RASTER EVERY CALC_J() CALLED (WARNING: LOTS OF DATA!)
diff --git a/test/input_data/idealised_multi_stage/Idealised_multi_stage.params b/test/input_data/idealised_multi_stage/Idealised_multi_stage.params
new file mode 100644
index 0000000..a3bafd8
--- /dev/null
+++ b/test/input_data/idealised_multi_stage/Idealised_multi_stage.params
@@ -0,0 +1,159 @@
+# LSDCatchmentModel (DAV Version) Parameter File
+# 04/04/2020
+
+Idealised, stage mode test
+Set multiple inputs at differnt points.
+Plane with E->W sloping gradient 11x11
+
+# FILE INFORMATION
+#==================
+dem_read_extension: asc
+dem_write_extension: asc
+read_path: /home/decval/dev/HAIL-CAESAR/test/input_data/idealised_multi_stage/
+write_path: /home/decval/dev/HAIL-CAESAR/test/results/idealised_multi_stage/
+read_fname: idealised
+write_fname: idealised_multi_stage.dat
+timeseries_save_interval: 60
+
+# SUPPLEMENTARY FILES
+#====================
+# REMEMBER TO SPECIFY A BEDROCK DEM FILE IF YOU TURN THIS ON
+spatial_mannings_dem_file: spatial_mannings.asc
+spatially_variable_mannings_on: no
+
+# NUMERICAL
+#===========
+min_time_step: 0 # IN SECONDS
+max_time_step: 3600 # IN SECONDS
+run_time_start: 0 # ZERO UNLESS RESTARTING RUN
+max_run_duration: 2824 # IN MODEL HOURS, MUST BE T-1, I.E. '71' FOR 72HR SIMULATION - SORRY!
+memory_limit: 1 # IGNORE
+
+# SEDIMENT
+#==========
+transport_law: wilcock # CHOICES ARE wilcock OR einstein
+max_tau_velocity: 5 # METRES/SECOND
+active_layer_thickness: 0.1 # METRES
+chann_lateral_erosion: 10 # IN CHANNEL LATERAL EROSION RATE, PREVENTS OVERDEEPENING FEEDBACK
+erosion_limit: 0.02 # LIMITS THE MOUNT OF EROSION PER TIMESTEP
+suspended_sediment_on: yes # 1ST FRACTION ONLY, AT PRESENT
+read_in_graindata_from_file: no # MUST SPECIFY GRAINDATA FILE ABOVE IF YES
+
+# LATERAL EROSION
+#=================
+lateral_erosion_on: no # UNTESTED! - LATERAL EROSION NOT FULLY IMPLEMENTED YET
+lateral_erosion_const: 0.001 # LATERAL EROSION CONSTANT
+edge_smoothing_passes: 30 # NUMBER OF PASSES FOR EDGE SMOOTHING FILTER
+downstream_cell_shift: 3 # CELLS TO SHIFT LATERAL EROSION DOWNSTREAM
+lateral_cross_chan_smoothing: 0.0001 # MAX DIFFERENCE IN CROSS CHANNEL SMOOTHING OF EDGE VALUES
+
+# HYDROLOGY
+#===========
+hydro_model_only: yes # SWITCHES OFF THE EROSION
+topmodel_m_value: 0.015 # SEE LITERATURE FOR GUIDANCE
+in_out_difference: 5 # CUMECS, UNTESTED
+min_q_for_depth_calc: 0.1 # CUMECS
+max_q_for_depth_calc: 1000 # CUMECS
+water_depth_erosion_threshold: 0.01 # METRES
+slope_on_edge_cell: 0.001 # SHOULD BE APPROX EQUAL TO CHAN SLOPE NEAR OUTLET
+evaporation_rate: 0.0 # NOT YET IMPLEMENTED
+courant_number: 0.7 # NO LOWER THAN 3 PLEASE, MAX AROUND 0.7 - NUMERICAL STABILITY CONTROL
+froude_num_limit: 0.8 # CONTROLS FLOW BETWEEN CELLS PER TIME STEP (SEE DOCS)
+mannings_n: 0.04 # SEE LITERATURE FOR GUIDANCE
+hflow_threshold: 0.001 # IN METRES, DETERMINES IF HORIZ. FLOW CALCULATED
+
+# REACH MODE HYDROLOGY
+#=====================
+reach_mode: no # Run in reach mode with input discharge data
+divide_inputs_by: 3
+reach_input_data_timestep: 6000000
+
+# REACH INPUTS
+#==============
+
+reach1_input_file: input2.txt
+reach1_input_on: no
+reach1_x: 10
+reach1_y: 4
+
+reach2_input_file: input2.txt
+reach2_input_on: no
+reach2_x: 10
+reach2_y: 5
+
+reach3_input_file: input2.txt
+reach3_input_on: no
+reach3_x: 10
+reach3_y: 6
+
+# STAGE INPUTS
+#==============
+
+stage_mode_input_on: no
+number_of_stage_points: 3 # NOT IMPLEMENTED YET
+
+stage_input_timestep: 60
+stage_fromx: 5
+stage_tox: 6
+stage_fromy: 5
+stage_toy: 6
+stage_inputfile: stage_mode_input.csv
+stage_datum_type: zero # "zero" OR "local" SEE NOTES
+
+tide_mode_input_on: yes
+tide_input_timestep: 60
+tide_fromx: 0
+tide_tox: 10
+tide_fromy: 0
+tide_toy: 3
+tide_inputfile: tide_mode_input.csv
+tide_datum_type: zero
+
+
+# PRECIPITATION
+#==============
+rainfall_data_on: no # IF YES, HAVE YOU SET A RAINFALL FILE?
+ # VALUES IN MM/HR, REGARDLESS OF TIMESTEP
+rain_data_time_step: 60 # MINUTES, MUST MATCH RAINFALL FILE
+spatial_var_rain: no # IF YES, HAVE YOU SET A HYDROINDEX FILE?
+num_unique_rain_cells: 1 # SHOULD MATCH NO. OF HYDROINDEX ZONES, COUNT THEM
+spatially_complex_rainfall_on: no # UNTESTED...
+interpolation_method: cubic # CAREFUL NOW.
+generate_artificial_rainfall: no # PIPE DREAM.
+
+
+# VEGETATION
+#===========
+vegetation_on: yes # VEGETATION NOT IMPLEMENTED/TESTED YET
+grass_grow_rate: 0.0 # TIME IN WHICH VEGETATION REACHES MATURITY IN YEARS
+vegetation_crit_shear: 5.0 # VALUE ABOVE WHICH VEGETATION REMOVED BY EROSION
+veg_erosion_prop: 0.1 # PROPORTION OF EROSION ALLOWED TO OCCUR WHEN VEG IS FULLY GROWN
+
+# HILLSLOPE
+#==========
+creep_rate: 0.0025 # METRES/YEAR (?UNTESTED)
+slope_failure_thresh: 45 # CRITICAL ANGLE OF FAILURE
+soil_erosion_rate: 0.0
+soil_j_mean_depends: yes # UNTESTED
+call_muddpile_model: yes # NOT YET IMPLEMENTED
+
+# WRITE OUTPUT RASTERS
+#======================
+raster_output_interval: 100000 # IN MODEL MINUTES
+write_waterdepth_file: yes
+waterdepth_outfile_name: WaterDepths
+write_elev_file: no
+write_elevation_file: Elevations
+write_grainsize_file: no
+grainsize_file: Grainz
+
+write_elevdiff_file: no
+elevdiff_outfile_name: ElevationDiff
+
+raingrid_fname_out: raindata_grid # MAINLY FOR DEBUG PURPOSES,
+ # YOU DON'T REALLY NEED TO PRINT THIS OUT
+
+# DEBUG OPTIONS
+#================
+debug_print_cycle: yes # PRINTS THE CURRENT CYCLE ITERATION TO CONSOLE
+debug_write_raingrid: no # WRITES RAINGRID RASTER EVERY CALC_J() CALLED (WARNING: LOTS OF DATA!)
diff --git a/test/input_data/idealised_multi_stage/idealised.asc b/test/input_data/idealised_multi_stage/idealised.asc
new file mode 100644
index 0000000..09e8d44
--- /dev/null
+++ b/test/input_data/idealised_multi_stage/idealised.asc
@@ -0,0 +1,18 @@
+cols 11
+nrows 11
+xllcorne 1
+yllcorne 1
+cellsize 10
+NODATA_v -9999
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
diff --git a/test/input_data/idealised_multi_stage/input2.txt b/test/input_data/idealised_multi_stage/input2.txt
new file mode 100644
index 0000000..2e426a2
--- /dev/null
+++ b/test/input_data/idealised_multi_stage/input2.txt
@@ -0,0 +1,44 @@
+0 10 0.0 0.0 6.293498 10.971469 1.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+1 200.428 0.0 0.0 0.293498 00.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+2 10.309 0.0 0.0 1.831533 00.174914 0.244099 0.16542 0.110451 0.073047 0.052664 0.010167 0.000571 0.000202
+3 8.31 0.0 0.0 0.348308 00.246164 0.036545 0.025763 0.009109 0.00322 0.026912 0.000403 0.000142 5E-05
+4 9.312 0.0 0.0 0.343898 00.248002 0.054529 0.02676 0.009461 0.003345 0.001183 0.000418 0.000148 5.2E-05
+5 10.314 0.0 0.0 0.303792 00.238146 0.01454 0.037053 0.009102 0.003218 0.001138 0.000402 0.000142 5E-05
+6 11.315 0.0 0.0 0.344678 0.275723 0.006751 0.045927 0.010543 0.003728 0.001318 0.000466 0.000165 5.8E-05
+7 20.317 0.0 0.0 0.298657 0.221956 0.036747 0.026866 0.008477 0.002997 0.00106 0.000375 0.000132 4.7E-05
+8 9.318 0.0 0.0 0.459466 0.334653 0.068954 0.036135 0.012776 0.004517 0.001597 0.000565 0.0002 7.1E-05
+9 7.318 0.0 0.0 0.343466 0.250163 0.051545 0.027012 0.00955 0.003377 0.001194 0.000422 0.000149 5.3E-05
+10 5.319 0.0 0.0 0.230376 0.168257 0.027589 0.02394 0.00686 0.002425 0.000857 0.000303 0.000107 3.8E-05
+11 5 0.0 0.0 6.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+12 6.428 0.0 0.0 0.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+13 7.309 0.0 0.0 1.831533 00.174914 0.244099 0.16542 0.110451 0.073047 0.052664 0.010167 0.000571 0.000202
+14 8.31 0.0 0.0 0.348308 00.246164 0.036545 0.025763 0.009109 0.00322 0.026912 0.000403 0.000142 5E-05
+15 9.312 0.0 0.0 0.343898 00.248002 0.054529 0.02676 0.009461 0.003345 0.001183 0.000418 0.000148 5.2E-05
+16 10.314 0.0 0.0 0.303792 00.238146 0.01454 0.037053 0.009102 0.003218 0.001138 0.000402 0.000142 5E-05
+17 11.315 0.0 0.0 0.344678 0.275723 0.006751 0.045927 0.010543 0.003728 0.001318 0.000466 0.000165 5.8E-05
+18 20.317 0.0 0.0 0.298657 0.221956 0.036747 0.026866 0.008477 0.002997 0.00106 0.000375 0.000132 4.7E-05
+19 9.318 0.0 0.0 0.459466 0.334653 0.068954 0.036135 0.012776 0.004517 0.001597 0.000565 0.0002 7.1E-05
+20 7.318 0.0 0.0 0.343466 0.250163 0.051545 0.027012 0.00955 0.003377 0.001194 0.000422 0.000149 5.3E-05
+21 5.319 0.0 0.0 0.230376 0.168257 0.027589 0.02394 0.00686 0.002425 0.000857 0.000303 0.000107 3.8E-05
+22 5 0.0 0.0 6.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+22 6.428 0.0 0.0 0.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+23 7.309 0.0 0.0 1.831533 00.174914 0.244099 0.16542 0.110451 0.073047 0.052664 0.010167 0.000571 0.000202
+24 8.31 0.0 0.0 0.348308 00.246164 0.036545 0.025763 0.009109 0.00322 0.026912 0.000403 0.000142 5E-05
+25 9.312 0.0 0.0 0.343898 00.248002 0.054529 0.02676 0.009461 0.003345 0.001183 0.000418 0.000148 5.2E-05
+26 10.314 0.0 0.0 0.303792 00.238146 0.01454 0.037053 0.009102 0.003218 0.001138 0.000402 0.000142 5E-05
+27 11.315 0.0 0.0 0.344678 0.275723 0.006751 0.045927 0.010543 0.003728 0.001318 0.000466 0.000165 5.8E-05
+28 30.317 0.0 0.0 0.298657 0.221956 0.036747 0.026866 0.008477 0.002997 0.00106 0.000375 0.000132 4.7E-05
+29 9.318 0.0 0.0 0.459466 0.334653 0.068954 0.036135 0.012776 0.004517 0.001597 0.000565 0.0002 7.1E-05
+30 7.318 0.0 0.0 0.343466 0.250163 0.051545 0.027012 0.00955 0.003377 0.001194 0.000422 0.000149 5.3E-05
+31 5.319 0.0 0.0 0.230376 0.168257 0.027589 0.02394 0.00686 0.002425 0.000857 0.000303 0.000107 3.8E-05
+32 5 0.0 0.0 6.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+33 6.428 0.0 0.0 0.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+34 7.309 0.0 0.0 1.831533 00.174914 0.244099 0.16542 0.110451 0.073047 0.052664 0.010167 0.000571 0.000202
+35 8.31 0.0 0.0 0.348308 00.246164 0.036545 0.025763 0.009109 0.00322 0.026912 0.000403 0.000142 5E-05
+36 9.312 0.0 0.0 0.343898 00.248002 0.054529 0.02676 0.009461 0.003345 0.001183 0.000418 0.000148 5.2E-05
+37 10.314 0.0 0.0 0.303792 00.238146 0.01454 0.037053 0.009102 0.003218 0.001138 0.000402 0.000142 5E-05
+38 11.315 0.0 0.0 0.344678 0.275723 0.006751 0.045927 0.010543 0.003728 0.001318 0.000466 0.000165 5.8E-05
+39 20.317 0.0 0.0 0.298657 0.221956 0.036747 0.026866 0.008477 0.002997 0.00106 0.000375 0.000132 4.7E-05
+40 9.318 0.0 0.0 0.459466 0.334653 0.068954 0.036135 0.012776 0.004517 0.001597 0.000565 0.0002 7.1E-05
+41 7.318 0.0 0.0 0.343466 0.250163 0.051545 0.027012 0.00955 0.003377 0.001194 0.000422 0.000149 5.3E-05
+42 5.319 0.0 0.0 0.230376 0.168257 0.027589 0.02394 0.00686 0.002425 0.000857 0.000303 0.000107 3.8E-05
diff --git a/test/input_data/idealised_multi_stage/stage_mode_input.csv b/test/input_data/idealised_multi_stage/stage_mode_input.csv
new file mode 100644
index 0000000..b2a5d0f
--- /dev/null
+++ b/test/input_data/idealised_multi_stage/stage_mode_input.csv
@@ -0,0 +1,2825 @@
+2.8
+2.813
+2.827
+2.842
+2.855
+2.868
+2.883
+2.9
+2.934
+2.989
+3.002
+2.99
+2.964
+2.933
+2.898
+2.858
+2.818
+2.76
+2.678
+2.592
+2.541
+2.535
+2.54
+2.548
+2.556
+2.564
+2.572
+2.581
+2.592
+2.599
+2.607
+2.617
+2.629
+2.639
+2.654
+2.658
+2.66
+2.655
+2.663
+2.672
+2.679
+2.687
+2.694
+2.706
+2.714
+2.724
+2.734
+2.752
+2.757
+2.764
+2.77
+2.772
+2.786
+2.8
+2.812
+2.827
+2.841
+2.848
+2.874
+2.912
+2.972
+2.984
+2.978
+2.956
+2.926
+2.893
+2.859
+2.82
+2.772
+2.703
+2.615
+2.554
+2.536
+2.544
+2.544
+2.544
+2.537
+2.543
+2.55
+2.556
+2.565
+2.571
+2.576
+2.584
+2.592
+2.599
+2.608
+2.625
+2.63
+2.63
+2.632
+2.632
+2.641
+2.65
+2.662
+2.675
+2.689
+2.704
+2.726
+2.736
+2.744
+2.743
+2.758
+2.772
+2.785
+2.797
+2.825
+2.87
+2.929
+2.954
+2.943
+2.918
+2.879
+2.845
+2.805
+2.763
+2.714
+2.66
+2.594
+2.512
+2.427
+2.385
+2.367
+2.358
+2.348
+2.352
+2.359
+2.363
+2.367
+2.373
+2.379
+2.388
+2.394
+2.403
+2.419
+2.418
+2.421
+2.416
+2.423
+2.435
+2.446
+2.457
+2.468
+2.488
+2.492
+2.496
+2.499
+2.5
+2.514
+2.523
+2.538
+2.551
+2.573
+2.579
+2.584
+2.585
+2.592
+2.607
+2.635
+2.689
+2.71
+2.696
+2.663
+2.617
+2.576
+2.531
+2.484
+2.431
+2.376
+2.317
+2.236
+2.171
+2.136
+2.131
+2.117
+2.122
+2.126
+2.132
+2.135
+2.141
+2.147
+2.151
+2.157
+2.161
+2.17
+2.174
+2.185
+2.188
+2.192
+2.197
+2.205
+2.211
+2.219
+2.223
+2.236
+2.237
+2.245
+2.252
+2.262
+2.268
+2.277
+2.286
+2.298
+2.307
+2.317
+2.326
+2.335
+2.343
+2.349
+2.358
+2.362
+2.368
+2.356
+2.324
+2.284
+2.239
+2.202
+2.183
+2.177
+2.176
+2.178
+2.183
+2.19
+2.196
+2.204
+2.21
+2.216
+2.22
+2.227
+2.23
+2.234
+2.238
+2.242
+2.248
+2.25
+2.254
+2.258
+2.263
+2.268
+2.273
+2.277
+2.284
+2.289
+2.297
+2.304
+2.313
+2.319
+2.329
+2.34
+2.352
+2.366
+2.378
+2.393
+2.407
+2.422
+2.433
+2.447
+2.46
+2.471
+2.482
+2.497
+2.524
+2.546
+2.54
+2.517
+2.484
+2.437
+2.386
+2.326
+2.264
+2.222
+2.201
+2.193
+2.195
+2.199
+2.203
+2.203
+2.212
+2.215
+2.219
+2.224
+2.23
+2.231
+2.24
+2.248
+2.253
+2.26
+2.272
+2.28
+2.292
+2.293
+2.295
+2.29
+2.302
+2.312
+2.321
+2.338
+2.342
+2.346
+2.349
+2.351
+2.356
+2.355
+2.362
+2.371
+2.383
+2.393
+2.402
+2.414
+2.424
+2.432
+2.439
+2.446
+2.453
+2.445
+2.416
+2.376
+2.322
+2.261
+2.212
+2.179
+2.166
+2.158
+2.156
+2.158
+2.159
+2.161
+2.164
+2.164
+2.167
+2.17
+2.171
+2.172
+2.176
+2.176
+2.179
+2.183
+2.184
+2.186
+2.189
+2.191
+2.198
+2.202
+2.206
+2.211
+2.216
+2.22
+2.228
+2.234
+2.243
+2.252
+2.261
+2.271
+2.28
+2.294
+2.304
+2.316
+2.326
+2.339
+2.35
+2.362
+2.369
+2.377
+2.383
+2.382
+2.373
+2.365
+2.355
+2.34
+2.33
+2.318
+2.316
+2.316
+2.32
+2.323
+2.33
+2.339
+2.343
+2.357
+2.355
+2.352
+2.342
+2.35
+2.358
+2.361
+2.367
+2.375
+2.394
+2.391
+2.39
+2.387
+2.384
+2.371
+2.376
+2.383
+2.386
+2.392
+2.397
+2.404
+2.41
+2.417
+2.424
+2.432
+2.441
+2.449
+2.458
+2.466
+2.474
+2.482
+2.489
+2.497
+2.498
+2.503
+2.504
+2.505
+2.503
+2.5
+2.493
+2.489
+2.482
+2.475
+2.471
+2.469
+2.468
+2.471
+2.473
+2.477
+2.481
+2.486
+2.492
+2.497
+2.503
+2.509
+2.516
+2.523
+2.53
+2.539
+2.548
+2.561
+2.562
+2.563
+2.559
+2.57
+2.578
+2.588
+2.608
+2.611
+2.616
+2.62
+2.624
+2.627
+2.625
+2.635
+2.645
+2.657
+2.668
+2.682
+2.694
+2.705
+2.718
+2.729
+2.739
+2.748
+2.756
+2.761
+2.761
+2.76
+2.753
+2.739
+2.725
+2.706
+2.684
+2.666
+2.655
+2.647
+2.645
+2.649
+2.653
+2.656
+2.665
+2.67
+2.678
+2.684
+2.704
+2.702
+2.703
+2.694
+2.702
+2.707
+2.714
+2.722
+2.732
+2.744
+2.747
+2.749
+2.751
+2.753
+2.744
+2.752
+2.758
+2.765
+2.772
+2.779
+2.789
+2.799
+2.81
+2.821
+2.834
+2.843
+2.857
+2.869
+2.882
+2.899
+2.914
+2.914
+2.92
+2.914
+2.921
+2.927
+2.924
+2.931
+2.904
+2.879
+2.851
+2.827
+2.806
+2.784
+2.783
+2.786
+2.789
+2.793
+2.799
+2.806
+2.812
+2.817
+2.824
+2.832
+2.838
+2.845
+2.848
+2.857
+2.862
+2.866
+2.873
+2.879
+2.886
+2.891
+2.898
+2.906
+2.912
+2.919
+2.929
+2.939
+2.951
+2.968
+2.977
+2.984
+2.987
+2.986
+3.002
+3.015
+3.034
+3.042
+3.051
+3.056
+3.06
+3.065
+3.064
+3.057
+3.054
+3.033
+3.014
+2.99
+2.969
+2.948
+2.945
+2.944
+2.946
+2.951
+2.955
+2.963
+2.967
+2.973
+2.98
+2.985
+2.992
+2.999
+3.007
+3.013
+3.02
+3.028
+3.036
+3.047
+3.061
+3.064
+3.066
+3.065
+3.077
+3.087
+3.103
+3.109
+3.114
+3.121
+3.126
+3.133
+3.132
+3.145
+3.157
+3.169
+3.181
+3.193
+3.205
+3.221
+3.227
+3.231
+3.234
+3.242
+3.238
+3.243
+3.226
+3.189
+3.138
+3.083
+3.032
+3
+2.983
+2.974
+2.971
+2.968
+2.967
+2.968
+2.972
+2.974
+2.98
+2.982
+2.982
+2.982
+2.989
+2.988
+2.991
+2.993
+3
+3
+3.001
+3.005
+3.007
+3.012
+3.012
+3.02
+3.02
+3.024
+3.026
+3.032
+3.033
+3.04
+3.049
+3.057
+3.061
+3.07
+3.08
+3.086
+3.094
+3.104
+3.111
+3.11
+3.109
+3.113
+3.108
+3.098
+3.081
+3.074
+3.067
+3.067
+3.066
+3.068
+3.067
+3.07
+3.071
+3.073
+3.078
+3.081
+3.082
+3.086
+3.09
+3.096
+3.098
+3.102
+3.107
+3.114
+3.121
+3.13
+3.136
+3.143
+3.152
+3.162
+3.171
+3.182
+3.193
+3.202
+3.213
+3.224
+3.234
+3.246
+3.26
+3.274
+3.287
+3.301
+3.316
+3.332
+3.346
+3.358
+3.37
+3.38
+3.388
+3.416
+3.449
+3.451
+3.441
+3.421
+3.398
+3.368
+3.324
+3.263
+3.195
+3.139
+3.113
+3.103
+3.101
+3.101
+3.104
+3.107
+3.111
+3.113
+3.117
+3.121
+3.124
+3.126
+3.128
+3.132
+3.136
+3.14
+3.147
+3.152
+3.155
+3.161
+3.166
+3.174
+3.178
+3.183
+3.187
+3.189
+3.195
+3.201
+3.204
+3.208
+3.215
+3.226
+3.233
+3.235
+3.241
+3.247
+3.251
+3.251
+3.251
+3.25
+3.246
+3.241
+3.238
+3.231
+3.224
+3.228
+3.232
+3.228
+3.235
+3.236
+3.243
+3.247
+3.251
+3.251
+3.254
+3.258
+3.26
+3.263
+3.271
+3.275
+3.281
+3.286
+3.291
+3.296
+3.303
+3.31
+3.315
+3.324
+3.331
+3.338
+3.348
+3.356
+3.366
+3.378
+3.388
+3.4
+3.412
+3.425
+3.437
+3.453
+3.467
+3.482
+3.497
+3.511
+3.523
+3.529
+3.531
+3.559
+3.616
+3.616
+3.579
+3.559
+3.528
+3.486
+3.438
+3.392
+3.356
+3.332
+3.32
+3.318
+3.321
+3.324
+3.33
+3.338
+3.347
+3.354
+3.363
+3.375
+3.381
+3.389
+3.393
+3.4
+3.405
+3.41
+3.417
+3.423
+3.428
+3.434
+3.438
+3.447
+3.454
+3.46
+3.469
+3.477
+3.482
+3.49
+3.499
+3.513
+3.518
+3.526
+3.531
+3.541
+3.545
+3.55
+3.551
+3.551
+3.546
+3.525
+3.527
+3.518
+3.494
+3.472
+3.444
+3.423
+3.414
+3.403
+3.389
+3.397
+3.395
+3.392
+3.392
+3.4
+3.397
+3.393
+3.392
+3.402
+3.408
+3.422
+3.411
+3.432
+3.437
+3.437
+3.444
+3.449
+3.455
+3.463
+3.463
+3.468
+3.471
+3.479
+3.483
+3.486
+3.492
+3.499
+3.507
+3.513
+3.522
+3.53
+3.536
+3.548
+3.555
+3.562
+3.57
+3.573
+3.584
+3.594
+3.6
+3.611
+3.602
+3.568
+3.531
+3.493
+3.444
+3.387
+3.322
+3.261
+3.228
+3.21
+3.201
+3.188
+3.194
+3.201
+3.192
+3.202
+3.194
+3.191
+3.182
+3.178
+3.179
+3.18
+3.18
+3.185
+3.184
+3.196
+3.189
+3.188
+3.184
+3.189
+3.191
+3.196
+3.196
+3.201
+3.206
+3.208
+3.215
+3.218
+3.224
+3.226
+3.231
+3.234
+3.238
+3.243
+3.247
+3.251
+3.253
+3.259
+3.258
+3.252
+3.241
+3.219
+3.199
+3.185
+3.174
+3.174
+3.178
+3.179
+3.184
+3.185
+3.187
+3.192
+3.195
+3.199
+3.204
+3.207
+3.212
+3.215
+3.215
+3.219
+3.219
+3.226
+3.241
+3.247
+3.255
+3.26
+3.265
+3.271
+3.276
+3.283
+3.28
+3.292
+3.302
+3.321
+3.329
+3.339
+3.348
+3.359
+3.371
+3.382
+3.392
+3.403
+3.409
+3.421
+3.429
+3.442
+3.484
+3.524
+3.516
+3.495
+3.467
+3.433
+3.402
+3.354
+3.285
+3.208
+3.154
+3.129
+3.125
+3.122
+3.122
+3.117
+3.126
+3.131
+3.139
+3.15
+3.152
+3.154
+3.155
+3.157
+3.154
+3.161
+3.168
+3.182
+3.184
+3.187
+3.188
+3.189
+3.192
+3.189
+3.199
+3.209
+3.224
+3.243
+3.251
+3.259
+3.268
+3.272
+3.289
+3.304
+3.32
+3.337
+3.357
+3.366
+3.372
+3.377
+3.38
+3.401
+3.414
+3.4
+3.361
+3.318
+3.266
+3.201
+3.153
+3.125
+3.124
+3.126
+3.129
+3.135
+3.148
+3.15
+3.149
+3.147
+3.145
+3.142
+3.149
+3.151
+3.158
+3.169
+3.165
+3.166
+3.169
+3.168
+3.164
+3.172
+3.182
+3.195
+3.197
+3.199
+3.205
+3.206
+3.211
+3.216
+3.222
+3.227
+3.232
+3.23
+3.241
+3.248
+3.265
+3.268
+3.271
+3.274
+3.266
+3.259
+3.246
+3.212
+3.156
+3.113
+3.072
+3.031
+3.008
+3.004
+2.997
+2.988
+2.982
+2.983
+2.977
+2.975
+2.971
+2.974
+2.973
+2.966
+2.973
+2.97
+2.965
+2.972
+2.976
+2.974
+2.976
+2.979
+2.982
+2.98
+2.982
+2.975
+2.977
+2.981
+2.983
+2.984
+2.986
+2.989
+2.991
+2.994
+2.999
+3.005
+3.011
+3.02
+3.03
+3.037
+3.047
+3.068
+3.116
+3.151
+3.154
+3.129
+3.107
+3.073
+3.034
+2.993
+2.94
+2.888
+2.783
+2.701
+2.688
+2.677
+2.688
+2.683
+2.69
+2.69
+2.685
+2.677
+2.68
+2.685
+2.692
+2.699
+2.705
+2.711
+2.716
+2.724
+2.731
+2.739
+2.747
+2.755
+2.765
+2.774
+2.784
+2.797
+2.807
+2.82
+2.833
+2.846
+2.861
+2.879
+2.897
+2.906
+2.907
+2.92
+2.931
+2.95
+2.989
+3.053
+3.105
+3.112
+3.095
+3.066
+3.029
+2.989
+2.947
+2.904
+2.855
+2.801
+2.736
+2.647
+2.567
+2.546
+2.546
+2.55
+2.556
+2.563
+2.568
+2.578
+2.582
+2.584
+2.594
+2.601
+2.606
+2.616
+2.623
+2.633
+2.641
+2.647
+2.653
+2.661
+2.67
+2.681
+2.689
+2.699
+2.709
+2.72
+2.731
+2.744
+2.761
+2.785
+2.791
+2.804
+2.806
+2.822
+2.843
+2.874
+2.929
+2.981
+2.993
+2.972
+2.94
+2.897
+2.851
+2.801
+2.752
+2.686
+2.608
+2.516
+2.444
+2.418
+2.409
+2.412
+2.416
+2.419
+2.421
+2.423
+2.425
+2.43
+2.431
+2.436
+2.437
+2.438
+2.444
+2.446
+2.448
+2.454
+2.457
+2.466
+2.474
+2.492
+2.493
+2.486
+2.481
+2.492
+2.495
+2.509
+2.521
+2.529
+2.543
+2.558
+2.574
+2.587
+2.607
+2.627
+2.645
+2.657
+2.689
+2.724
+2.739
+2.729
+2.696
+2.651
+2.609
+2.567
+2.514
+2.454
+2.389
+2.313
+2.228
+2.193
+2.19
+2.191
+2.2
+2.212
+2.222
+2.231
+2.238
+2.247
+2.259
+2.263
+2.271
+2.278
+2.282
+2.294
+2.3
+2.305
+2.316
+2.324
+2.332
+2.342
+2.352
+2.364
+2.372
+2.384
+2.393
+2.412
+2.427
+2.437
+2.456
+2.468
+2.494
+2.507
+2.529
+2.544
+2.56
+2.607
+2.654
+2.661
+2.649
+2.62
+2.59
+2.551
+2.511
+2.464
+2.413
+2.348
+2.283
+2.219
+2.182
+2.182
+2.186
+2.192
+2.197
+2.206
+2.21
+2.219
+2.223
+2.231
+2.242
+2.248
+2.256
+2.264
+2.273
+2.281
+2.295
+2.307
+2.319
+2.334
+2.344
+2.357
+2.373
+2.385
+2.398
+2.412
+2.428
+2.445
+2.459
+2.475
+2.493
+2.508
+2.523
+2.538
+2.551
+2.575
+2.622
+2.645
+2.641
+2.618
+2.587
+2.543
+2.495
+2.444
+2.384
+2.318
+2.242
+2.164
+2.134
+2.131
+2.134
+2.14
+2.15
+2.157
+2.172
+2.178
+2.188
+2.2
+2.209
+2.219
+2.234
+2.241
+2.249
+2.263
+2.271
+2.279
+2.289
+2.3
+2.311
+2.317
+2.33
+2.339
+2.347
+2.362
+2.382
+2.378
+2.389
+2.406
+2.422
+2.441
+2.463
+2.471
+2.48
+2.487
+2.493
+2.515
+2.546
+2.543
+2.527
+2.502
+2.475
+2.438
+2.395
+2.345
+2.29
+2.217
+2.148
+2.122
+2.12
+2.124
+2.133
+2.139
+2.147
+2.155
+2.163
+2.171
+2.18
+2.186
+2.192
+2.199
+2.206
+2.212
+2.219
+2.226
+2.234
+2.241
+2.25
+2.258
+2.268
+2.276
+2.285
+2.297
+2.306
+2.321
+2.334
+2.35
+2.373
+2.382
+2.391
+2.395
+2.41
+2.425
+2.439
+2.453
+2.471
+2.509
+2.529
+2.526
+2.51
+2.485
+2.453
+2.414
+2.372
+2.316
+2.26
+2.189
+2.114
+2.07
+2.057
+2.057
+2.059
+2.064
+2.07
+2.075
+2.077
+2.082
+2.087
+2.09
+2.098
+2.103
+2.112
+2.122
+2.131
+2.142
+2.151
+2.164
+2.172
+2.186
+2.194
+2.208
+2.217
+2.231
+2.246
+2.266
+2.28
+2.3
+2.325
+2.34
+2.347
+2.361
+2.36
+2.375
+2.387
+2.407
+2.441
+2.455
+2.443
+2.426
+2.395
+2.357
+2.313
+2.265
+2.213
+2.151
+2.082
+2.03
+2.007
+1.998
+2
+2.002
+2.008
+2.015
+2.022
+2.028
+2.034
+2.041
+2.046
+2.053
+2.059
+2.067
+2.072
+2.08
+2.087
+2.095
+2.104
+2.112
+2.121
+2.128
+2.141
+2.149
+2.159
+2.17
+2.179
+2.19
+2.199
+2.212
+2.22
+2.23
+2.241
+2.252
+2.264
+2.273
+2.283
+2.294
+2.31
+2.332
+2.326
+2.307
+2.282
+2.253
+2.218
+2.184
+2.14
+2.098
+2.047
+1.984
+1.925
+1.896
+1.893
+1.891
+1.897
+1.904
+1.912
+1.919
+1.925
+1.932
+1.939
+1.948
+1.957
+1.962
+1.971
+1.982
+1.989
+1.998
+2.014
+2.012
+2.013
+2.007
+2.012
+2.025
+2.029
+2.039
+2.045
+2.057
+2.066
+2.076
+2.087
+2.099
+2.109
+2.122
+2.133
+2.143
+2.153
+2.175
+2.197
+2.196
+2.181
+2.156
+2.125
+2.085
+2.043
+1.999
+1.948
+1.893
+1.828
+1.778
+1.758
+1.753
+1.754
+1.759
+1.757
+1.761
+1.761
+1.766
+1.766
+1.768
+1.768
+1.769
+1.77
+1.768
+1.771
+1.772
+1.774
+1.777
+1.778
+1.783
+1.787
+1.79
+1.796
+1.803
+1.809
+1.82
+1.823
+1.832
+1.841
+1.845
+1.856
+1.862
+1.871
+1.878
+1.889
+1.892
+1.905
+1.908
+1.914
+1.921
+1.898
+1.875
+1.838
+1.797
+1.75
+1.693
+1.647
+1.622
+1.603
+1.598
+1.594
+1.592
+1.585
+1.584
+1.579
+1.577
+1.577
+1.572
+1.567
+1.566
+1.562
+1.56
+1.558
+1.565
+1.564
+1.569
+1.571
+1.572
+1.572
+1.581
+1.584
+1.586
+1.591
+1.597
+1.601
+1.608
+1.612
+1.619
+1.62
+1.625
+1.629
+1.633
+1.638
+1.645
+1.652
+1.656
+1.66
+1.664
+1.668
+1.666
+1.661
+1.654
+1.646
+1.64
+1.634
+1.624
+1.619
+1.616
+1.617
+1.616
+1.616
+1.62
+1.617
+1.617
+1.615
+1.611
+1.611
+1.611
+1.612
+1.612
+1.612
+1.614
+1.616
+1.617
+1.622
+1.626
+1.63
+1.636
+1.64
+1.645
+1.648
+1.652
+1.657
+1.663
+1.667
+1.672
+1.677
+1.685
+1.69
+1.697
+1.704
+1.711
+1.718
+1.727
+1.733
+1.74
+1.746
+1.752
+1.756
+1.758
+1.76
+1.757
+1.753
+1.746
+1.739
+1.734
+1.731
+1.73
+1.73
+1.732
+1.734
+1.739
+1.742
+1.745
+1.747
+1.748
+1.751
+1.752
+1.754
+1.756
+1.758
+1.761
+1.765
+1.768
+1.773
+1.778
+1.785
+1.793
+1.802
+1.811
+1.82
+1.83
+1.841
+1.85
+1.86
+1.871
+1.883
+1.894
+1.906
+1.919
+1.932
+1.945
+1.958
+1.972
+1.985
+1.998
+2.009
+2.02
+2.029
+2.037
+2.053
+2.082
+2.088
+2.078
+2.059
+2.035
+2.005
+1.97
+1.928
+1.884
+1.833
+1.774
+1.72
+1.684
+1.668
+1.662
+1.659
+1.659
+1.657
+1.656
+1.656
+1.654
+1.656
+1.655
+1.653
+1.653
+1.655
+1.659
+1.664
+1.666
+1.669
+1.676
+1.68
+1.684
+1.69
+1.694
+1.704
+1.707
+1.712
+1.72
+1.729
+1.737
+1.745
+1.754
+1.764
+1.772
+1.782
+1.788
+1.794
+1.799
+1.803
+1.81
+1.81
+1.811
+1.807
+1.8
+1.794
+1.794
+1.783
+1.782
+1.778
+1.78
+1.782
+1.782
+1.787
+1.791
+1.792
+1.796
+1.799
+1.801
+1.804
+1.808
+1.809
+1.814
+1.821
+1.821
+1.827
+1.833
+1.837
+1.846
+1.855
+1.864
+1.875
+1.885
+1.896
+1.906
+1.916
+1.928
+1.939
+1.953
+1.962
+1.975
+1.987
+1.999
+2.012
+2.024
+2.037
+2.049
+2.062
+2.075
+2.086
+2.097
+2.107
+2.123
+2.14
+2.15
+2.141
+2.125
+2.104
+2.076
+2.035
+1.988
+1.941
+1.912
+1.896
+1.892
+1.894
+1.896
+1.899
+1.9
+1.903
+1.905
+1.908
+1.911
+1.914
+1.917
+1.92
+1.923
+1.926
+1.931
+1.937
+1.942
+1.95
+1.958
+1.966
+1.979
+1.987
+1.998
+2.01
+2.022
+2.034
+2.048
+2.062
+2.075
+2.086
+2.101
+2.112
+2.122
+2.136
+2.149
+2.164
+2.174
+2.193
+2.204
+2.208
+2.205
+2.188
+2.166
+2.13
+2.081
+2.024
+1.974
+1.946
+1.939
+1.941
+1.945
+1.952
+1.959
+1.967
+1.973
+1.981
+1.986
+1.992
+1.998
+2.005
+2.011
+2.016
+2.022
+2.029
+2.036
+2.043
+2.052
+2.058
+2.068
+2.079
+2.091
+2.102
+2.114
+2.127
+2.14
+2.154
+2.167
+2.181
+2.197
+2.214
+2.229
+2.244
+2.26
+2.274
+2.288
+2.299
+2.309
+2.336
+2.374
+2.385
+2.373
+2.355
+2.329
+2.293
+2.252
+2.206
+2.151
+2.082
+2.018
+1.996
+1.995
+1.998
+2.003
+2.011
+2.016
+2.022
+2.029
+2.033
+2.037
+2.043
+2.048
+2.053
+2.057
+2.062
+2.067
+2.072
+2.078
+2.086
+2.094
+2.104
+2.117
+2.125
+2.139
+2.153
+2.168
+2.183
+2.197
+2.213
+2.231
+2.248
+2.263
+2.278
+2.291
+2.305
+2.316
+2.334
+2.367
+2.393
+2.394
+2.38
+2.357
+2.325
+2.289
+2.252
+2.205
+2.151
+2.078
+2.023
+2.004
+2.006
+2.009
+2.015
+2.024
+2.031
+2.038
+2.045
+2.054
+2.057
+2.064
+2.071
+2.076
+2.082
+2.088
+2.095
+2.103
+2.111
+2.118
+2.128
+2.136
+2.145
+2.159
+2.17
+2.186
+2.197
+2.212
+2.225
+2.24
+2.256
+2.268
+2.284
+2.299
+2.312
+2.326
+2.34
+2.357
+2.376
+2.421
+2.429
+2.407
+2.387
+2.349
+2.311
+2.268
+2.207
+2.16
+2.143
+2.144
+2.15
+2.156
+2.162
+2.17
+2.176
+2.185
+2.194
+2.199
+2.204
+2.208
+2.214
+2.219
+2.228
+2.233
+2.241
+2.249
+2.257
+2.265
+2.277
+2.286
+2.299
+2.312
+2.324
+2.339
+2.353
+2.368
+2.382
+2.397
+2.415
+2.432
+2.446
+2.463
+2.481
+2.495
+2.509
+2.524
+2.536
+2.551
+2.572
+2.619
+2.637
+2.634
+2.619
+2.589
+2.545
+2.48
+2.421
+2.385
+2.375
+2.377
+2.383
+2.391
+2.399
+2.407
+2.416
+2.425
+2.434
+2.443
+2.453
+2.461
+2.472
+2.483
+2.493
+2.503
+2.514
+2.528
+2.539
+2.551
+2.565
+2.576
+2.593
+2.606
+2.621
+2.637
+2.654
+2.671
+2.686
+2.703
+2.719
+2.736
+2.754
+2.769
+2.791
+2.827
+2.89
+2.946
+2.978
+2.984
+2.972
+2.947
+2.909
+2.868
+2.824
+2.777
+2.726
+2.675
+2.616
+2.547
+2.465
+2.368
+2.305
+2.296
+2.302
+2.303
+2.309
+2.319
+2.328
+2.332
+2.338
+2.347
+2.357
+2.366
+2.379
+2.387
+2.398
+2.41
+2.42
+2.433
+2.445
+2.456
+2.471
+2.484
+2.498
+2.512
+2.522
+2.539
+2.553
+2.568
+2.583
+2.602
+2.617
+2.634
+2.649
+2.669
+2.692
+2.739
+2.794
+2.805
+2.793
+2.767
+2.738
+2.697
+2.656
+2.608
+2.55
+2.477
+2.398
+2.35
+2.338
+2.344
+2.35
+2.359
+2.368
+2.381
+2.39
+2.401
+2.412
+2.42
+2.431
+2.442
+2.453
+2.467
+2.476
+2.488
+2.501
+2.514
+2.525
+2.542
+2.555
+2.568
+2.582
+2.595
+2.61
+2.625
+2.639
+2.655
+2.671
+2.689
+2.706
+2.72
+2.735
+2.76
+2.79
+2.85
+2.899
+2.911
+2.897
+2.856
+2.82
+2.777
+2.728
+2.676
+2.623
+2.567
+2.498
+2.41
+2.319
+2.299
+2.296
+2.303
+2.311
+2.318
+2.329
+2.336
+2.343
+2.353
+2.367
+2.374
+2.383
+2.394
+2.405
+2.415
+2.426
+2.44
+2.45
+2.464
+2.475
+2.488
+2.504
+2.517
+2.534
+2.547
+2.562
+2.579
+2.594
+2.61
+2.621
+2.634
+2.648
+2.664
+2.679
+2.694
+2.707
+2.728
+2.781
+2.811
+2.814
+2.798
+2.776
+2.741
+2.708
+2.658
+2.598
+2.518
+2.45
+2.429
+2.43
+2.437
+2.449
+2.461
+2.47
+2.481
+2.492
+2.503
+2.513
+2.523
+2.534
+2.545
+2.555
+2.568
+2.579
+2.588
+2.598
+2.61
+2.62
+2.631
+2.643
+2.655
+2.665
+2.677
+2.689
+2.702
+2.715
+2.729
+2.742
+2.757
+2.771
+2.787
+2.803
+2.817
+2.839
+2.879
+2.948
+2.986
+2.975
+2.943
+2.916
+2.887
+2.855
+2.823
+2.786
+2.746
+2.693
+2.62
+2.55
+2.516
+2.51
+2.516
+2.523
+2.533
+2.542
+2.551
+2.561
+2.57
+2.58
+2.591
+2.602
+2.61
+2.625
+2.634
+2.646
+2.657
+2.667
+2.676
+2.687
+2.7
+2.708
+2.723
+2.734
+2.749
+2.762
+2.774
+2.788
+2.802
+2.817
+2.834
+2.847
+2.863
+2.879
+2.901
+2.944
+3.012
+3.066
+3.081
+3.061
+3.036
+2.999
+2.957
+2.915
+2.871
+2.826
+2.778
+2.713
+2.625
+2.531
+2.501
+2.503
+2.51
+2.517
+2.527
+2.534
+2.544
+2.553
+2.559
+2.567
+2.573
+2.581
+2.589
+2.595
+2.604
+2.611
+2.619
+2.627
+2.636
+2.645
+2.653
+2.663
+2.672
+2.684
+2.697
+2.708
+2.725
+2.737
+2.754
+2.769
+2.783
+2.8
+2.818
+2.833
+2.861
+2.905
+2.972
+3.036
+3.062
+3.05
+3.019
+2.977
+2.932
+2.883
+2.834
+2.785
+2.732
+2.67
+2.599
+2.502
+2.416
+2.396
+2.399
+2.405
+2.411
+2.418
+2.426
+2.435
+2.442
+2.451
+2.46
+2.47
+2.478
+2.488
+2.498
+2.509
+2.521
+2.532
+2.545
+2.557
+2.571
+2.583
+2.596
+2.612
+2.626
+2.64
+2.656
+2.672
+2.688
+2.701
+2.717
+2.73
+2.744
+2.77
+2.816
+2.888
+2.926
+2.924
+2.9
+2.866
+2.827
+2.783
+2.736
+2.684
+2.62
+2.547
+2.452
+2.376
+2.36
+2.362
+2.368
+2.376
+2.384
+2.391
+2.4
+2.409
+2.416
+2.427
+2.437
+2.446
+2.458
+2.469
+2.479
+2.489
+2.5
+2.51
+2.523
+2.534
+2.546
+2.557
+2.571
+2.583
+2.596
+2.611
+2.625
+2.642
+2.656
+2.671
+2.688
+2.704
+2.719
+2.734
+2.748
+2.77
+2.811
+2.881
+2.927
+2.932
+2.909
+2.874
+2.832
+2.788
+2.737
+2.683
+2.625
+2.56
+2.489
+2.395
+2.313
+2.297
+2.299
+2.308
+2.317
+2.327
+2.336
+2.345
+2.357
+2.368
+2.377
+2.388
+2.398
+2.406
+2.419
+2.428
+2.439
+2.45
+2.46
+2.474
+2.484
+2.496
+2.509
+2.522
+2.533
+2.548
+2.562
+2.577
+2.589
+2.603
+2.619
+2.633
+2.649
+2.664
+2.691
+2.743
+2.799
+2.804
+2.771
+2.736
+2.704
+2.671
+2.634
+2.592
+2.541
+2.48
+2.404
+2.348
+2.328
+2.328
+2.334
+2.342
+2.351
+2.361
+2.371
+2.38
+2.389
+2.399
+2.409
+2.418
+2.427
+2.435
+2.446
+2.455
+2.466
+2.472
+2.482
+2.489
+2.499
+2.51
+2.519
+2.529
+2.543
+2.554
+2.566
+2.579
+2.593
+2.607
+2.623
+2.636
+2.652
+2.665
+2.685
+2.717
+2.771
+2.844
+2.86
+2.836
+2.807
+2.772
+2.736
+2.699
+2.66
+2.62
+2.578
+2.531
+2.476
+2.409
+2.327
+2.275
+2.258
+2.256
+2.266
+2.271
+2.279
+2.289
+2.296
+2.306
+2.312
+2.319
+2.324
+2.328
+2.344
+2.347
+2.356
+2.359
+2.368
+2.376
+2.39
+2.392
+2.405
+2.414
+2.426
+2.435
+2.446
+2.458
+2.478
+2.488
+2.502
+2.521
+2.532
+2.557
+2.563
+2.574
+2.596
+2.63
+2.683
+2.707
+2.698
+2.679
+2.647
+2.61
+2.569
+2.516
+2.456
+2.381
+2.302
+2.275
+2.274
+2.279
+2.286
+2.295
+2.301
+2.31
+2.316
+2.321
+2.329
+2.336
+2.341
+2.347
+2.355
+2.363
+2.371
+2.378
+2.387
+2.395
+2.407
+2.417
+2.428
diff --git a/test/input_data/idealised_multi_stage/tide_mode_input.csv b/test/input_data/idealised_multi_stage/tide_mode_input.csv
new file mode 100644
index 0000000..b2a5d0f
--- /dev/null
+++ b/test/input_data/idealised_multi_stage/tide_mode_input.csv
@@ -0,0 +1,2825 @@
+2.8
+2.813
+2.827
+2.842
+2.855
+2.868
+2.883
+2.9
+2.934
+2.989
+3.002
+2.99
+2.964
+2.933
+2.898
+2.858
+2.818
+2.76
+2.678
+2.592
+2.541
+2.535
+2.54
+2.548
+2.556
+2.564
+2.572
+2.581
+2.592
+2.599
+2.607
+2.617
+2.629
+2.639
+2.654
+2.658
+2.66
+2.655
+2.663
+2.672
+2.679
+2.687
+2.694
+2.706
+2.714
+2.724
+2.734
+2.752
+2.757
+2.764
+2.77
+2.772
+2.786
+2.8
+2.812
+2.827
+2.841
+2.848
+2.874
+2.912
+2.972
+2.984
+2.978
+2.956
+2.926
+2.893
+2.859
+2.82
+2.772
+2.703
+2.615
+2.554
+2.536
+2.544
+2.544
+2.544
+2.537
+2.543
+2.55
+2.556
+2.565
+2.571
+2.576
+2.584
+2.592
+2.599
+2.608
+2.625
+2.63
+2.63
+2.632
+2.632
+2.641
+2.65
+2.662
+2.675
+2.689
+2.704
+2.726
+2.736
+2.744
+2.743
+2.758
+2.772
+2.785
+2.797
+2.825
+2.87
+2.929
+2.954
+2.943
+2.918
+2.879
+2.845
+2.805
+2.763
+2.714
+2.66
+2.594
+2.512
+2.427
+2.385
+2.367
+2.358
+2.348
+2.352
+2.359
+2.363
+2.367
+2.373
+2.379
+2.388
+2.394
+2.403
+2.419
+2.418
+2.421
+2.416
+2.423
+2.435
+2.446
+2.457
+2.468
+2.488
+2.492
+2.496
+2.499
+2.5
+2.514
+2.523
+2.538
+2.551
+2.573
+2.579
+2.584
+2.585
+2.592
+2.607
+2.635
+2.689
+2.71
+2.696
+2.663
+2.617
+2.576
+2.531
+2.484
+2.431
+2.376
+2.317
+2.236
+2.171
+2.136
+2.131
+2.117
+2.122
+2.126
+2.132
+2.135
+2.141
+2.147
+2.151
+2.157
+2.161
+2.17
+2.174
+2.185
+2.188
+2.192
+2.197
+2.205
+2.211
+2.219
+2.223
+2.236
+2.237
+2.245
+2.252
+2.262
+2.268
+2.277
+2.286
+2.298
+2.307
+2.317
+2.326
+2.335
+2.343
+2.349
+2.358
+2.362
+2.368
+2.356
+2.324
+2.284
+2.239
+2.202
+2.183
+2.177
+2.176
+2.178
+2.183
+2.19
+2.196
+2.204
+2.21
+2.216
+2.22
+2.227
+2.23
+2.234
+2.238
+2.242
+2.248
+2.25
+2.254
+2.258
+2.263
+2.268
+2.273
+2.277
+2.284
+2.289
+2.297
+2.304
+2.313
+2.319
+2.329
+2.34
+2.352
+2.366
+2.378
+2.393
+2.407
+2.422
+2.433
+2.447
+2.46
+2.471
+2.482
+2.497
+2.524
+2.546
+2.54
+2.517
+2.484
+2.437
+2.386
+2.326
+2.264
+2.222
+2.201
+2.193
+2.195
+2.199
+2.203
+2.203
+2.212
+2.215
+2.219
+2.224
+2.23
+2.231
+2.24
+2.248
+2.253
+2.26
+2.272
+2.28
+2.292
+2.293
+2.295
+2.29
+2.302
+2.312
+2.321
+2.338
+2.342
+2.346
+2.349
+2.351
+2.356
+2.355
+2.362
+2.371
+2.383
+2.393
+2.402
+2.414
+2.424
+2.432
+2.439
+2.446
+2.453
+2.445
+2.416
+2.376
+2.322
+2.261
+2.212
+2.179
+2.166
+2.158
+2.156
+2.158
+2.159
+2.161
+2.164
+2.164
+2.167
+2.17
+2.171
+2.172
+2.176
+2.176
+2.179
+2.183
+2.184
+2.186
+2.189
+2.191
+2.198
+2.202
+2.206
+2.211
+2.216
+2.22
+2.228
+2.234
+2.243
+2.252
+2.261
+2.271
+2.28
+2.294
+2.304
+2.316
+2.326
+2.339
+2.35
+2.362
+2.369
+2.377
+2.383
+2.382
+2.373
+2.365
+2.355
+2.34
+2.33
+2.318
+2.316
+2.316
+2.32
+2.323
+2.33
+2.339
+2.343
+2.357
+2.355
+2.352
+2.342
+2.35
+2.358
+2.361
+2.367
+2.375
+2.394
+2.391
+2.39
+2.387
+2.384
+2.371
+2.376
+2.383
+2.386
+2.392
+2.397
+2.404
+2.41
+2.417
+2.424
+2.432
+2.441
+2.449
+2.458
+2.466
+2.474
+2.482
+2.489
+2.497
+2.498
+2.503
+2.504
+2.505
+2.503
+2.5
+2.493
+2.489
+2.482
+2.475
+2.471
+2.469
+2.468
+2.471
+2.473
+2.477
+2.481
+2.486
+2.492
+2.497
+2.503
+2.509
+2.516
+2.523
+2.53
+2.539
+2.548
+2.561
+2.562
+2.563
+2.559
+2.57
+2.578
+2.588
+2.608
+2.611
+2.616
+2.62
+2.624
+2.627
+2.625
+2.635
+2.645
+2.657
+2.668
+2.682
+2.694
+2.705
+2.718
+2.729
+2.739
+2.748
+2.756
+2.761
+2.761
+2.76
+2.753
+2.739
+2.725
+2.706
+2.684
+2.666
+2.655
+2.647
+2.645
+2.649
+2.653
+2.656
+2.665
+2.67
+2.678
+2.684
+2.704
+2.702
+2.703
+2.694
+2.702
+2.707
+2.714
+2.722
+2.732
+2.744
+2.747
+2.749
+2.751
+2.753
+2.744
+2.752
+2.758
+2.765
+2.772
+2.779
+2.789
+2.799
+2.81
+2.821
+2.834
+2.843
+2.857
+2.869
+2.882
+2.899
+2.914
+2.914
+2.92
+2.914
+2.921
+2.927
+2.924
+2.931
+2.904
+2.879
+2.851
+2.827
+2.806
+2.784
+2.783
+2.786
+2.789
+2.793
+2.799
+2.806
+2.812
+2.817
+2.824
+2.832
+2.838
+2.845
+2.848
+2.857
+2.862
+2.866
+2.873
+2.879
+2.886
+2.891
+2.898
+2.906
+2.912
+2.919
+2.929
+2.939
+2.951
+2.968
+2.977
+2.984
+2.987
+2.986
+3.002
+3.015
+3.034
+3.042
+3.051
+3.056
+3.06
+3.065
+3.064
+3.057
+3.054
+3.033
+3.014
+2.99
+2.969
+2.948
+2.945
+2.944
+2.946
+2.951
+2.955
+2.963
+2.967
+2.973
+2.98
+2.985
+2.992
+2.999
+3.007
+3.013
+3.02
+3.028
+3.036
+3.047
+3.061
+3.064
+3.066
+3.065
+3.077
+3.087
+3.103
+3.109
+3.114
+3.121
+3.126
+3.133
+3.132
+3.145
+3.157
+3.169
+3.181
+3.193
+3.205
+3.221
+3.227
+3.231
+3.234
+3.242
+3.238
+3.243
+3.226
+3.189
+3.138
+3.083
+3.032
+3
+2.983
+2.974
+2.971
+2.968
+2.967
+2.968
+2.972
+2.974
+2.98
+2.982
+2.982
+2.982
+2.989
+2.988
+2.991
+2.993
+3
+3
+3.001
+3.005
+3.007
+3.012
+3.012
+3.02
+3.02
+3.024
+3.026
+3.032
+3.033
+3.04
+3.049
+3.057
+3.061
+3.07
+3.08
+3.086
+3.094
+3.104
+3.111
+3.11
+3.109
+3.113
+3.108
+3.098
+3.081
+3.074
+3.067
+3.067
+3.066
+3.068
+3.067
+3.07
+3.071
+3.073
+3.078
+3.081
+3.082
+3.086
+3.09
+3.096
+3.098
+3.102
+3.107
+3.114
+3.121
+3.13
+3.136
+3.143
+3.152
+3.162
+3.171
+3.182
+3.193
+3.202
+3.213
+3.224
+3.234
+3.246
+3.26
+3.274
+3.287
+3.301
+3.316
+3.332
+3.346
+3.358
+3.37
+3.38
+3.388
+3.416
+3.449
+3.451
+3.441
+3.421
+3.398
+3.368
+3.324
+3.263
+3.195
+3.139
+3.113
+3.103
+3.101
+3.101
+3.104
+3.107
+3.111
+3.113
+3.117
+3.121
+3.124
+3.126
+3.128
+3.132
+3.136
+3.14
+3.147
+3.152
+3.155
+3.161
+3.166
+3.174
+3.178
+3.183
+3.187
+3.189
+3.195
+3.201
+3.204
+3.208
+3.215
+3.226
+3.233
+3.235
+3.241
+3.247
+3.251
+3.251
+3.251
+3.25
+3.246
+3.241
+3.238
+3.231
+3.224
+3.228
+3.232
+3.228
+3.235
+3.236
+3.243
+3.247
+3.251
+3.251
+3.254
+3.258
+3.26
+3.263
+3.271
+3.275
+3.281
+3.286
+3.291
+3.296
+3.303
+3.31
+3.315
+3.324
+3.331
+3.338
+3.348
+3.356
+3.366
+3.378
+3.388
+3.4
+3.412
+3.425
+3.437
+3.453
+3.467
+3.482
+3.497
+3.511
+3.523
+3.529
+3.531
+3.559
+3.616
+3.616
+3.579
+3.559
+3.528
+3.486
+3.438
+3.392
+3.356
+3.332
+3.32
+3.318
+3.321
+3.324
+3.33
+3.338
+3.347
+3.354
+3.363
+3.375
+3.381
+3.389
+3.393
+3.4
+3.405
+3.41
+3.417
+3.423
+3.428
+3.434
+3.438
+3.447
+3.454
+3.46
+3.469
+3.477
+3.482
+3.49
+3.499
+3.513
+3.518
+3.526
+3.531
+3.541
+3.545
+3.55
+3.551
+3.551
+3.546
+3.525
+3.527
+3.518
+3.494
+3.472
+3.444
+3.423
+3.414
+3.403
+3.389
+3.397
+3.395
+3.392
+3.392
+3.4
+3.397
+3.393
+3.392
+3.402
+3.408
+3.422
+3.411
+3.432
+3.437
+3.437
+3.444
+3.449
+3.455
+3.463
+3.463
+3.468
+3.471
+3.479
+3.483
+3.486
+3.492
+3.499
+3.507
+3.513
+3.522
+3.53
+3.536
+3.548
+3.555
+3.562
+3.57
+3.573
+3.584
+3.594
+3.6
+3.611
+3.602
+3.568
+3.531
+3.493
+3.444
+3.387
+3.322
+3.261
+3.228
+3.21
+3.201
+3.188
+3.194
+3.201
+3.192
+3.202
+3.194
+3.191
+3.182
+3.178
+3.179
+3.18
+3.18
+3.185
+3.184
+3.196
+3.189
+3.188
+3.184
+3.189
+3.191
+3.196
+3.196
+3.201
+3.206
+3.208
+3.215
+3.218
+3.224
+3.226
+3.231
+3.234
+3.238
+3.243
+3.247
+3.251
+3.253
+3.259
+3.258
+3.252
+3.241
+3.219
+3.199
+3.185
+3.174
+3.174
+3.178
+3.179
+3.184
+3.185
+3.187
+3.192
+3.195
+3.199
+3.204
+3.207
+3.212
+3.215
+3.215
+3.219
+3.219
+3.226
+3.241
+3.247
+3.255
+3.26
+3.265
+3.271
+3.276
+3.283
+3.28
+3.292
+3.302
+3.321
+3.329
+3.339
+3.348
+3.359
+3.371
+3.382
+3.392
+3.403
+3.409
+3.421
+3.429
+3.442
+3.484
+3.524
+3.516
+3.495
+3.467
+3.433
+3.402
+3.354
+3.285
+3.208
+3.154
+3.129
+3.125
+3.122
+3.122
+3.117
+3.126
+3.131
+3.139
+3.15
+3.152
+3.154
+3.155
+3.157
+3.154
+3.161
+3.168
+3.182
+3.184
+3.187
+3.188
+3.189
+3.192
+3.189
+3.199
+3.209
+3.224
+3.243
+3.251
+3.259
+3.268
+3.272
+3.289
+3.304
+3.32
+3.337
+3.357
+3.366
+3.372
+3.377
+3.38
+3.401
+3.414
+3.4
+3.361
+3.318
+3.266
+3.201
+3.153
+3.125
+3.124
+3.126
+3.129
+3.135
+3.148
+3.15
+3.149
+3.147
+3.145
+3.142
+3.149
+3.151
+3.158
+3.169
+3.165
+3.166
+3.169
+3.168
+3.164
+3.172
+3.182
+3.195
+3.197
+3.199
+3.205
+3.206
+3.211
+3.216
+3.222
+3.227
+3.232
+3.23
+3.241
+3.248
+3.265
+3.268
+3.271
+3.274
+3.266
+3.259
+3.246
+3.212
+3.156
+3.113
+3.072
+3.031
+3.008
+3.004
+2.997
+2.988
+2.982
+2.983
+2.977
+2.975
+2.971
+2.974
+2.973
+2.966
+2.973
+2.97
+2.965
+2.972
+2.976
+2.974
+2.976
+2.979
+2.982
+2.98
+2.982
+2.975
+2.977
+2.981
+2.983
+2.984
+2.986
+2.989
+2.991
+2.994
+2.999
+3.005
+3.011
+3.02
+3.03
+3.037
+3.047
+3.068
+3.116
+3.151
+3.154
+3.129
+3.107
+3.073
+3.034
+2.993
+2.94
+2.888
+2.783
+2.701
+2.688
+2.677
+2.688
+2.683
+2.69
+2.69
+2.685
+2.677
+2.68
+2.685
+2.692
+2.699
+2.705
+2.711
+2.716
+2.724
+2.731
+2.739
+2.747
+2.755
+2.765
+2.774
+2.784
+2.797
+2.807
+2.82
+2.833
+2.846
+2.861
+2.879
+2.897
+2.906
+2.907
+2.92
+2.931
+2.95
+2.989
+3.053
+3.105
+3.112
+3.095
+3.066
+3.029
+2.989
+2.947
+2.904
+2.855
+2.801
+2.736
+2.647
+2.567
+2.546
+2.546
+2.55
+2.556
+2.563
+2.568
+2.578
+2.582
+2.584
+2.594
+2.601
+2.606
+2.616
+2.623
+2.633
+2.641
+2.647
+2.653
+2.661
+2.67
+2.681
+2.689
+2.699
+2.709
+2.72
+2.731
+2.744
+2.761
+2.785
+2.791
+2.804
+2.806
+2.822
+2.843
+2.874
+2.929
+2.981
+2.993
+2.972
+2.94
+2.897
+2.851
+2.801
+2.752
+2.686
+2.608
+2.516
+2.444
+2.418
+2.409
+2.412
+2.416
+2.419
+2.421
+2.423
+2.425
+2.43
+2.431
+2.436
+2.437
+2.438
+2.444
+2.446
+2.448
+2.454
+2.457
+2.466
+2.474
+2.492
+2.493
+2.486
+2.481
+2.492
+2.495
+2.509
+2.521
+2.529
+2.543
+2.558
+2.574
+2.587
+2.607
+2.627
+2.645
+2.657
+2.689
+2.724
+2.739
+2.729
+2.696
+2.651
+2.609
+2.567
+2.514
+2.454
+2.389
+2.313
+2.228
+2.193
+2.19
+2.191
+2.2
+2.212
+2.222
+2.231
+2.238
+2.247
+2.259
+2.263
+2.271
+2.278
+2.282
+2.294
+2.3
+2.305
+2.316
+2.324
+2.332
+2.342
+2.352
+2.364
+2.372
+2.384
+2.393
+2.412
+2.427
+2.437
+2.456
+2.468
+2.494
+2.507
+2.529
+2.544
+2.56
+2.607
+2.654
+2.661
+2.649
+2.62
+2.59
+2.551
+2.511
+2.464
+2.413
+2.348
+2.283
+2.219
+2.182
+2.182
+2.186
+2.192
+2.197
+2.206
+2.21
+2.219
+2.223
+2.231
+2.242
+2.248
+2.256
+2.264
+2.273
+2.281
+2.295
+2.307
+2.319
+2.334
+2.344
+2.357
+2.373
+2.385
+2.398
+2.412
+2.428
+2.445
+2.459
+2.475
+2.493
+2.508
+2.523
+2.538
+2.551
+2.575
+2.622
+2.645
+2.641
+2.618
+2.587
+2.543
+2.495
+2.444
+2.384
+2.318
+2.242
+2.164
+2.134
+2.131
+2.134
+2.14
+2.15
+2.157
+2.172
+2.178
+2.188
+2.2
+2.209
+2.219
+2.234
+2.241
+2.249
+2.263
+2.271
+2.279
+2.289
+2.3
+2.311
+2.317
+2.33
+2.339
+2.347
+2.362
+2.382
+2.378
+2.389
+2.406
+2.422
+2.441
+2.463
+2.471
+2.48
+2.487
+2.493
+2.515
+2.546
+2.543
+2.527
+2.502
+2.475
+2.438
+2.395
+2.345
+2.29
+2.217
+2.148
+2.122
+2.12
+2.124
+2.133
+2.139
+2.147
+2.155
+2.163
+2.171
+2.18
+2.186
+2.192
+2.199
+2.206
+2.212
+2.219
+2.226
+2.234
+2.241
+2.25
+2.258
+2.268
+2.276
+2.285
+2.297
+2.306
+2.321
+2.334
+2.35
+2.373
+2.382
+2.391
+2.395
+2.41
+2.425
+2.439
+2.453
+2.471
+2.509
+2.529
+2.526
+2.51
+2.485
+2.453
+2.414
+2.372
+2.316
+2.26
+2.189
+2.114
+2.07
+2.057
+2.057
+2.059
+2.064
+2.07
+2.075
+2.077
+2.082
+2.087
+2.09
+2.098
+2.103
+2.112
+2.122
+2.131
+2.142
+2.151
+2.164
+2.172
+2.186
+2.194
+2.208
+2.217
+2.231
+2.246
+2.266
+2.28
+2.3
+2.325
+2.34
+2.347
+2.361
+2.36
+2.375
+2.387
+2.407
+2.441
+2.455
+2.443
+2.426
+2.395
+2.357
+2.313
+2.265
+2.213
+2.151
+2.082
+2.03
+2.007
+1.998
+2
+2.002
+2.008
+2.015
+2.022
+2.028
+2.034
+2.041
+2.046
+2.053
+2.059
+2.067
+2.072
+2.08
+2.087
+2.095
+2.104
+2.112
+2.121
+2.128
+2.141
+2.149
+2.159
+2.17
+2.179
+2.19
+2.199
+2.212
+2.22
+2.23
+2.241
+2.252
+2.264
+2.273
+2.283
+2.294
+2.31
+2.332
+2.326
+2.307
+2.282
+2.253
+2.218
+2.184
+2.14
+2.098
+2.047
+1.984
+1.925
+1.896
+1.893
+1.891
+1.897
+1.904
+1.912
+1.919
+1.925
+1.932
+1.939
+1.948
+1.957
+1.962
+1.971
+1.982
+1.989
+1.998
+2.014
+2.012
+2.013
+2.007
+2.012
+2.025
+2.029
+2.039
+2.045
+2.057
+2.066
+2.076
+2.087
+2.099
+2.109
+2.122
+2.133
+2.143
+2.153
+2.175
+2.197
+2.196
+2.181
+2.156
+2.125
+2.085
+2.043
+1.999
+1.948
+1.893
+1.828
+1.778
+1.758
+1.753
+1.754
+1.759
+1.757
+1.761
+1.761
+1.766
+1.766
+1.768
+1.768
+1.769
+1.77
+1.768
+1.771
+1.772
+1.774
+1.777
+1.778
+1.783
+1.787
+1.79
+1.796
+1.803
+1.809
+1.82
+1.823
+1.832
+1.841
+1.845
+1.856
+1.862
+1.871
+1.878
+1.889
+1.892
+1.905
+1.908
+1.914
+1.921
+1.898
+1.875
+1.838
+1.797
+1.75
+1.693
+1.647
+1.622
+1.603
+1.598
+1.594
+1.592
+1.585
+1.584
+1.579
+1.577
+1.577
+1.572
+1.567
+1.566
+1.562
+1.56
+1.558
+1.565
+1.564
+1.569
+1.571
+1.572
+1.572
+1.581
+1.584
+1.586
+1.591
+1.597
+1.601
+1.608
+1.612
+1.619
+1.62
+1.625
+1.629
+1.633
+1.638
+1.645
+1.652
+1.656
+1.66
+1.664
+1.668
+1.666
+1.661
+1.654
+1.646
+1.64
+1.634
+1.624
+1.619
+1.616
+1.617
+1.616
+1.616
+1.62
+1.617
+1.617
+1.615
+1.611
+1.611
+1.611
+1.612
+1.612
+1.612
+1.614
+1.616
+1.617
+1.622
+1.626
+1.63
+1.636
+1.64
+1.645
+1.648
+1.652
+1.657
+1.663
+1.667
+1.672
+1.677
+1.685
+1.69
+1.697
+1.704
+1.711
+1.718
+1.727
+1.733
+1.74
+1.746
+1.752
+1.756
+1.758
+1.76
+1.757
+1.753
+1.746
+1.739
+1.734
+1.731
+1.73
+1.73
+1.732
+1.734
+1.739
+1.742
+1.745
+1.747
+1.748
+1.751
+1.752
+1.754
+1.756
+1.758
+1.761
+1.765
+1.768
+1.773
+1.778
+1.785
+1.793
+1.802
+1.811
+1.82
+1.83
+1.841
+1.85
+1.86
+1.871
+1.883
+1.894
+1.906
+1.919
+1.932
+1.945
+1.958
+1.972
+1.985
+1.998
+2.009
+2.02
+2.029
+2.037
+2.053
+2.082
+2.088
+2.078
+2.059
+2.035
+2.005
+1.97
+1.928
+1.884
+1.833
+1.774
+1.72
+1.684
+1.668
+1.662
+1.659
+1.659
+1.657
+1.656
+1.656
+1.654
+1.656
+1.655
+1.653
+1.653
+1.655
+1.659
+1.664
+1.666
+1.669
+1.676
+1.68
+1.684
+1.69
+1.694
+1.704
+1.707
+1.712
+1.72
+1.729
+1.737
+1.745
+1.754
+1.764
+1.772
+1.782
+1.788
+1.794
+1.799
+1.803
+1.81
+1.81
+1.811
+1.807
+1.8
+1.794
+1.794
+1.783
+1.782
+1.778
+1.78
+1.782
+1.782
+1.787
+1.791
+1.792
+1.796
+1.799
+1.801
+1.804
+1.808
+1.809
+1.814
+1.821
+1.821
+1.827
+1.833
+1.837
+1.846
+1.855
+1.864
+1.875
+1.885
+1.896
+1.906
+1.916
+1.928
+1.939
+1.953
+1.962
+1.975
+1.987
+1.999
+2.012
+2.024
+2.037
+2.049
+2.062
+2.075
+2.086
+2.097
+2.107
+2.123
+2.14
+2.15
+2.141
+2.125
+2.104
+2.076
+2.035
+1.988
+1.941
+1.912
+1.896
+1.892
+1.894
+1.896
+1.899
+1.9
+1.903
+1.905
+1.908
+1.911
+1.914
+1.917
+1.92
+1.923
+1.926
+1.931
+1.937
+1.942
+1.95
+1.958
+1.966
+1.979
+1.987
+1.998
+2.01
+2.022
+2.034
+2.048
+2.062
+2.075
+2.086
+2.101
+2.112
+2.122
+2.136
+2.149
+2.164
+2.174
+2.193
+2.204
+2.208
+2.205
+2.188
+2.166
+2.13
+2.081
+2.024
+1.974
+1.946
+1.939
+1.941
+1.945
+1.952
+1.959
+1.967
+1.973
+1.981
+1.986
+1.992
+1.998
+2.005
+2.011
+2.016
+2.022
+2.029
+2.036
+2.043
+2.052
+2.058
+2.068
+2.079
+2.091
+2.102
+2.114
+2.127
+2.14
+2.154
+2.167
+2.181
+2.197
+2.214
+2.229
+2.244
+2.26
+2.274
+2.288
+2.299
+2.309
+2.336
+2.374
+2.385
+2.373
+2.355
+2.329
+2.293
+2.252
+2.206
+2.151
+2.082
+2.018
+1.996
+1.995
+1.998
+2.003
+2.011
+2.016
+2.022
+2.029
+2.033
+2.037
+2.043
+2.048
+2.053
+2.057
+2.062
+2.067
+2.072
+2.078
+2.086
+2.094
+2.104
+2.117
+2.125
+2.139
+2.153
+2.168
+2.183
+2.197
+2.213
+2.231
+2.248
+2.263
+2.278
+2.291
+2.305
+2.316
+2.334
+2.367
+2.393
+2.394
+2.38
+2.357
+2.325
+2.289
+2.252
+2.205
+2.151
+2.078
+2.023
+2.004
+2.006
+2.009
+2.015
+2.024
+2.031
+2.038
+2.045
+2.054
+2.057
+2.064
+2.071
+2.076
+2.082
+2.088
+2.095
+2.103
+2.111
+2.118
+2.128
+2.136
+2.145
+2.159
+2.17
+2.186
+2.197
+2.212
+2.225
+2.24
+2.256
+2.268
+2.284
+2.299
+2.312
+2.326
+2.34
+2.357
+2.376
+2.421
+2.429
+2.407
+2.387
+2.349
+2.311
+2.268
+2.207
+2.16
+2.143
+2.144
+2.15
+2.156
+2.162
+2.17
+2.176
+2.185
+2.194
+2.199
+2.204
+2.208
+2.214
+2.219
+2.228
+2.233
+2.241
+2.249
+2.257
+2.265
+2.277
+2.286
+2.299
+2.312
+2.324
+2.339
+2.353
+2.368
+2.382
+2.397
+2.415
+2.432
+2.446
+2.463
+2.481
+2.495
+2.509
+2.524
+2.536
+2.551
+2.572
+2.619
+2.637
+2.634
+2.619
+2.589
+2.545
+2.48
+2.421
+2.385
+2.375
+2.377
+2.383
+2.391
+2.399
+2.407
+2.416
+2.425
+2.434
+2.443
+2.453
+2.461
+2.472
+2.483
+2.493
+2.503
+2.514
+2.528
+2.539
+2.551
+2.565
+2.576
+2.593
+2.606
+2.621
+2.637
+2.654
+2.671
+2.686
+2.703
+2.719
+2.736
+2.754
+2.769
+2.791
+2.827
+2.89
+2.946
+2.978
+2.984
+2.972
+2.947
+2.909
+2.868
+2.824
+2.777
+2.726
+2.675
+2.616
+2.547
+2.465
+2.368
+2.305
+2.296
+2.302
+2.303
+2.309
+2.319
+2.328
+2.332
+2.338
+2.347
+2.357
+2.366
+2.379
+2.387
+2.398
+2.41
+2.42
+2.433
+2.445
+2.456
+2.471
+2.484
+2.498
+2.512
+2.522
+2.539
+2.553
+2.568
+2.583
+2.602
+2.617
+2.634
+2.649
+2.669
+2.692
+2.739
+2.794
+2.805
+2.793
+2.767
+2.738
+2.697
+2.656
+2.608
+2.55
+2.477
+2.398
+2.35
+2.338
+2.344
+2.35
+2.359
+2.368
+2.381
+2.39
+2.401
+2.412
+2.42
+2.431
+2.442
+2.453
+2.467
+2.476
+2.488
+2.501
+2.514
+2.525
+2.542
+2.555
+2.568
+2.582
+2.595
+2.61
+2.625
+2.639
+2.655
+2.671
+2.689
+2.706
+2.72
+2.735
+2.76
+2.79
+2.85
+2.899
+2.911
+2.897
+2.856
+2.82
+2.777
+2.728
+2.676
+2.623
+2.567
+2.498
+2.41
+2.319
+2.299
+2.296
+2.303
+2.311
+2.318
+2.329
+2.336
+2.343
+2.353
+2.367
+2.374
+2.383
+2.394
+2.405
+2.415
+2.426
+2.44
+2.45
+2.464
+2.475
+2.488
+2.504
+2.517
+2.534
+2.547
+2.562
+2.579
+2.594
+2.61
+2.621
+2.634
+2.648
+2.664
+2.679
+2.694
+2.707
+2.728
+2.781
+2.811
+2.814
+2.798
+2.776
+2.741
+2.708
+2.658
+2.598
+2.518
+2.45
+2.429
+2.43
+2.437
+2.449
+2.461
+2.47
+2.481
+2.492
+2.503
+2.513
+2.523
+2.534
+2.545
+2.555
+2.568
+2.579
+2.588
+2.598
+2.61
+2.62
+2.631
+2.643
+2.655
+2.665
+2.677
+2.689
+2.702
+2.715
+2.729
+2.742
+2.757
+2.771
+2.787
+2.803
+2.817
+2.839
+2.879
+2.948
+2.986
+2.975
+2.943
+2.916
+2.887
+2.855
+2.823
+2.786
+2.746
+2.693
+2.62
+2.55
+2.516
+2.51
+2.516
+2.523
+2.533
+2.542
+2.551
+2.561
+2.57
+2.58
+2.591
+2.602
+2.61
+2.625
+2.634
+2.646
+2.657
+2.667
+2.676
+2.687
+2.7
+2.708
+2.723
+2.734
+2.749
+2.762
+2.774
+2.788
+2.802
+2.817
+2.834
+2.847
+2.863
+2.879
+2.901
+2.944
+3.012
+3.066
+3.081
+3.061
+3.036
+2.999
+2.957
+2.915
+2.871
+2.826
+2.778
+2.713
+2.625
+2.531
+2.501
+2.503
+2.51
+2.517
+2.527
+2.534
+2.544
+2.553
+2.559
+2.567
+2.573
+2.581
+2.589
+2.595
+2.604
+2.611
+2.619
+2.627
+2.636
+2.645
+2.653
+2.663
+2.672
+2.684
+2.697
+2.708
+2.725
+2.737
+2.754
+2.769
+2.783
+2.8
+2.818
+2.833
+2.861
+2.905
+2.972
+3.036
+3.062
+3.05
+3.019
+2.977
+2.932
+2.883
+2.834
+2.785
+2.732
+2.67
+2.599
+2.502
+2.416
+2.396
+2.399
+2.405
+2.411
+2.418
+2.426
+2.435
+2.442
+2.451
+2.46
+2.47
+2.478
+2.488
+2.498
+2.509
+2.521
+2.532
+2.545
+2.557
+2.571
+2.583
+2.596
+2.612
+2.626
+2.64
+2.656
+2.672
+2.688
+2.701
+2.717
+2.73
+2.744
+2.77
+2.816
+2.888
+2.926
+2.924
+2.9
+2.866
+2.827
+2.783
+2.736
+2.684
+2.62
+2.547
+2.452
+2.376
+2.36
+2.362
+2.368
+2.376
+2.384
+2.391
+2.4
+2.409
+2.416
+2.427
+2.437
+2.446
+2.458
+2.469
+2.479
+2.489
+2.5
+2.51
+2.523
+2.534
+2.546
+2.557
+2.571
+2.583
+2.596
+2.611
+2.625
+2.642
+2.656
+2.671
+2.688
+2.704
+2.719
+2.734
+2.748
+2.77
+2.811
+2.881
+2.927
+2.932
+2.909
+2.874
+2.832
+2.788
+2.737
+2.683
+2.625
+2.56
+2.489
+2.395
+2.313
+2.297
+2.299
+2.308
+2.317
+2.327
+2.336
+2.345
+2.357
+2.368
+2.377
+2.388
+2.398
+2.406
+2.419
+2.428
+2.439
+2.45
+2.46
+2.474
+2.484
+2.496
+2.509
+2.522
+2.533
+2.548
+2.562
+2.577
+2.589
+2.603
+2.619
+2.633
+2.649
+2.664
+2.691
+2.743
+2.799
+2.804
+2.771
+2.736
+2.704
+2.671
+2.634
+2.592
+2.541
+2.48
+2.404
+2.348
+2.328
+2.328
+2.334
+2.342
+2.351
+2.361
+2.371
+2.38
+2.389
+2.399
+2.409
+2.418
+2.427
+2.435
+2.446
+2.455
+2.466
+2.472
+2.482
+2.489
+2.499
+2.51
+2.519
+2.529
+2.543
+2.554
+2.566
+2.579
+2.593
+2.607
+2.623
+2.636
+2.652
+2.665
+2.685
+2.717
+2.771
+2.844
+2.86
+2.836
+2.807
+2.772
+2.736
+2.699
+2.66
+2.62
+2.578
+2.531
+2.476
+2.409
+2.327
+2.275
+2.258
+2.256
+2.266
+2.271
+2.279
+2.289
+2.296
+2.306
+2.312
+2.319
+2.324
+2.328
+2.344
+2.347
+2.356
+2.359
+2.368
+2.376
+2.39
+2.392
+2.405
+2.414
+2.426
+2.435
+2.446
+2.458
+2.478
+2.488
+2.502
+2.521
+2.532
+2.557
+2.563
+2.574
+2.596
+2.63
+2.683
+2.707
+2.698
+2.679
+2.647
+2.61
+2.569
+2.516
+2.456
+2.381
+2.302
+2.275
+2.274
+2.279
+2.286
+2.295
+2.301
+2.31
+2.316
+2.321
+2.329
+2.336
+2.341
+2.347
+2.355
+2.363
+2.371
+2.378
+2.387
+2.395
+2.407
+2.417
+2.428
diff --git a/test/input_data/idealised_stage/Idealised_stage.params b/test/input_data/idealised_stage/Idealised_stage.params
new file mode 100644
index 0000000..31f24e2
--- /dev/null
+++ b/test/input_data/idealised_stage/Idealised_stage.params
@@ -0,0 +1,145 @@
+# LSDCatchmentModel (DAV Version) Parameter File
+# 04/04/2020
+
+Idealised, stage mode test
+Plane with E->W sloping gradient 11x11
+
+# FILE INFORMATION
+#==================
+dem_read_extension: asc
+dem_write_extension: asc
+read_path: /home/decval/dev/HAIL-CAESAR/test/input_data/idealised_stage/
+write_path: /home/decval/dev/HAIL-CAESAR/test/results/idealised_stage/
+read_fname: idealised
+write_fname: idealised_stage.dat
+timeseries_save_interval: 60
+
+# SUPPLEMENTARY FILES
+#====================
+# REMEMBER TO SPECIFY A BEDROCK DEM FILE IF YOU TURN THIS ON
+spatial_mannings_dem_file: spatial_mannings.asc
+spatially_variable_mannings_on: no
+
+# NUMERICAL
+#===========
+min_time_step: 0 # IN SECONDS
+max_time_step: 3600 # IN SECONDS
+run_time_start: 0 # ZERO UNLESS RESTARTING RUN
+max_run_duration: 2824 # IN MODEL HOURS, MUST BE T-1, I.E. '71' FOR 72HR SIMULATION - SORRY!
+memory_limit: 1 # IGNORE
+
+# SEDIMENT
+#==========
+transport_law: wilcock # CHOICES ARE wilcock OR einstein
+max_tau_velocity: 5 # METRES/SECOND
+active_layer_thickness: 0.1 # METRES
+chann_lateral_erosion: 10 # IN CHANNEL LATERAL EROSION RATE, PREVENTS OVERDEEPENING FEEDBACK
+erosion_limit: 0.02 # LIMITS THE MOUNT OF EROSION PER TIMESTEP
+suspended_sediment_on: yes # 1ST FRACTION ONLY, AT PRESENT
+read_in_graindata_from_file: no # MUST SPECIFY GRAINDATA FILE ABOVE IF YES
+
+# LATERAL EROSION
+#=================
+lateral_erosion_on: no # UNTESTED! - LATERAL EROSION NOT FULLY IMPLEMENTED YET
+lateral_erosion_const: 0.001 # LATERAL EROSION CONSTANT
+edge_smoothing_passes: 30 # NUMBER OF PASSES FOR EDGE SMOOTHING FILTER
+downstream_cell_shift: 3 # CELLS TO SHIFT LATERAL EROSION DOWNSTREAM
+lateral_cross_chan_smoothing: 0.0001 # MAX DIFFERENCE IN CROSS CHANNEL SMOOTHING OF EDGE VALUES
+
+# HYDROLOGY
+#===========
+hydro_model_only: yes # SWITCHES OFF THE EROSION
+topmodel_m_value: 0.015 # SEE LITERATURE FOR GUIDANCE
+in_out_difference: 5 # CUMECS, UNTESTED
+min_q_for_depth_calc: 0.1 # CUMECS
+max_q_for_depth_calc: 1000 # CUMECS
+water_depth_erosion_threshold: 0.01 # METRES
+slope_on_edge_cell: 0.001 # SHOULD BE APPROX EQUAL TO CHAN SLOPE NEAR OUTLET
+evaporation_rate: 0.0 # NOT YET IMPLEMENTED
+courant_number: 0.7 # NO LOWER THAN 3 PLEASE, MAX AROUND 0.7 - NUMERICAL STABILITY CONTROL
+froude_num_limit: 0.8 # CONTROLS FLOW BETWEEN CELLS PER TIME STEP (SEE DOCS)
+mannings_n: 0.04 # SEE LITERATURE FOR GUIDANCE
+hflow_threshold: 0.001 # IN METRES, DETERMINES IF HORIZ. FLOW CALCULATED
+
+# REACH MODE HYDROLOGY
+#=====================
+reach_mode: no # Run in reach mode with input discharge data
+divide_inputs_by: 3
+reach_input_data_timestep: 6000000
+
+# REACH INPUTS
+#==============
+
+reach1_input_file: input2.txt
+reach1_input_on: no
+reach1_x: 10
+reach1_y: 4
+
+reach2_input_file: input2.txt
+reach2_input_on: no
+reach2_x: 10
+reach2_y: 5
+
+reach3_input_file: input2.txt
+reach3_input_on: no
+reach3_x: 10
+reach3_y: 6
+
+# STAGE INPUTS
+#==============
+
+stage_mode_input_on: yes
+stage_input_timestep: 60
+fromx: 5
+tox: 6
+fromy: 5
+toy: 6
+stage_inputfile: stage_mode_input.csv
+
+# PRECIPITATION
+#==============
+rainfall_data_on: no # IF YES, HAVE YOU SET A RAINFALL FILE?
+ # VALUES IN MM/HR, REGARDLESS OF TIMESTEP
+rain_data_time_step: 60 # MINUTES, MUST MATCH RAINFALL FILE
+spatial_var_rain: no # IF YES, HAVE YOU SET A HYDROINDEX FILE?
+num_unique_rain_cells: 1 # SHOULD MATCH NO. OF HYDROINDEX ZONES, COUNT THEM
+spatially_complex_rainfall_on: no # UNTESTED...
+interpolation_method: cubic # CAREFUL NOW.
+generate_artificial_rainfall: no # PIPE DREAM.
+
+
+# VEGETATION
+#===========
+vegetation_on: yes # VEGETATION NOT IMPLEMENTED/TESTED YET
+grass_grow_rate: 0.0 # TIME IN WHICH VEGETATION REACHES MATURITY IN YEARS
+vegetation_crit_shear: 5.0 # VALUE ABOVE WHICH VEGETATION REMOVED BY EROSION
+veg_erosion_prop: 0.1 # PROPORTION OF EROSION ALLOWED TO OCCUR WHEN VEG IS FULLY GROWN
+
+# HILLSLOPE
+#==========
+creep_rate: 0.0025 # METRES/YEAR (?UNTESTED)
+slope_failure_thresh: 45 # CRITICAL ANGLE OF FAILURE
+soil_erosion_rate: 0.0
+soil_j_mean_depends: yes # UNTESTED
+call_muddpile_model: yes # NOT YET IMPLEMENTED
+
+# WRITE OUTPUT RASTERS
+#======================
+raster_output_interval: 100000 # IN MODEL MINUTES
+write_waterdepth_file: yes
+waterdepth_outfile_name: WaterDepths
+write_elev_file: no
+write_elevation_file: Elevations
+write_grainsize_file: no
+grainsize_file: Grainz
+
+write_elevdiff_file: no
+elevdiff_outfile_name: ElevationDiff
+
+raingrid_fname_out: raindata_grid # MAINLY FOR DEBUG PURPOSES,
+ # YOU DON'T REALLY NEED TO PRINT THIS OUT
+
+# DEBUG OPTIONS
+#================
+debug_print_cycle: yes # PRINTS THE CURRENT CYCLE ITERATION TO CONSOLE
+debug_write_raingrid: no # WRITES RAINGRID RASTER EVERY CALC_J() CALLED (WARNING: LOTS OF DATA!)
diff --git a/test/input_data/idealised_stage/idealised.asc b/test/input_data/idealised_stage/idealised.asc
new file mode 100644
index 0000000..09e8d44
--- /dev/null
+++ b/test/input_data/idealised_stage/idealised.asc
@@ -0,0 +1,18 @@
+cols 11
+nrows 11
+xllcorne 1
+yllcorne 1
+cellsize 10
+NODATA_v -9999
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
+ 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00
diff --git a/test/input_data/idealised_stage/input2.txt b/test/input_data/idealised_stage/input2.txt
new file mode 100644
index 0000000..2e426a2
--- /dev/null
+++ b/test/input_data/idealised_stage/input2.txt
@@ -0,0 +1,44 @@
+0 10 0.0 0.0 6.293498 10.971469 1.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+1 200.428 0.0 0.0 0.293498 00.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+2 10.309 0.0 0.0 1.831533 00.174914 0.244099 0.16542 0.110451 0.073047 0.052664 0.010167 0.000571 0.000202
+3 8.31 0.0 0.0 0.348308 00.246164 0.036545 0.025763 0.009109 0.00322 0.026912 0.000403 0.000142 5E-05
+4 9.312 0.0 0.0 0.343898 00.248002 0.054529 0.02676 0.009461 0.003345 0.001183 0.000418 0.000148 5.2E-05
+5 10.314 0.0 0.0 0.303792 00.238146 0.01454 0.037053 0.009102 0.003218 0.001138 0.000402 0.000142 5E-05
+6 11.315 0.0 0.0 0.344678 0.275723 0.006751 0.045927 0.010543 0.003728 0.001318 0.000466 0.000165 5.8E-05
+7 20.317 0.0 0.0 0.298657 0.221956 0.036747 0.026866 0.008477 0.002997 0.00106 0.000375 0.000132 4.7E-05
+8 9.318 0.0 0.0 0.459466 0.334653 0.068954 0.036135 0.012776 0.004517 0.001597 0.000565 0.0002 7.1E-05
+9 7.318 0.0 0.0 0.343466 0.250163 0.051545 0.027012 0.00955 0.003377 0.001194 0.000422 0.000149 5.3E-05
+10 5.319 0.0 0.0 0.230376 0.168257 0.027589 0.02394 0.00686 0.002425 0.000857 0.000303 0.000107 3.8E-05
+11 5 0.0 0.0 6.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+12 6.428 0.0 0.0 0.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+13 7.309 0.0 0.0 1.831533 00.174914 0.244099 0.16542 0.110451 0.073047 0.052664 0.010167 0.000571 0.000202
+14 8.31 0.0 0.0 0.348308 00.246164 0.036545 0.025763 0.009109 0.00322 0.026912 0.000403 0.000142 5E-05
+15 9.312 0.0 0.0 0.343898 00.248002 0.054529 0.02676 0.009461 0.003345 0.001183 0.000418 0.000148 5.2E-05
+16 10.314 0.0 0.0 0.303792 00.238146 0.01454 0.037053 0.009102 0.003218 0.001138 0.000402 0.000142 5E-05
+17 11.315 0.0 0.0 0.344678 0.275723 0.006751 0.045927 0.010543 0.003728 0.001318 0.000466 0.000165 5.8E-05
+18 20.317 0.0 0.0 0.298657 0.221956 0.036747 0.026866 0.008477 0.002997 0.00106 0.000375 0.000132 4.7E-05
+19 9.318 0.0 0.0 0.459466 0.334653 0.068954 0.036135 0.012776 0.004517 0.001597 0.000565 0.0002 7.1E-05
+20 7.318 0.0 0.0 0.343466 0.250163 0.051545 0.027012 0.00955 0.003377 0.001194 0.000422 0.000149 5.3E-05
+21 5.319 0.0 0.0 0.230376 0.168257 0.027589 0.02394 0.00686 0.002425 0.000857 0.000303 0.000107 3.8E-05
+22 5 0.0 0.0 6.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+22 6.428 0.0 0.0 0.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+23 7.309 0.0 0.0 1.831533 00.174914 0.244099 0.16542 0.110451 0.073047 0.052664 0.010167 0.000571 0.000202
+24 8.31 0.0 0.0 0.348308 00.246164 0.036545 0.025763 0.009109 0.00322 0.026912 0.000403 0.000142 5E-05
+25 9.312 0.0 0.0 0.343898 00.248002 0.054529 0.02676 0.009461 0.003345 0.001183 0.000418 0.000148 5.2E-05
+26 10.314 0.0 0.0 0.303792 00.238146 0.01454 0.037053 0.009102 0.003218 0.001138 0.000402 0.000142 5E-05
+27 11.315 0.0 0.0 0.344678 0.275723 0.006751 0.045927 0.010543 0.003728 0.001318 0.000466 0.000165 5.8E-05
+28 30.317 0.0 0.0 0.298657 0.221956 0.036747 0.026866 0.008477 0.002997 0.00106 0.000375 0.000132 4.7E-05
+29 9.318 0.0 0.0 0.459466 0.334653 0.068954 0.036135 0.012776 0.004517 0.001597 0.000565 0.0002 7.1E-05
+30 7.318 0.0 0.0 0.343466 0.250163 0.051545 0.027012 0.00955 0.003377 0.001194 0.000422 0.000149 5.3E-05
+31 5.319 0.0 0.0 0.230376 0.168257 0.027589 0.02394 0.00686 0.002425 0.000857 0.000303 0.000107 3.8E-05
+32 5 0.0 0.0 6.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+33 6.428 0.0 0.0 0.293498 000.971469 0.881546 0.586662 0.416064 0.283597 0.112031 0.039609 0.001863 0.000659
+34 7.309 0.0 0.0 1.831533 00.174914 0.244099 0.16542 0.110451 0.073047 0.052664 0.010167 0.000571 0.000202
+35 8.31 0.0 0.0 0.348308 00.246164 0.036545 0.025763 0.009109 0.00322 0.026912 0.000403 0.000142 5E-05
+36 9.312 0.0 0.0 0.343898 00.248002 0.054529 0.02676 0.009461 0.003345 0.001183 0.000418 0.000148 5.2E-05
+37 10.314 0.0 0.0 0.303792 00.238146 0.01454 0.037053 0.009102 0.003218 0.001138 0.000402 0.000142 5E-05
+38 11.315 0.0 0.0 0.344678 0.275723 0.006751 0.045927 0.010543 0.003728 0.001318 0.000466 0.000165 5.8E-05
+39 20.317 0.0 0.0 0.298657 0.221956 0.036747 0.026866 0.008477 0.002997 0.00106 0.000375 0.000132 4.7E-05
+40 9.318 0.0 0.0 0.459466 0.334653 0.068954 0.036135 0.012776 0.004517 0.001597 0.000565 0.0002 7.1E-05
+41 7.318 0.0 0.0 0.343466 0.250163 0.051545 0.027012 0.00955 0.003377 0.001194 0.000422 0.000149 5.3E-05
+42 5.319 0.0 0.0 0.230376 0.168257 0.027589 0.02394 0.00686 0.002425 0.000857 0.000303 0.000107 3.8E-05
diff --git a/test/input_data/idealised_stage/spatial_mannings.asc b/test/input_data/idealised_stage/spatial_mannings.asc
new file mode 100644
index 0000000..89b96fd
--- /dev/null
+++ b/test/input_data/idealised_stage/spatial_mannings.asc
@@ -0,0 +1,19 @@
+cols 11
+nrows 11
+xllcorne 1
+yllcorne 1
+cellsize 10
+NODATA_v -9999
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+0.04 0.04 0.04 0.04 0.04 0.04 0.06 0.06 0.06 0.06 0.06
+
diff --git a/test/input_data/idealised_stage/stage_mode_input.csv b/test/input_data/idealised_stage/stage_mode_input.csv
new file mode 100644
index 0000000..b2a5d0f
--- /dev/null
+++ b/test/input_data/idealised_stage/stage_mode_input.csv
@@ -0,0 +1,2825 @@
+2.8
+2.813
+2.827
+2.842
+2.855
+2.868
+2.883
+2.9
+2.934
+2.989
+3.002
+2.99
+2.964
+2.933
+2.898
+2.858
+2.818
+2.76
+2.678
+2.592
+2.541
+2.535
+2.54
+2.548
+2.556
+2.564
+2.572
+2.581
+2.592
+2.599
+2.607
+2.617
+2.629
+2.639
+2.654
+2.658
+2.66
+2.655
+2.663
+2.672
+2.679
+2.687
+2.694
+2.706
+2.714
+2.724
+2.734
+2.752
+2.757
+2.764
+2.77
+2.772
+2.786
+2.8
+2.812
+2.827
+2.841
+2.848
+2.874
+2.912
+2.972
+2.984
+2.978
+2.956
+2.926
+2.893
+2.859
+2.82
+2.772
+2.703
+2.615
+2.554
+2.536
+2.544
+2.544
+2.544
+2.537
+2.543
+2.55
+2.556
+2.565
+2.571
+2.576
+2.584
+2.592
+2.599
+2.608
+2.625
+2.63
+2.63
+2.632
+2.632
+2.641
+2.65
+2.662
+2.675
+2.689
+2.704
+2.726
+2.736
+2.744
+2.743
+2.758
+2.772
+2.785
+2.797
+2.825
+2.87
+2.929
+2.954
+2.943
+2.918
+2.879
+2.845
+2.805
+2.763
+2.714
+2.66
+2.594
+2.512
+2.427
+2.385
+2.367
+2.358
+2.348
+2.352
+2.359
+2.363
+2.367
+2.373
+2.379
+2.388
+2.394
+2.403
+2.419
+2.418
+2.421
+2.416
+2.423
+2.435
+2.446
+2.457
+2.468
+2.488
+2.492
+2.496
+2.499
+2.5
+2.514
+2.523
+2.538
+2.551
+2.573
+2.579
+2.584
+2.585
+2.592
+2.607
+2.635
+2.689
+2.71
+2.696
+2.663
+2.617
+2.576
+2.531
+2.484
+2.431
+2.376
+2.317
+2.236
+2.171
+2.136
+2.131
+2.117
+2.122
+2.126
+2.132
+2.135
+2.141
+2.147
+2.151
+2.157
+2.161
+2.17
+2.174
+2.185
+2.188
+2.192
+2.197
+2.205
+2.211
+2.219
+2.223
+2.236
+2.237
+2.245
+2.252
+2.262
+2.268
+2.277
+2.286
+2.298
+2.307
+2.317
+2.326
+2.335
+2.343
+2.349
+2.358
+2.362
+2.368
+2.356
+2.324
+2.284
+2.239
+2.202
+2.183
+2.177
+2.176
+2.178
+2.183
+2.19
+2.196
+2.204
+2.21
+2.216
+2.22
+2.227
+2.23
+2.234
+2.238
+2.242
+2.248
+2.25
+2.254
+2.258
+2.263
+2.268
+2.273
+2.277
+2.284
+2.289
+2.297
+2.304
+2.313
+2.319
+2.329
+2.34
+2.352
+2.366
+2.378
+2.393
+2.407
+2.422
+2.433
+2.447
+2.46
+2.471
+2.482
+2.497
+2.524
+2.546
+2.54
+2.517
+2.484
+2.437
+2.386
+2.326
+2.264
+2.222
+2.201
+2.193
+2.195
+2.199
+2.203
+2.203
+2.212
+2.215
+2.219
+2.224
+2.23
+2.231
+2.24
+2.248
+2.253
+2.26
+2.272
+2.28
+2.292
+2.293
+2.295
+2.29
+2.302
+2.312
+2.321
+2.338
+2.342
+2.346
+2.349
+2.351
+2.356
+2.355
+2.362
+2.371
+2.383
+2.393
+2.402
+2.414
+2.424
+2.432
+2.439
+2.446
+2.453
+2.445
+2.416
+2.376
+2.322
+2.261
+2.212
+2.179
+2.166
+2.158
+2.156
+2.158
+2.159
+2.161
+2.164
+2.164
+2.167
+2.17
+2.171
+2.172
+2.176
+2.176
+2.179
+2.183
+2.184
+2.186
+2.189
+2.191
+2.198
+2.202
+2.206
+2.211
+2.216
+2.22
+2.228
+2.234
+2.243
+2.252
+2.261
+2.271
+2.28
+2.294
+2.304
+2.316
+2.326
+2.339
+2.35
+2.362
+2.369
+2.377
+2.383
+2.382
+2.373
+2.365
+2.355
+2.34
+2.33
+2.318
+2.316
+2.316
+2.32
+2.323
+2.33
+2.339
+2.343
+2.357
+2.355
+2.352
+2.342
+2.35
+2.358
+2.361
+2.367
+2.375
+2.394
+2.391
+2.39
+2.387
+2.384
+2.371
+2.376
+2.383
+2.386
+2.392
+2.397
+2.404
+2.41
+2.417
+2.424
+2.432
+2.441
+2.449
+2.458
+2.466
+2.474
+2.482
+2.489
+2.497
+2.498
+2.503
+2.504
+2.505
+2.503
+2.5
+2.493
+2.489
+2.482
+2.475
+2.471
+2.469
+2.468
+2.471
+2.473
+2.477
+2.481
+2.486
+2.492
+2.497
+2.503
+2.509
+2.516
+2.523
+2.53
+2.539
+2.548
+2.561
+2.562
+2.563
+2.559
+2.57
+2.578
+2.588
+2.608
+2.611
+2.616
+2.62
+2.624
+2.627
+2.625
+2.635
+2.645
+2.657
+2.668
+2.682
+2.694
+2.705
+2.718
+2.729
+2.739
+2.748
+2.756
+2.761
+2.761
+2.76
+2.753
+2.739
+2.725
+2.706
+2.684
+2.666
+2.655
+2.647
+2.645
+2.649
+2.653
+2.656
+2.665
+2.67
+2.678
+2.684
+2.704
+2.702
+2.703
+2.694
+2.702
+2.707
+2.714
+2.722
+2.732
+2.744
+2.747
+2.749
+2.751
+2.753
+2.744
+2.752
+2.758
+2.765
+2.772
+2.779
+2.789
+2.799
+2.81
+2.821
+2.834
+2.843
+2.857
+2.869
+2.882
+2.899
+2.914
+2.914
+2.92
+2.914
+2.921
+2.927
+2.924
+2.931
+2.904
+2.879
+2.851
+2.827
+2.806
+2.784
+2.783
+2.786
+2.789
+2.793
+2.799
+2.806
+2.812
+2.817
+2.824
+2.832
+2.838
+2.845
+2.848
+2.857
+2.862
+2.866
+2.873
+2.879
+2.886
+2.891
+2.898
+2.906
+2.912
+2.919
+2.929
+2.939
+2.951
+2.968
+2.977
+2.984
+2.987
+2.986
+3.002
+3.015
+3.034
+3.042
+3.051
+3.056
+3.06
+3.065
+3.064
+3.057
+3.054
+3.033
+3.014
+2.99
+2.969
+2.948
+2.945
+2.944
+2.946
+2.951
+2.955
+2.963
+2.967
+2.973
+2.98
+2.985
+2.992
+2.999
+3.007
+3.013
+3.02
+3.028
+3.036
+3.047
+3.061
+3.064
+3.066
+3.065
+3.077
+3.087
+3.103
+3.109
+3.114
+3.121
+3.126
+3.133
+3.132
+3.145
+3.157
+3.169
+3.181
+3.193
+3.205
+3.221
+3.227
+3.231
+3.234
+3.242
+3.238
+3.243
+3.226
+3.189
+3.138
+3.083
+3.032
+3
+2.983
+2.974
+2.971
+2.968
+2.967
+2.968
+2.972
+2.974
+2.98
+2.982
+2.982
+2.982
+2.989
+2.988
+2.991
+2.993
+3
+3
+3.001
+3.005
+3.007
+3.012
+3.012
+3.02
+3.02
+3.024
+3.026
+3.032
+3.033
+3.04
+3.049
+3.057
+3.061
+3.07
+3.08
+3.086
+3.094
+3.104
+3.111
+3.11
+3.109
+3.113
+3.108
+3.098
+3.081
+3.074
+3.067
+3.067
+3.066
+3.068
+3.067
+3.07
+3.071
+3.073
+3.078
+3.081
+3.082
+3.086
+3.09
+3.096
+3.098
+3.102
+3.107
+3.114
+3.121
+3.13
+3.136
+3.143
+3.152
+3.162
+3.171
+3.182
+3.193
+3.202
+3.213
+3.224
+3.234
+3.246
+3.26
+3.274
+3.287
+3.301
+3.316
+3.332
+3.346
+3.358
+3.37
+3.38
+3.388
+3.416
+3.449
+3.451
+3.441
+3.421
+3.398
+3.368
+3.324
+3.263
+3.195
+3.139
+3.113
+3.103
+3.101
+3.101
+3.104
+3.107
+3.111
+3.113
+3.117
+3.121
+3.124
+3.126
+3.128
+3.132
+3.136
+3.14
+3.147
+3.152
+3.155
+3.161
+3.166
+3.174
+3.178
+3.183
+3.187
+3.189
+3.195
+3.201
+3.204
+3.208
+3.215
+3.226
+3.233
+3.235
+3.241
+3.247
+3.251
+3.251
+3.251
+3.25
+3.246
+3.241
+3.238
+3.231
+3.224
+3.228
+3.232
+3.228
+3.235
+3.236
+3.243
+3.247
+3.251
+3.251
+3.254
+3.258
+3.26
+3.263
+3.271
+3.275
+3.281
+3.286
+3.291
+3.296
+3.303
+3.31
+3.315
+3.324
+3.331
+3.338
+3.348
+3.356
+3.366
+3.378
+3.388
+3.4
+3.412
+3.425
+3.437
+3.453
+3.467
+3.482
+3.497
+3.511
+3.523
+3.529
+3.531
+3.559
+3.616
+3.616
+3.579
+3.559
+3.528
+3.486
+3.438
+3.392
+3.356
+3.332
+3.32
+3.318
+3.321
+3.324
+3.33
+3.338
+3.347
+3.354
+3.363
+3.375
+3.381
+3.389
+3.393
+3.4
+3.405
+3.41
+3.417
+3.423
+3.428
+3.434
+3.438
+3.447
+3.454
+3.46
+3.469
+3.477
+3.482
+3.49
+3.499
+3.513
+3.518
+3.526
+3.531
+3.541
+3.545
+3.55
+3.551
+3.551
+3.546
+3.525
+3.527
+3.518
+3.494
+3.472
+3.444
+3.423
+3.414
+3.403
+3.389
+3.397
+3.395
+3.392
+3.392
+3.4
+3.397
+3.393
+3.392
+3.402
+3.408
+3.422
+3.411
+3.432
+3.437
+3.437
+3.444
+3.449
+3.455
+3.463
+3.463
+3.468
+3.471
+3.479
+3.483
+3.486
+3.492
+3.499
+3.507
+3.513
+3.522
+3.53
+3.536
+3.548
+3.555
+3.562
+3.57
+3.573
+3.584
+3.594
+3.6
+3.611
+3.602
+3.568
+3.531
+3.493
+3.444
+3.387
+3.322
+3.261
+3.228
+3.21
+3.201
+3.188
+3.194
+3.201
+3.192
+3.202
+3.194
+3.191
+3.182
+3.178
+3.179
+3.18
+3.18
+3.185
+3.184
+3.196
+3.189
+3.188
+3.184
+3.189
+3.191
+3.196
+3.196
+3.201
+3.206
+3.208
+3.215
+3.218
+3.224
+3.226
+3.231
+3.234
+3.238
+3.243
+3.247
+3.251
+3.253
+3.259
+3.258
+3.252
+3.241
+3.219
+3.199
+3.185
+3.174
+3.174
+3.178
+3.179
+3.184
+3.185
+3.187
+3.192
+3.195
+3.199
+3.204
+3.207
+3.212
+3.215
+3.215
+3.219
+3.219
+3.226
+3.241
+3.247
+3.255
+3.26
+3.265
+3.271
+3.276
+3.283
+3.28
+3.292
+3.302
+3.321
+3.329
+3.339
+3.348
+3.359
+3.371
+3.382
+3.392
+3.403
+3.409
+3.421
+3.429
+3.442
+3.484
+3.524
+3.516
+3.495
+3.467
+3.433
+3.402
+3.354
+3.285
+3.208
+3.154
+3.129
+3.125
+3.122
+3.122
+3.117
+3.126
+3.131
+3.139
+3.15
+3.152
+3.154
+3.155
+3.157
+3.154
+3.161
+3.168
+3.182
+3.184
+3.187
+3.188
+3.189
+3.192
+3.189
+3.199
+3.209
+3.224
+3.243
+3.251
+3.259
+3.268
+3.272
+3.289
+3.304
+3.32
+3.337
+3.357
+3.366
+3.372
+3.377
+3.38
+3.401
+3.414
+3.4
+3.361
+3.318
+3.266
+3.201
+3.153
+3.125
+3.124
+3.126
+3.129
+3.135
+3.148
+3.15
+3.149
+3.147
+3.145
+3.142
+3.149
+3.151
+3.158
+3.169
+3.165
+3.166
+3.169
+3.168
+3.164
+3.172
+3.182
+3.195
+3.197
+3.199
+3.205
+3.206
+3.211
+3.216
+3.222
+3.227
+3.232
+3.23
+3.241
+3.248
+3.265
+3.268
+3.271
+3.274
+3.266
+3.259
+3.246
+3.212
+3.156
+3.113
+3.072
+3.031
+3.008
+3.004
+2.997
+2.988
+2.982
+2.983
+2.977
+2.975
+2.971
+2.974
+2.973
+2.966
+2.973
+2.97
+2.965
+2.972
+2.976
+2.974
+2.976
+2.979
+2.982
+2.98
+2.982
+2.975
+2.977
+2.981
+2.983
+2.984
+2.986
+2.989
+2.991
+2.994
+2.999
+3.005
+3.011
+3.02
+3.03
+3.037
+3.047
+3.068
+3.116
+3.151
+3.154
+3.129
+3.107
+3.073
+3.034
+2.993
+2.94
+2.888
+2.783
+2.701
+2.688
+2.677
+2.688
+2.683
+2.69
+2.69
+2.685
+2.677
+2.68
+2.685
+2.692
+2.699
+2.705
+2.711
+2.716
+2.724
+2.731
+2.739
+2.747
+2.755
+2.765
+2.774
+2.784
+2.797
+2.807
+2.82
+2.833
+2.846
+2.861
+2.879
+2.897
+2.906
+2.907
+2.92
+2.931
+2.95
+2.989
+3.053
+3.105
+3.112
+3.095
+3.066
+3.029
+2.989
+2.947
+2.904
+2.855
+2.801
+2.736
+2.647
+2.567
+2.546
+2.546
+2.55
+2.556
+2.563
+2.568
+2.578
+2.582
+2.584
+2.594
+2.601
+2.606
+2.616
+2.623
+2.633
+2.641
+2.647
+2.653
+2.661
+2.67
+2.681
+2.689
+2.699
+2.709
+2.72
+2.731
+2.744
+2.761
+2.785
+2.791
+2.804
+2.806
+2.822
+2.843
+2.874
+2.929
+2.981
+2.993
+2.972
+2.94
+2.897
+2.851
+2.801
+2.752
+2.686
+2.608
+2.516
+2.444
+2.418
+2.409
+2.412
+2.416
+2.419
+2.421
+2.423
+2.425
+2.43
+2.431
+2.436
+2.437
+2.438
+2.444
+2.446
+2.448
+2.454
+2.457
+2.466
+2.474
+2.492
+2.493
+2.486
+2.481
+2.492
+2.495
+2.509
+2.521
+2.529
+2.543
+2.558
+2.574
+2.587
+2.607
+2.627
+2.645
+2.657
+2.689
+2.724
+2.739
+2.729
+2.696
+2.651
+2.609
+2.567
+2.514
+2.454
+2.389
+2.313
+2.228
+2.193
+2.19
+2.191
+2.2
+2.212
+2.222
+2.231
+2.238
+2.247
+2.259
+2.263
+2.271
+2.278
+2.282
+2.294
+2.3
+2.305
+2.316
+2.324
+2.332
+2.342
+2.352
+2.364
+2.372
+2.384
+2.393
+2.412
+2.427
+2.437
+2.456
+2.468
+2.494
+2.507
+2.529
+2.544
+2.56
+2.607
+2.654
+2.661
+2.649
+2.62
+2.59
+2.551
+2.511
+2.464
+2.413
+2.348
+2.283
+2.219
+2.182
+2.182
+2.186
+2.192
+2.197
+2.206
+2.21
+2.219
+2.223
+2.231
+2.242
+2.248
+2.256
+2.264
+2.273
+2.281
+2.295
+2.307
+2.319
+2.334
+2.344
+2.357
+2.373
+2.385
+2.398
+2.412
+2.428
+2.445
+2.459
+2.475
+2.493
+2.508
+2.523
+2.538
+2.551
+2.575
+2.622
+2.645
+2.641
+2.618
+2.587
+2.543
+2.495
+2.444
+2.384
+2.318
+2.242
+2.164
+2.134
+2.131
+2.134
+2.14
+2.15
+2.157
+2.172
+2.178
+2.188
+2.2
+2.209
+2.219
+2.234
+2.241
+2.249
+2.263
+2.271
+2.279
+2.289
+2.3
+2.311
+2.317
+2.33
+2.339
+2.347
+2.362
+2.382
+2.378
+2.389
+2.406
+2.422
+2.441
+2.463
+2.471
+2.48
+2.487
+2.493
+2.515
+2.546
+2.543
+2.527
+2.502
+2.475
+2.438
+2.395
+2.345
+2.29
+2.217
+2.148
+2.122
+2.12
+2.124
+2.133
+2.139
+2.147
+2.155
+2.163
+2.171
+2.18
+2.186
+2.192
+2.199
+2.206
+2.212
+2.219
+2.226
+2.234
+2.241
+2.25
+2.258
+2.268
+2.276
+2.285
+2.297
+2.306
+2.321
+2.334
+2.35
+2.373
+2.382
+2.391
+2.395
+2.41
+2.425
+2.439
+2.453
+2.471
+2.509
+2.529
+2.526
+2.51
+2.485
+2.453
+2.414
+2.372
+2.316
+2.26
+2.189
+2.114
+2.07
+2.057
+2.057
+2.059
+2.064
+2.07
+2.075
+2.077
+2.082
+2.087
+2.09
+2.098
+2.103
+2.112
+2.122
+2.131
+2.142
+2.151
+2.164
+2.172
+2.186
+2.194
+2.208
+2.217
+2.231
+2.246
+2.266
+2.28
+2.3
+2.325
+2.34
+2.347
+2.361
+2.36
+2.375
+2.387
+2.407
+2.441
+2.455
+2.443
+2.426
+2.395
+2.357
+2.313
+2.265
+2.213
+2.151
+2.082
+2.03
+2.007
+1.998
+2
+2.002
+2.008
+2.015
+2.022
+2.028
+2.034
+2.041
+2.046
+2.053
+2.059
+2.067
+2.072
+2.08
+2.087
+2.095
+2.104
+2.112
+2.121
+2.128
+2.141
+2.149
+2.159
+2.17
+2.179
+2.19
+2.199
+2.212
+2.22
+2.23
+2.241
+2.252
+2.264
+2.273
+2.283
+2.294
+2.31
+2.332
+2.326
+2.307
+2.282
+2.253
+2.218
+2.184
+2.14
+2.098
+2.047
+1.984
+1.925
+1.896
+1.893
+1.891
+1.897
+1.904
+1.912
+1.919
+1.925
+1.932
+1.939
+1.948
+1.957
+1.962
+1.971
+1.982
+1.989
+1.998
+2.014
+2.012
+2.013
+2.007
+2.012
+2.025
+2.029
+2.039
+2.045
+2.057
+2.066
+2.076
+2.087
+2.099
+2.109
+2.122
+2.133
+2.143
+2.153
+2.175
+2.197
+2.196
+2.181
+2.156
+2.125
+2.085
+2.043
+1.999
+1.948
+1.893
+1.828
+1.778
+1.758
+1.753
+1.754
+1.759
+1.757
+1.761
+1.761
+1.766
+1.766
+1.768
+1.768
+1.769
+1.77
+1.768
+1.771
+1.772
+1.774
+1.777
+1.778
+1.783
+1.787
+1.79
+1.796
+1.803
+1.809
+1.82
+1.823
+1.832
+1.841
+1.845
+1.856
+1.862
+1.871
+1.878
+1.889
+1.892
+1.905
+1.908
+1.914
+1.921
+1.898
+1.875
+1.838
+1.797
+1.75
+1.693
+1.647
+1.622
+1.603
+1.598
+1.594
+1.592
+1.585
+1.584
+1.579
+1.577
+1.577
+1.572
+1.567
+1.566
+1.562
+1.56
+1.558
+1.565
+1.564
+1.569
+1.571
+1.572
+1.572
+1.581
+1.584
+1.586
+1.591
+1.597
+1.601
+1.608
+1.612
+1.619
+1.62
+1.625
+1.629
+1.633
+1.638
+1.645
+1.652
+1.656
+1.66
+1.664
+1.668
+1.666
+1.661
+1.654
+1.646
+1.64
+1.634
+1.624
+1.619
+1.616
+1.617
+1.616
+1.616
+1.62
+1.617
+1.617
+1.615
+1.611
+1.611
+1.611
+1.612
+1.612
+1.612
+1.614
+1.616
+1.617
+1.622
+1.626
+1.63
+1.636
+1.64
+1.645
+1.648
+1.652
+1.657
+1.663
+1.667
+1.672
+1.677
+1.685
+1.69
+1.697
+1.704
+1.711
+1.718
+1.727
+1.733
+1.74
+1.746
+1.752
+1.756
+1.758
+1.76
+1.757
+1.753
+1.746
+1.739
+1.734
+1.731
+1.73
+1.73
+1.732
+1.734
+1.739
+1.742
+1.745
+1.747
+1.748
+1.751
+1.752
+1.754
+1.756
+1.758
+1.761
+1.765
+1.768
+1.773
+1.778
+1.785
+1.793
+1.802
+1.811
+1.82
+1.83
+1.841
+1.85
+1.86
+1.871
+1.883
+1.894
+1.906
+1.919
+1.932
+1.945
+1.958
+1.972
+1.985
+1.998
+2.009
+2.02
+2.029
+2.037
+2.053
+2.082
+2.088
+2.078
+2.059
+2.035
+2.005
+1.97
+1.928
+1.884
+1.833
+1.774
+1.72
+1.684
+1.668
+1.662
+1.659
+1.659
+1.657
+1.656
+1.656
+1.654
+1.656
+1.655
+1.653
+1.653
+1.655
+1.659
+1.664
+1.666
+1.669
+1.676
+1.68
+1.684
+1.69
+1.694
+1.704
+1.707
+1.712
+1.72
+1.729
+1.737
+1.745
+1.754
+1.764
+1.772
+1.782
+1.788
+1.794
+1.799
+1.803
+1.81
+1.81
+1.811
+1.807
+1.8
+1.794
+1.794
+1.783
+1.782
+1.778
+1.78
+1.782
+1.782
+1.787
+1.791
+1.792
+1.796
+1.799
+1.801
+1.804
+1.808
+1.809
+1.814
+1.821
+1.821
+1.827
+1.833
+1.837
+1.846
+1.855
+1.864
+1.875
+1.885
+1.896
+1.906
+1.916
+1.928
+1.939
+1.953
+1.962
+1.975
+1.987
+1.999
+2.012
+2.024
+2.037
+2.049
+2.062
+2.075
+2.086
+2.097
+2.107
+2.123
+2.14
+2.15
+2.141
+2.125
+2.104
+2.076
+2.035
+1.988
+1.941
+1.912
+1.896
+1.892
+1.894
+1.896
+1.899
+1.9
+1.903
+1.905
+1.908
+1.911
+1.914
+1.917
+1.92
+1.923
+1.926
+1.931
+1.937
+1.942
+1.95
+1.958
+1.966
+1.979
+1.987
+1.998
+2.01
+2.022
+2.034
+2.048
+2.062
+2.075
+2.086
+2.101
+2.112
+2.122
+2.136
+2.149
+2.164
+2.174
+2.193
+2.204
+2.208
+2.205
+2.188
+2.166
+2.13
+2.081
+2.024
+1.974
+1.946
+1.939
+1.941
+1.945
+1.952
+1.959
+1.967
+1.973
+1.981
+1.986
+1.992
+1.998
+2.005
+2.011
+2.016
+2.022
+2.029
+2.036
+2.043
+2.052
+2.058
+2.068
+2.079
+2.091
+2.102
+2.114
+2.127
+2.14
+2.154
+2.167
+2.181
+2.197
+2.214
+2.229
+2.244
+2.26
+2.274
+2.288
+2.299
+2.309
+2.336
+2.374
+2.385
+2.373
+2.355
+2.329
+2.293
+2.252
+2.206
+2.151
+2.082
+2.018
+1.996
+1.995
+1.998
+2.003
+2.011
+2.016
+2.022
+2.029
+2.033
+2.037
+2.043
+2.048
+2.053
+2.057
+2.062
+2.067
+2.072
+2.078
+2.086
+2.094
+2.104
+2.117
+2.125
+2.139
+2.153
+2.168
+2.183
+2.197
+2.213
+2.231
+2.248
+2.263
+2.278
+2.291
+2.305
+2.316
+2.334
+2.367
+2.393
+2.394
+2.38
+2.357
+2.325
+2.289
+2.252
+2.205
+2.151
+2.078
+2.023
+2.004
+2.006
+2.009
+2.015
+2.024
+2.031
+2.038
+2.045
+2.054
+2.057
+2.064
+2.071
+2.076
+2.082
+2.088
+2.095
+2.103
+2.111
+2.118
+2.128
+2.136
+2.145
+2.159
+2.17
+2.186
+2.197
+2.212
+2.225
+2.24
+2.256
+2.268
+2.284
+2.299
+2.312
+2.326
+2.34
+2.357
+2.376
+2.421
+2.429
+2.407
+2.387
+2.349
+2.311
+2.268
+2.207
+2.16
+2.143
+2.144
+2.15
+2.156
+2.162
+2.17
+2.176
+2.185
+2.194
+2.199
+2.204
+2.208
+2.214
+2.219
+2.228
+2.233
+2.241
+2.249
+2.257
+2.265
+2.277
+2.286
+2.299
+2.312
+2.324
+2.339
+2.353
+2.368
+2.382
+2.397
+2.415
+2.432
+2.446
+2.463
+2.481
+2.495
+2.509
+2.524
+2.536
+2.551
+2.572
+2.619
+2.637
+2.634
+2.619
+2.589
+2.545
+2.48
+2.421
+2.385
+2.375
+2.377
+2.383
+2.391
+2.399
+2.407
+2.416
+2.425
+2.434
+2.443
+2.453
+2.461
+2.472
+2.483
+2.493
+2.503
+2.514
+2.528
+2.539
+2.551
+2.565
+2.576
+2.593
+2.606
+2.621
+2.637
+2.654
+2.671
+2.686
+2.703
+2.719
+2.736
+2.754
+2.769
+2.791
+2.827
+2.89
+2.946
+2.978
+2.984
+2.972
+2.947
+2.909
+2.868
+2.824
+2.777
+2.726
+2.675
+2.616
+2.547
+2.465
+2.368
+2.305
+2.296
+2.302
+2.303
+2.309
+2.319
+2.328
+2.332
+2.338
+2.347
+2.357
+2.366
+2.379
+2.387
+2.398
+2.41
+2.42
+2.433
+2.445
+2.456
+2.471
+2.484
+2.498
+2.512
+2.522
+2.539
+2.553
+2.568
+2.583
+2.602
+2.617
+2.634
+2.649
+2.669
+2.692
+2.739
+2.794
+2.805
+2.793
+2.767
+2.738
+2.697
+2.656
+2.608
+2.55
+2.477
+2.398
+2.35
+2.338
+2.344
+2.35
+2.359
+2.368
+2.381
+2.39
+2.401
+2.412
+2.42
+2.431
+2.442
+2.453
+2.467
+2.476
+2.488
+2.501
+2.514
+2.525
+2.542
+2.555
+2.568
+2.582
+2.595
+2.61
+2.625
+2.639
+2.655
+2.671
+2.689
+2.706
+2.72
+2.735
+2.76
+2.79
+2.85
+2.899
+2.911
+2.897
+2.856
+2.82
+2.777
+2.728
+2.676
+2.623
+2.567
+2.498
+2.41
+2.319
+2.299
+2.296
+2.303
+2.311
+2.318
+2.329
+2.336
+2.343
+2.353
+2.367
+2.374
+2.383
+2.394
+2.405
+2.415
+2.426
+2.44
+2.45
+2.464
+2.475
+2.488
+2.504
+2.517
+2.534
+2.547
+2.562
+2.579
+2.594
+2.61
+2.621
+2.634
+2.648
+2.664
+2.679
+2.694
+2.707
+2.728
+2.781
+2.811
+2.814
+2.798
+2.776
+2.741
+2.708
+2.658
+2.598
+2.518
+2.45
+2.429
+2.43
+2.437
+2.449
+2.461
+2.47
+2.481
+2.492
+2.503
+2.513
+2.523
+2.534
+2.545
+2.555
+2.568
+2.579
+2.588
+2.598
+2.61
+2.62
+2.631
+2.643
+2.655
+2.665
+2.677
+2.689
+2.702
+2.715
+2.729
+2.742
+2.757
+2.771
+2.787
+2.803
+2.817
+2.839
+2.879
+2.948
+2.986
+2.975
+2.943
+2.916
+2.887
+2.855
+2.823
+2.786
+2.746
+2.693
+2.62
+2.55
+2.516
+2.51
+2.516
+2.523
+2.533
+2.542
+2.551
+2.561
+2.57
+2.58
+2.591
+2.602
+2.61
+2.625
+2.634
+2.646
+2.657
+2.667
+2.676
+2.687
+2.7
+2.708
+2.723
+2.734
+2.749
+2.762
+2.774
+2.788
+2.802
+2.817
+2.834
+2.847
+2.863
+2.879
+2.901
+2.944
+3.012
+3.066
+3.081
+3.061
+3.036
+2.999
+2.957
+2.915
+2.871
+2.826
+2.778
+2.713
+2.625
+2.531
+2.501
+2.503
+2.51
+2.517
+2.527
+2.534
+2.544
+2.553
+2.559
+2.567
+2.573
+2.581
+2.589
+2.595
+2.604
+2.611
+2.619
+2.627
+2.636
+2.645
+2.653
+2.663
+2.672
+2.684
+2.697
+2.708
+2.725
+2.737
+2.754
+2.769
+2.783
+2.8
+2.818
+2.833
+2.861
+2.905
+2.972
+3.036
+3.062
+3.05
+3.019
+2.977
+2.932
+2.883
+2.834
+2.785
+2.732
+2.67
+2.599
+2.502
+2.416
+2.396
+2.399
+2.405
+2.411
+2.418
+2.426
+2.435
+2.442
+2.451
+2.46
+2.47
+2.478
+2.488
+2.498
+2.509
+2.521
+2.532
+2.545
+2.557
+2.571
+2.583
+2.596
+2.612
+2.626
+2.64
+2.656
+2.672
+2.688
+2.701
+2.717
+2.73
+2.744
+2.77
+2.816
+2.888
+2.926
+2.924
+2.9
+2.866
+2.827
+2.783
+2.736
+2.684
+2.62
+2.547
+2.452
+2.376
+2.36
+2.362
+2.368
+2.376
+2.384
+2.391
+2.4
+2.409
+2.416
+2.427
+2.437
+2.446
+2.458
+2.469
+2.479
+2.489
+2.5
+2.51
+2.523
+2.534
+2.546
+2.557
+2.571
+2.583
+2.596
+2.611
+2.625
+2.642
+2.656
+2.671
+2.688
+2.704
+2.719
+2.734
+2.748
+2.77
+2.811
+2.881
+2.927
+2.932
+2.909
+2.874
+2.832
+2.788
+2.737
+2.683
+2.625
+2.56
+2.489
+2.395
+2.313
+2.297
+2.299
+2.308
+2.317
+2.327
+2.336
+2.345
+2.357
+2.368
+2.377
+2.388
+2.398
+2.406
+2.419
+2.428
+2.439
+2.45
+2.46
+2.474
+2.484
+2.496
+2.509
+2.522
+2.533
+2.548
+2.562
+2.577
+2.589
+2.603
+2.619
+2.633
+2.649
+2.664
+2.691
+2.743
+2.799
+2.804
+2.771
+2.736
+2.704
+2.671
+2.634
+2.592
+2.541
+2.48
+2.404
+2.348
+2.328
+2.328
+2.334
+2.342
+2.351
+2.361
+2.371
+2.38
+2.389
+2.399
+2.409
+2.418
+2.427
+2.435
+2.446
+2.455
+2.466
+2.472
+2.482
+2.489
+2.499
+2.51
+2.519
+2.529
+2.543
+2.554
+2.566
+2.579
+2.593
+2.607
+2.623
+2.636
+2.652
+2.665
+2.685
+2.717
+2.771
+2.844
+2.86
+2.836
+2.807
+2.772
+2.736
+2.699
+2.66
+2.62
+2.578
+2.531
+2.476
+2.409
+2.327
+2.275
+2.258
+2.256
+2.266
+2.271
+2.279
+2.289
+2.296
+2.306
+2.312
+2.319
+2.324
+2.328
+2.344
+2.347
+2.356
+2.359
+2.368
+2.376
+2.39
+2.392
+2.405
+2.414
+2.426
+2.435
+2.446
+2.458
+2.478
+2.488
+2.502
+2.521
+2.532
+2.557
+2.563
+2.574
+2.596
+2.63
+2.683
+2.707
+2.698
+2.679
+2.647
+2.61
+2.569
+2.516
+2.456
+2.381
+2.302
+2.275
+2.274
+2.279
+2.286
+2.295
+2.301
+2.31
+2.316
+2.321
+2.329
+2.336
+2.341
+2.347
+2.355
+2.363
+2.371
+2.378
+2.387
+2.395
+2.407
+2.417
+2.428
diff --git a/winsource_caesar/Caesar Lisflood 1.9j.cs b/winsource_caesar/Caesar Lisflood 1.9j.cs
new file mode 100644
index 0000000..b59d7dc
--- /dev/null
+++ b/winsource_caesar/Caesar Lisflood 1.9j.cs
@@ -0,0 +1,14408 @@
+// CAESAR Lisflood is available under the terms of a GNU licence. see below:
+//
+// GNU GENERAL PUBLIC LICENSE
+// Version 3, 29 June 2007
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+// Everyone is permitted to copy and distribute verbatim copies
+// of this license document, but changing it is not allowed.
+
+// Preamble
+
+// The GNU General Public License is a free, copyleft license for
+//software and other kinds of works
+
+// The licenses for most software and other practical works are designed
+//to take away your freedom to share and change the works. By contrast,
+//the GNU General Public License is intended to guarantee your freedom to
+//share and change all versions of a program--to make sure it remains free
+//software for all its users. We, the Free Software Foundation, use the
+//GNU General Public License for most of our software; it applies also to
+//any other work released this way by its authors. You can apply it to
+//your programs, too.
+
+// When we speak of free software, we are referring to freedom, not
+//price. Our General Public Licenses are designed to make sure that you
+//have the freedom to distribute copies of free software (and charge for
+//them if you wish), that you receive source code or can get it if you
+//want it, that you can change the software or use pieces of it in new
+//free programs, and that you know you can do these things.
+
+// To protect your rights, we need to prevent others from denying you
+//these rights or asking you to surrender the rights. Therefore, you have
+//certain responsibilities if you distribute copies of the software, or if
+//you modify it: responsibilities to respect the freedom of others.
+
+// For example, if you distribute copies of such a program, whether
+//gratis or for a fee, you must pass on to the recipients the same
+//freedoms that you received. You must make sure that they, too, receive
+//or can get the source code. And you must show them these terms so they
+//know their rights.
+
+// Developers that use the GNU GPL protect your rights with two steps:
+//(1) assert copyright on the software, and (2) offer you this License
+//giving you legal permission to copy, distribute and/or modify it.
+
+// For the developers' and authors' protection, the GPL clearly explains
+//that there is no warranty for this free software. For both users' and
+//authors' sake, the GPL requires that modified versions be marked as
+//changed, so that their problems will not be attributed erroneously to
+//authors of previous versions.
+
+// Some devices are designed to deny users access to install or run
+//modified versions of the software inside them, although the manufacturer
+//can do so. This is fundamentally incompatible with the aim of
+//protecting users' freedom to change the software. The systematic
+//pattern of such abuse occurs in the area of products for individuals to
+//use, which is precisely where it is most unacceptable. Therefore, we
+//have designed this version of the GPL to prohibit the practice for those
+//products. If such problems arise substantially in other domains, we
+//stand ready to extend this provision to those domains in future versions
+//of the GPL, as needed to protect the freedom of users.
+
+// Finally, every program is threatened constantly by software patents.
+//States should not allow patents to restrict development and use of
+//software on general-purpose computers, but in those that do, we wish to
+//avoid the special danger that patents applied to a free program could
+//make it effectively proprietary. To prevent this, the GPL assures that
+//patents cannot be used to render the program non-free.
+
+// The precise terms and conditions for copying, distribution and
+//modification follow.
+
+// TERMS AND CONDITIONS
+
+// 0. Definitions.
+
+// "This License" refers to version 3 of the GNU General Public License.
+
+// "Copyright" also means copyright-like laws that apply to other kinds of
+//works, such as semiconductor masks.
+
+// "The Program" refers to any copyrightable work licensed under this
+//License. Each licensee is addressed as "you". "Licensees" and
+//"recipients" may be individuals or organizations.
+
+// To "modify" a work means to copy from or adapt all or part of the work
+//in a fashion requiring copyright permission, other than the making of an
+//exact copy. The resulting work is called a "modified version" of the
+//earlier work or a work "based on" the earlier work.
+
+// A "covered work" means either the unmodified Program or a work based
+//on the Program.
+
+// To "propagate" a work means to do anything with it that, without
+//permission, would make you directly or secondarily liable for
+//infringement under applicable copyright law, except executing it on a
+//computer or modifying a private copy. Propagation includes copying,
+//distribution (with or without modification), making available to the
+//public, and in some countries other activities as well.
+
+// To "convey" a work means any kind of propagation that enables other
+//parties to make or receive copies. Mere interaction with a user through
+//a computer network, with no transfer of a copy, is not conveying.
+
+// An interactive user interface displays "Appropriate Legal Notices"
+//to the extent that it includes a convenient and prominently visible
+//feature that (1) displays an appropriate copyright notice, and (2)
+//tells the user that there is no warranty for the work (except to the
+//extent that warranties are provided), that licensees may convey the
+//work under this License, and how to view a copy of this License. If
+//the interface presents a list of user commands or options, such as a
+//menu, a prominent item in the list meets this criterion.
+
+// 1. Source Code.
+
+// The "source code" for a work means the preferred form of the work
+//for making modifications to it. "Object code" means any non-source
+//form of a work.
+
+// A "Standard Interface" means an interface that either is an official
+//standard defined by a recognized standards body, or, in the case of
+//interfaces specified for a particular programming language, one that
+//is widely used among developers working in that language.
+
+// The "System Libraries" of an executable work include anything, other
+//than the work as a whole, that (a) is included in the normal form of
+//packaging a Major Component, but which is not part of that Major
+//Component, and (b) serves only to enable use of the work with that
+//Major Component, or to implement a Standard Interface for which an
+//implementation is available to the public in source code form. A
+//"Major Component", in this context, means a major essential component
+//(kernel, window system, and so on) of the specific operating system
+//(if any) on which the executable work runs, or a compiler used to
+//produce the work, or an object code interpreter used to run it.
+
+// The "Corresponding Source" for a work in object code form means all
+//the source code needed to generate, install, and (for an executable
+//work) run the object code and to modify the work, including scripts to
+//control those activities. However, it does not include the work's
+//System Libraries, or general-purpose tools or generally available free
+//programs which are used unmodified in performing those activities but
+//which are not part of the work. For example, Corresponding Source
+//includes interface definition files associated with source files for
+//the work, and the source code for shared libraries and dynamically
+//linked subprograms that the work is specifically designed to require,
+//such as by intimate data communication or control flow between those
+//subprograms and other parts of the work.
+
+// The Corresponding Source need not include anything that users
+//can regenerate automatically from other parts of the Corresponding
+//Source.
+
+// The Corresponding Source for a work in source code form is that
+//same work.
+
+// 2. Basic Permissions.
+
+// All rights granted under this License are granted for the term of
+//copyright on the Program, and are irrevocable provided the stated
+//conditions are met. This License explicitly affirms your unlimited
+//permission to run the unmodified Program. The output from running a
+//covered work is covered by this License only if the output, given its
+//content, constitutes a covered work. This License acknowledges your
+//rights of fair use or other equivalent, as provided by copyright law.
+
+// You may make, run and propagate covered works that you do not
+//convey, without conditions so long as your license otherwise remains
+//in force. You may convey covered works to others for the sole purpose
+//of having them make modifications exclusively for you, or provide you
+//with facilities for running those works, provided that you comply with
+//the terms of this License in conveying all material for which you do
+//not control copyright. Those thus making or running the covered works
+//for you must do so exclusively on your behalf, under your direction
+//and control, on terms that prohibit them from making any copies of
+//your copyrighted material outside their relationship with you.
+
+// Conveying under any other circumstances is permitted solely under
+//the conditions stated below. Sublicensing is not allowed; section 10
+//makes it unnecessary.
+
+// 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+// No covered work shall be deemed part of an effective technological
+//measure under any applicable law fulfilling obligations under article
+//11 of the WIPO copyright treaty adopted on 20 December 1996, or
+//similar laws prohibiting or restricting circumvention of such
+//measures.
+
+// When you convey a covered work, you waive any legal power to forbid
+//circumvention of technological measures to the extent such circumvention
+//is effected by exercising rights under this License with respect to
+//the covered work, and you disclaim any intention to limit operation or
+//modification of the work as a means of enforcing, against the work's
+//users, your or third parties' legal rights to forbid circumvention of
+//technological measures.
+
+// 4. Conveying Verbatim Copies.
+
+// You may convey verbatim copies of the Program's source code as you
+//receive it, in any medium, provided that you conspicuously and
+//appropriately publish on each copy an appropriate copyright notice;
+//keep intact all notices stating that this License and any
+//non-permissive terms added in accord with section 7 apply to the code;
+//keep intact all notices of the absence of any warranty; and give all
+//recipients a copy of this License along with the Program.
+
+// You may charge any price or no price for each copy that you convey,
+//and you may offer support or warranty protection for a fee.
+
+// 5. Conveying Modified Source Versions.
+
+// You may convey a work based on the Program, or the modifications to
+//produce it from the Program, in the form of source code under the
+//terms of section 4, provided that you also meet all of these conditions:
+
+// a) The work must carry prominent notices stating that you modified
+// it, and giving a relevant date.
+
+// b) The work must carry prominent notices stating that it is
+// released under this License and any conditions added under section
+// 7. This requirement modifies the requirement in section 4 to
+// "keep intact all notices".
+
+// c) You must license the entire work, as a whole, under this
+// License to anyone who comes into possession of a copy. This
+// License will therefore apply, along with any applicable section 7
+// additional terms, to the whole of the work, and all its parts,
+// regardless of how they are packaged. This License gives no
+// permission to license the work in any other way, but it does not
+// invalidate such permission if you have separately received it.
+
+// d) If the work has interactive user interfaces, each must display
+// Appropriate Legal Notices; however, if the Program has interactive
+// interfaces that do not display Appropriate Legal Notices, your
+// work need not make them do so.
+
+// A compilation of a covered work with other separate and independent
+//works, which are not by their nature extensions of the covered work,
+//and which are not combined with it such as to form a larger program,
+//in or on a volume of a storage or distribution medium, is called an
+//"aggregate" if the compilation and its resulting copyright are not
+//used to limit the access or legal rights of the compilation's users
+//beyond what the individual works permit. Inclusion of a covered work
+//in an aggregate does not cause this License to apply to the other
+//parts of the aggregate.
+
+// 6. Conveying Non-Source Forms.
+
+// You may convey a covered work in object code form under the terms
+//of sections 4 and 5, provided that you also convey the
+//machine-readable Corresponding Source under the terms of this License,
+//in one of these ways:
+
+// a) Convey the object code in, or embodied in, a physical product
+// (including a physical distribution medium), accompanied by the
+// Corresponding Source fixed on a durable physical medium
+// customarily used for software interchange.
+
+// b) Convey the object code in, or embodied in, a physical product
+// (including a physical distribution medium), accompanied by a
+// written offer, valid for at least three years and valid for as
+// long as you offer spare parts or customer support for that product
+// model, to give anyone who possesses the object code either (1) a
+// copy of the Corresponding Source for all the software in the
+// product that is covered by this License, on a durable physical
+// medium customarily used for software interchange, for a price no
+// more than your reasonable cost of physically performing this
+// conveying of source, or (2) access to copy the
+// Corresponding Source from a network server at no charge.
+
+// c) Convey individual copies of the object code with a copy of the
+// written offer to provide the Corresponding Source. This
+// alternative is allowed only occasionally and noncommercially, and
+// only if you received the object code with such an offer, in accord
+// with subsection 6b.
+
+// d) Convey the object code by offering access from a designated
+// place (gratis or for a charge), and offer equivalent access to the
+// Corresponding Source in the same way through the same place at no
+// further charge. You need not require recipients to copy the
+// Corresponding Source along with the object code. If the place to
+// copy the object code is a network server, the Corresponding Source
+// may be on a different server (operated by you or a third party)
+// that supports equivalent copying facilities, provided you maintain
+// clear directions next to the object code saying where to find the
+// Corresponding Source. Regardless of what server hosts the
+// Corresponding Source, you remain obligated to ensure that it is
+// available for as long as needed to satisfy these requirements.
+
+// e) Convey the object code using peer-to-peer transmission, provided
+// you inform other peers where the object code and Corresponding
+// Source of the work are being offered to the general public at no
+// charge under subsection 6d.
+
+// A separable portion of the object code, whose source code is excluded
+//from the Corresponding Source as a System Library, need not be
+//included in conveying the object code work.
+
+// A "User Product" is either (1) a "consumer product", which means any
+//tangible personal property which is normally used for personal, family,
+//or household purposes, or (2) anything designed or sold for incorporation
+//into a dwelling. In determining whether a product is a consumer product,
+//doubtful cases shall be resolved in favor of coverage. For a particular
+//product received by a particular user, "normally used" refers to a
+//typical or common use of that class of product, regardless of the status
+//of the particular user or of the way in which the particular user
+//actually uses, or expects or is expected to use, the product. A product
+//is a consumer product regardless of whether the product has substantial
+//commercial, industrial or non-consumer uses, unless such uses represent
+//the only significant mode of use of the product.
+
+// "Installation Information" for a User Product means any methods,
+//procedures, authorization keys, or other information required to install
+//and execute modified versions of a covered work in that User Product from
+//a modified version of its Corresponding Source. The information must
+//suffice to ensure that the continued functioning of the modified object
+//code is in no case prevented or interfered with solely because
+//modification has been made.
+
+// If you convey an object code work under this section in, or with, or
+//specifically for use in, a User Product, and the conveying occurs as
+//part of a transaction in which the right of possession and use of the
+//User Product is transferred to the recipient in perpetuity or for a
+//fixed term (regardless of how the transaction is characterized), the
+//Corresponding Source conveyed under this section must be accompanied
+//by the Installation Information. But this requirement does not apply
+//if neither you nor any third party retains the ability to install
+//modified object code on the User Product (for example, the work has
+//been installed in ROM).
+
+// The requirement to provide Installation Information does not include a
+//requirement to continue to provide support service, warranty, or updates
+//for a work that has been modified or installed by the recipient, or for
+//the User Product in which it has been modified or installed. Access to a
+//network may be denied when the modification itself materially and
+//adversely affects the operation of the network or violates the rules and
+//protocols for communication across the network.
+
+// Corresponding Source conveyed, and Installation Information provided,
+//in accord with this section must be in a format that is publicly
+//documented (and with an implementation available to the public in
+//source code form), and must require no special password or key for
+//unpacking, reading or copying.
+
+// 7. Additional Terms.
+
+// "Additional permissions" are terms that supplement the terms of this
+//License by making exceptions from one or more of its conditions.
+//Additional permissions that are applicable to the entire Program shall
+//be treated as though they were included in this License, to the extent
+//that they are valid under applicable law. If additional permissions
+//apply only to part of the Program, that part may be used separately
+//under those permissions, but the entire Program remains governed by
+//this License without regard to the additional permissions.
+
+// When you convey a copy of a covered work, you may at your option
+//remove any additional permissions from that copy, or from any part of
+//it. (Additional permissions may be written to require their own
+//removal in certain cases when you modify the work.) You may place
+//additional permissions on material, added by you to a covered work,
+//for which you have or can give appropriate copyright permission.
+
+// Notwithstanding any other provision of this License, for material you
+//add to a covered work, you may (if authorized by the copyright holders of
+//that material) supplement the terms of this License with terms:
+
+// a) Disclaiming warranty or limiting liability differently from the
+// terms of sections 15 and 16 of this License; or
+
+// b) Requiring preservation of specified reasonable legal notices or
+// author attributions in that material or in the Appropriate Legal
+// Notices displayed by works containing it; or
+
+// c) Prohibiting misrepresentation of the origin of that material, or
+// requiring that modified versions of such material be marked in
+// reasonable ways as different from the original version; or
+
+// d) Limiting the use for publicity purposes of names of licensors or
+// authors of the material; or
+
+// e) Declining to grant rights under trademark law for use of some
+// trade names, trademarks, or service marks; or
+
+// f) Requiring indemnification of licensors and authors of that
+// material by anyone who conveys the material (or modified versions of
+// it) with contractual assumptions of liability to the recipient, for
+// any liability that these contractual assumptions directly impose on
+// those licensors and authors.
+
+// All other non-permissive additional terms are considered "further
+//restrictions" within the meaning of section 10. If the Program as you
+//received it, or any part of it, contains a notice stating that it is
+//governed by this License along with a term that is a further
+//restriction, you may remove that term. If a license document contains
+//a further restriction but permits relicensing or conveying under this
+//License, you may add to a covered work material governed by the terms
+//of that license document, provided that the further restriction does
+//not survive such relicensing or conveying.
+
+// If you add terms to a covered work in accord with this section, you
+//must place, in the relevant source files, a statement of the
+//additional terms that apply to those files, or a notice indicating
+//where to find the applicable terms.
+
+// Additional terms, permissive or non-permissive, may be stated in the
+//form of a separately written license, or stated as exceptions;
+//the above requirements apply either way.
+
+// 8. Termination.
+
+// You may not propagate or modify a covered work except as expressly
+//provided under this License. Any attempt otherwise to propagate or
+//modify it is void, and will automatically terminate your rights under
+//this License (including any patent licenses granted under the third
+//paragraph of section 11).
+
+// However, if you cease all violation of this License, then your
+//license from a particular copyright holder is reinstated (a)
+//provisionally, unless and until the copyright holder explicitly and
+//finally terminates your license, and (b) permanently, if the copyright
+//holder fails to notify you of the violation by some reasonable means
+//prior to 60 days after the cessation.
+
+// Moreover, your license from a particular copyright holder is
+//reinstated permanently if the copyright holder notifies you of the
+//violation by some reasonable means, this is the first time you have
+//received notice of violation of this License (for any work) from that
+//copyright holder, and you cure the violation prior to 30 days after
+//your receipt of the notice.
+
+// Termination of your rights under this section does not terminate the
+//licenses of parties who have received copies or rights from you under
+//this License. If your rights have been terminated and not permanently
+//reinstated, you do not qualify to receive new licenses for the same
+//material under section 10.
+
+// 9. Acceptance Not Required for Having Copies.
+
+// You are not required to accept this License in order to receive or
+//run a copy of the Program. Ancillary propagation of a covered work
+//occurring solely as a consequence of using peer-to-peer transmission
+//to receive a copy likewise does not require acceptance. However,
+//nothing other than this License grants you permission to propagate or
+//modify any covered work. These actions infringe copyright if you do
+//not accept this License. Therefore, by modifying or propagating a
+//covered work, you indicate your acceptance of this License to do so.
+
+// 10. Automatic Licensing of Downstream Recipients.
+
+// Each time you convey a covered work, the recipient automatically
+//receives a license from the original licensors, to run, modify and
+//propagate that work, subject to this License. You are not responsible
+//for enforcing compliance by third parties with this License.
+
+// An "entity transaction" is a transaction transferring control of an
+//organization, or substantially all assets of one, or subdividing an
+//organization, or merging organizations. If propagation of a covered
+//work results from an entity transaction, each party to that
+//transaction who receives a copy of the work also receives whatever
+//licenses to the work the party's predecessor in interest had or could
+//give under the previous paragraph, plus a right to possession of the
+//Corresponding Source of the work from the predecessor in interest, if
+//the predecessor has it or can get it with reasonable efforts.
+
+// You may not impose any further restrictions on the exercise of the
+//rights granted or affirmed under this License. For example, you may
+//not impose a license fee, royalty, or other charge for exercise of
+//rights granted under this License, and you may not initiate litigation
+//(including a cross-claim or counterclaim in a lawsuit) alleging that
+//any patent claim is infringed by making, using, selling, offering for
+//sale, or importing the Program or any portion of it.
+
+// 11. Patents.
+
+// A "contributor" is a copyright holder who authorizes use under this
+//License of the Program or a work on which the Program is based. The
+//work thus licensed is called the contributor's "contributor version".
+
+// A contributor's "essential patent claims" are all patent claims
+//owned or controlled by the contributor, whether already acquired or
+//hereafter acquired, that would be infringed by some manner, permitted
+//by this License, of making, using, or selling its contributor version,
+//but do not include claims that would be infringed only as a
+//consequence of further modification of the contributor version. For
+//purposes of this definition, "control" includes the right to grant
+//patent sublicenses in a manner consistent with the requirements of
+//this License.
+
+// Each contributor grants you a non-exclusive, worldwide, royalty-free
+//patent license under the contributor's essential patent claims, to
+//make, use, sell, offer for sale, import and otherwise run, modify and
+//propagate the contents of its contributor version.
+
+// In the following three paragraphs, a "patent license" is any express
+//agreement or commitment, however denominated, not to enforce a patent
+//(such as an express permission to practice a patent or covenant not to
+//sue for patent infringement). To "grant" such a patent license to a
+//party means to make such an agreement or commitment not to enforce a
+//patent against the party.
+
+// If you convey a covered work, knowingly relying on a patent license,
+//and the Corresponding Source of the work is not available for anyone
+//to copy, free of charge and under the terms of this License, through a
+//publicly available network server or other readily accessible means,
+//then you must either (1) cause the Corresponding Source to be so
+//available, or (2) arrange to deprive yourself of the benefit of the
+//patent license for this particular work, or (3) arrange, in a manner
+//consistent with the requirements of this License, to extend the patent
+//license to downstream recipients. "Knowingly relying" means you have
+//actual knowledge that, but for the patent license, your conveying the
+//covered work in a country, or your recipient's use of the covered work
+//in a country, would infringe one or more identifiable patents in that
+//country that you have reason to believe are valid.
+
+// If, pursuant to or in connection with a single transaction or
+//arrangement, you convey, or propagate by procuring conveyance of, a
+//covered work, and grant a patent license to some of the parties
+//receiving the covered work authorizing them to use, propagate, modify
+//or convey a specific copy of the covered work, then the patent license
+//you grant is automatically extended to all recipients of the covered
+//work and works based on it.
+
+// A patent license is "discriminatory" if it does not include within
+//the scope of its coverage, prohibits the exercise of, or is
+//conditioned on the non-exercise of one or more of the rights that are
+//specifically granted under this License. You may not convey a covered
+//work if you are a party to an arrangement with a third party that is
+//in the business of distributing software, under which you make payment
+//to the third party based on the extent of your activity of conveying
+//the work, and under which the third party grants, to any of the
+//parties who would receive the covered work from you, a discriminatory
+//patent license (a) in connection with copies of the covered work
+//conveyed by you (or copies made from those copies), or (b) primarily
+//for and in connection with specific products or compilations that
+//contain the covered work, unless you entered into that arrangement,
+//or that patent license was granted, prior to 28 March 2007.
+
+// Nothing in this License shall be construed as excluding or limiting
+//any implied license or other defenses to infringement that may
+//otherwise be available to you under applicable patent law.
+
+// 12. No Surrender of Others' Freedom.
+
+// If conditions are imposed on you (whether by court order, agreement or
+//otherwise) that contradict the conditions of this License, they do not
+//excuse you from the conditions of this License. If you cannot convey a
+//covered work so as to satisfy simultaneously your obligations under this
+//License and any other pertinent obligations, then as a consequence you may
+//not convey it at all. For example, if you agree to terms that obligate you
+//to collect a royalty for further conveying from those to whom you convey
+//the Program, the only way you could satisfy both those terms and this
+//License would be to refrain entirely from conveying the Program.
+
+// 13. Use with the GNU Affero General Public License.
+
+// Notwithstanding any other provision of this License, you have
+//permission to link or combine any covered work with a work licensed
+//under version 3 of the GNU Affero General Public License into a single
+//combined work, and to convey the resulting work. The terms of this
+//License will continue to apply to the part which is the covered work,
+//but the special requirements of the GNU Affero General Public License,
+//section 13, concerning interaction through a network will apply to the
+//combination as such.
+
+// 14. Revised Versions of this License.
+
+// The Free Software Foundation may publish revised and/or new versions of
+//the GNU General Public License from time to time. Such new versions will
+//be similar in spirit to the present version, but may differ in detail to
+//address new problems or concerns.
+
+// Each version is given a distinguishing version number. If the
+//Program specifies that a certain numbered version of the GNU General
+//Public License "or any later version" applies to it, you have the
+//option of following the terms and conditions either of that numbered
+//version or of any later version published by the Free Software
+//Foundation. If the Program does not specify a version number of the
+//GNU General Public License, you may choose any version ever published
+//by the Free Software Foundation.
+
+// If the Program specifies that a proxy can decide which future
+//versions of the GNU General Public License can be used, that proxy's
+//public statement of acceptance of a version permanently authorizes you
+//to choose that version for the Program.
+
+// Later license versions may give you additional or different
+//permissions. However, no additional obligations are imposed on any
+//author or copyright holder as a result of your choosing to follow a
+//later version.
+
+// 15. Disclaimer of Warranty.
+
+// THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+//APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+//HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+//OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+//THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+//IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+//ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+// 16. Limitation of Liability.
+
+// IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+//WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+//THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+//GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+//USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+//DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+//PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+//EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+//SUCH DAMAGES.
+
+// 17. Interpretation of Sections 15 and 16.
+
+// If the disclaimer of warranty and limitation of liability provided
+//above cannot be given local legal effect according to their terms,
+//reviewing courts shall apply local law that most closely approximates
+//an absolute waiver of all civil liability in connection with the
+//Program, unless a warranty or assumption of liability accompanies a
+//copy of the Program in return for a fee.
+
+// END OF TERMS AND CONDITIONS
+
+// How to Apply These Terms to Your New Programs
+
+// If you develop a new program, and you want it to be of the greatest
+//possible use to the public, the best way to achieve this is to make it
+//free software which everyone can redistribute and change under these terms.
+
+// To do so, attach the following notices to the program. It is safest
+//to attach them to the start of each source file to most effectively
+//state the exclusion of warranty; and each file should have at least
+//the "copyright" line and a pointer to where the full notice is found.
+
+//
+// Copyright (C)
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+//Also add information on how to contact you by electronic and paper mail.
+
+// If the program does terminal interaction, make it output a short
+//notice like this when it starts in an interactive mode:
+
+// Copyright (C)
+// This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+// This is free software, and you are welcome to redistribute it
+// under certain conditions; type `show c' for details.
+//
+
+//The hypothetical commands `show w' and `show c' should show the appropriate
+//parts of the General Public License. Of course, your program's commands
+//might be different; for a GUI interface, you would use an "about box".
+
+// You should also get your employer (if you work as a programmer) or school,
+//if any, to sign a "copyright disclaimer" for the program, if necessary.
+//For more information on this, and how to apply and follow the GNU GPL, see
+//.
+
+// The GNU General Public License does not permit incorporating your program
+//into proprietary programs. If your program is a subroutine library, you
+//may consider it more useful to permit linking proprietary applications with
+//the library. If this is what you want to do, use the GNU Lesser General
+//Public License instead of this License. But first, please read
+//.
+
+
+// 1.8d notes. tab/space/comma separated input files
+// fixed error relating to jmean and min time step.
+// 5960 - added baseflow instead of j_mean in get_catchment_input_points() make it similar to 1.7a
+// 6001 - edited numberof points counter - was possibly overwriting by one...
+
+// 1.8f notes - now speeds up if running with less than 9 grainsizes, vectors in outputs returns..
+
+
+
+using System.IO;
+using System;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Data;
+using System.Text;
+using System.Net;
+using System.Xml; //JMW
+using System.Threading;
+using System.Threading.Tasks;
+
+
+namespace caesar1
+{
+ ///
+ /// Summary description for Form1.
+ ///
+ ///
+
+
+
+ public class Form1 : System.Windows.Forms.Form
+ {
+
+
+ private System.Drawing.Bitmap m_objDrawingSurface;
+ //JMW
+ [System.Runtime.InteropServices.DllImport("gdi32.dll")]
+ public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth,
+ int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwROP);
+
+ private System.ComponentModel.IContainer components;
+
+ //Jorge variables
+
+ public static double magnifyValue = 0;
+ public static int updateClick = 0;
+ private double[] zoomFactor = { .25, .33, .50, .66, .80, 1, 1.25, 1.5, 2.0, 2.5, 3.0 };
+ private double[] contrastFactor = { 1, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3 };
+ private double contrastMultiplier = 0;
+ public int imageCount = 1;
+ public int imageCount2 = 0;
+ int coordinateDone = 0;
+ double urfinalLati, urfinalLongi, llfinalLati, llfinalLongi, yurcorner, xurcorner = 0;
+ public string kml = "";
+ public string KML_FILE_NAME = "animation\\animation.kml";
+ int save_time2, save_interval2 = 0;
+ public string startDate, kmlTime;
+ public DateTime googleTime;
+ public string[] DateArray;
+ public string[] DateArray2;
+
+
+ // toms global variables
+ double gravity = 9.81;
+ const Single g = 9.81F;
+ const Single kappa = 0.4F;
+ double water_depth_erosion_threshold=0.01;
+ int input_time_step=60;
+ int number_of_points=0;
+ double globalsediq=0;
+ double time_1=1;
+ double save_time=0;
+ double creep_time=1;
+ double creep_time2 = 1;
+ double soil_erosion_time = 1;
+ double soil_development_time = 1;
+
+ double bedrock_erosion_threshold = 0;
+ double bedrock_erosion_rate = 0;
+
+ //int tot_number_of_tracer_points=0;
+ int input_type_flag=0; // 0 is water input from points, 1 is input from hydrograph or rainfall file.
+ double failureangle=45;
+ double saveinterval=1000;
+ int counter=0;
+ System.Windows.Forms.Timer gameClock;
+ bool googleoutputflag = false;
+ double waterinput = 0;
+ double waterOut = 0;
+ double in_out_difference = 0;
+ double mannings = 0.04;
+ int rfnum = 1;
+
+ int xmax, ymax;
+ double xll, yll;
+
+ int maxcycle;
+ const int ACTIVE_FACTOR=1;
+ const int TRUE=1;
+ const int FALSE=0;
+ double ERODEFACTOR=0.05;
+ double DX=5;
+ double root=7.07;
+
+ int LIMIT=1;
+ double MIN_Q=0.01;
+ double CREEP_RATE=0.0025;
+ double SOIL_RATE = 0.0025;
+ double active=0.2;
+ int G_MAX=10;
+ double lateral_constant=0.0000002;
+ int grain_array_tot=1;
+
+ double time_factor = 1;
+ double[] j, jo, j_mean, old_j_mean, new_j_mean, dprop, M;
+ //double M=0.005;
+ double baseflow=0.00000005; //end of hyd model variables usually 0.0000005 changed 2/11/05
+ public static double cycle=0;
+ double rain_factor=1;
+ double sediQ=0;
+ double grow_grass_time=0;
+ double duneupdatetime = 0;
+
+ double output_file_save_interval=60;
+ double min_time_step=0;
+ double vegTauCrit=100;
+ public static int graphics_scale = 2; // value that controls the number of bmp pixels per model pixel for the output images.
+ int max_time_step = 0;
+ int dune_mult = 5;
+ double dune_time = 1;
+ double max_vel = 5;
+ double sand_out = 0;
+ double maxdepth = 10;
+ double courant_number = 0.7;
+ double erode_call = 0;
+ double erode_mult = 1;
+ double lateralcounter = 1;
+ double edgeslope = 0.001;
+ double bed_proportion = 0.01;
+ double veg_lat_restriction = 0.1;
+ double lateral_cross_channel_smoothing = 0.0001;
+ double froude_limit = 0.8;
+ double recirculate_proportion = 1;
+
+ double Csuspmax = 0.05; // max concentration of SS allowed in a cell (proportion)
+ double hflow_threshold = 0.001;
+
+ // KAtharine
+ int variable_m_value_flag = 0;
+
+ // grain size variables - the sizes
+ double d1=0.0005;
+ double d2=0.001;
+ double d3=0.002;
+ double d4=0.004;
+ double d5=0.008;
+ double d6=0.016;
+ double d7=0.032;
+ double d8=0.064;
+ double d9=0.128;
+
+
+ // Gez
+ double previous;
+ int hours = 0;
+ double new_cycle = 0;
+ double old_cycle = 0;
+ double tx = 60;
+ double Tx = 0;
+ double tlastcalc = 0;
+ double Qs_step = 0;
+ double Qs_hour = 0;
+ double Qs_over = 0;
+ double Qs_last = 0;
+ double Qw_newvol = 0;
+ double Qw_oldvol = 0;
+ double Qw_lastvol = 0;
+ double Qw_stepvol = 0;
+ double Qw_hourvol = 0;
+ double Qw_hour = 0;
+ double Qw_overvol = 0;
+ double temptotal = 0;
+ double old_sediq = 0;
+ double[] sum_grain, sum_grain2, old_sum_grain,old_sum_grain2, Qg_step, Qg_step2, Qg_hour, Qg_hour2, Qg_over, Qg_over2, Qg_last,Qg_last2;
+ string CATCH_FILE = "catchment.dat";
+ // end gez
+
+ // toms global arrays
+ public static double[,] elev, bedrock, init_elevs, water_depth, area, tempcreep, Tau, Vel, qx, qy, qxs, qys,
+ /* dune arrays */ area_depth, sand, elev2, sand2, grain, elev_diff, spat_var_mannings, erodetot, erodetot3, temp_elev;
+ int[,] index,cross_scan,down_scan, rfarea;
+ bool[,] inputpointsarray;
+ int[] catchment_input_x_coord, catchment_input_y_coord;
+
+ double[,,] vel_dir;
+ double[,,] strata;
+ double[] temp_grain;
+ double[,] hydrograph, dischargeinput, hourly_rain_data, hourly_m_value;
+ double[,,] inputfile;
+ int[,] inpoints;
+ public static double[,,] veg;
+ double[,] edge, edge2; //TJC 27/1/05 array for edges
+ double[] old_j_mean_store;
+ double[,] climate_data;
+ double[, ,] sr, sl, su, sd;
+ double[,] ss;
+
+
+ // MJ global vars
+ double[] fallVelocity;
+ bool[] isSuspended;
+ double[,] Vsusptot;
+ int[] deltaX = new int[9] {0,0,1,1,1,0,-1,-1,-1};
+ int[] deltaY = new int[9] {0,-1,-1,0,1,1,1,0,-1};
+ int [] nActualGridCells;
+ double Jw_newvol = 0.0;
+ double Jw_oldvol = 0.0;
+ double Jw_lastvol = 0.0;
+ double Jw_stepvol = 0.0;
+ double Jw_hourvol = 0.0;
+ double Jw_hour = 0.0;
+ double Jw_overvol = 0.0;
+ double k_evap = 0.0;
+
+ // JOE global vars
+ string[] inputheader; //Read from ASCII DEM
+ double[,] slopeAnalysis; // Initially calculated in percent slope, coverted to radians
+ double[,] aspect; // Radians
+ double[,] hillshade; // 0 to 255
+ double hue = 360.0; // Ranges between 0 and 360 degrees
+ double sat = 0.90; // Ranges between 0 and 1.0 (where 1 is 100%)
+ double val = 1.0; // Ranges between 0 and 1.0 (where 1 is 100%)
+ double red = 0.0;
+ double green = 0.0;
+ double blue = 0.0;
+
+ // siberia submodel parameters
+ double m1 = 1.70;
+ double n1 = 0.69;
+ double Beta3 = 0.000186;
+ double m3 = 0.79;
+ double Beta1 = 1067;
+
+ // sedi tpt flags
+ int einstein = 0;
+ int wilcock = 0;
+ int meyer = 0;
+ int div_inputs = 1;
+ double rain_data_time_step = 60; // time step for rain data - default is 60.
+ double mfiletimestep = 1440; // tiem step for variable M value file
+
+
+ // lisflood caesar adaptation globals
+ int [] catchment_input_counter;
+ int totalinputpoints = 0;
+
+ //JMW Vars
+ string basetext = "CAESAR - Lisflood 1.9j (06/08/2019)";
+ string cfgname = null ; //Config file name
+ string workdir = "c:\\program files\\Caesar\\work\\";
+
+ // stage/tidal variables
+ int fromx, tox, fromy, toy;
+ double stage_input_time_step = 1;
+ double[] stage_inputfile;
+
+ // Soil generation variables
+ double P1, b1, k1, c1, c2, k2, c3, c4;
+
+
+ private Graphics mygraphics;
+ //private Boolean DoingGraphics; //
+ //Form2 form2; //
+ // JMW end
+
+ #region windows_forms_and_controls
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.MainMenu mainMenu1;
+ private System.Windows.Forms.MenuItem menuItem1;
+ private System.Windows.Forms.MenuItem menuItem3;
+ private System.Windows.Forms.MenuItem menuItem4;
+ private System.Windows.Forms.MenuItem menuItem5;
+ private System.Windows.Forms.MenuItem menuItem11;
+ private System.Windows.Forms.MenuItem menuItem12;
+ private System.Windows.Forms.MenuItem menuItem13;
+ private System.Windows.Forms.MenuItem menuItem14;
+ private System.Windows.Forms.MenuItem menuItem25;
+ private System.Windows.Forms.MenuItem menuItemConfigFile;
+ private System.Windows.Forms.MenuItem menuItemConfigFileOpen;
+ private System.Windows.Forms.MenuItem menuItemConfigFileSave;
+ private System.Windows.Forms.MenuItem menuItemConfigFileSaveAs;
+ private System.Windows.Forms.MenuItem menuItem2;
+ private System.Windows.Forms.MenuItem menuItem9;
+ private System.Windows.Forms.MenuItem menuItem8;
+ private System.Windows.Forms.MenuItem menuItem7;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage GridTab;
+ private System.Windows.Forms.TabPage NumericalTab;
+ private System.Windows.Forms.TabPage GrainTab;
+ private System.Windows.Forms.TabPage HydrologyTab;
+ private System.Windows.Forms.TextBox gp3box;
+ private System.Windows.Forms.TextBox gp4box;
+ private System.Windows.Forms.TextBox gp5box;
+ private System.Windows.Forms.TextBox gp6box;
+ private System.Windows.Forms.TextBox gp7box;
+ private System.Windows.Forms.TextBox gp8box;
+ private System.Windows.Forms.TextBox gp9box;
+ private System.Windows.Forms.TextBox gp2box;
+ private System.Windows.Forms.TextBox gp1box;
+ private System.Windows.Forms.TextBox g3box;
+ private System.Windows.Forms.TextBox g4box;
+ private System.Windows.Forms.TextBox g5box;
+ private System.Windows.Forms.TextBox g6box;
+ private System.Windows.Forms.TextBox g7box;
+ private System.Windows.Forms.TextBox g8box;
+ private System.Windows.Forms.TextBox g9box;
+ private System.Windows.Forms.TextBox g2box;
+ private System.Windows.Forms.TextBox g1box;
+ private System.Windows.Forms.Label label22;
+ private System.Windows.Forms.Label label21;
+ private System.Windows.Forms.Label label20;
+ private System.Windows.Forms.Label label19;
+ private System.Windows.Forms.Label label18;
+ private System.Windows.Forms.Label label17;
+ private System.Windows.Forms.Label label16;
+ private System.Windows.Forms.Label label15;
+ private System.Windows.Forms.Label label14;
+ private System.Windows.Forms.Label label13;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.TextBox input_time_step_box;
+ private System.Windows.Forms.TextBox infile4;
+ private System.Windows.Forms.TextBox infile3;
+ private System.Windows.Forms.TextBox infile2;
+ private System.Windows.Forms.TextBox infile1;
+ private System.Windows.Forms.TextBox ybox1;
+ private System.Windows.Forms.TextBox ybox2;
+ private System.Windows.Forms.TextBox ybox3;
+ private System.Windows.Forms.TextBox ybox4;
+ private System.Windows.Forms.TextBox xbox2;
+ private System.Windows.Forms.TextBox xbox3;
+ private System.Windows.Forms.TextBox xbox4;
+ private System.Windows.Forms.TextBox xbox1;
+ private System.Windows.Forms.Label label29;
+ private System.Windows.Forms.Label label44;
+ private System.Windows.Forms.Label label43;
+ private System.Windows.Forms.Label label41;
+ private System.Windows.Forms.CheckBox inbox2;
+ private System.Windows.Forms.CheckBox inbox3;
+ private System.Windows.Forms.CheckBox inbox4;
+ private System.Windows.Forms.CheckBox inbox1;
+ private System.Windows.Forms.Label label42;
+ private System.Windows.Forms.TabPage DescriptionTab;
+ private System.Windows.Forms.TextBox DescBox;
+ private System.Windows.Forms.TextBox ytextbox;
+ private System.Windows.Forms.TextBox xtextbox;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox dxbox;
+ private System.Windows.Forms.Label label11;
+ private System.Windows.Forms.Label label49;
+ private System.Windows.Forms.TextBox mintimestepbox;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.TextBox smoothbox;
+ private System.Windows.Forms.TextBox cyclemaxbox;
+ private System.Windows.Forms.TextBox itermaxbox;
+ private System.Windows.Forms.TextBox limitbox;
+ private System.Windows.Forms.Label label31;
+ private System.Windows.Forms.Label label27;
+ private System.Windows.Forms.Label label26;
+ private System.Windows.Forms.Label label10;
+ private System.Windows.Forms.Label label47;
+ private System.Windows.Forms.StatusBar statusBar1;
+ private System.Windows.Forms.StatusBarPanel IterationStatusPanel;
+ private System.Windows.Forms.StatusBarPanel TimeStatusPanel;
+ private System.Windows.Forms.StatusBarPanel QwStatusPanel;
+ private System.Windows.Forms.StatusBarPanel QsStatusPanel;
+ private System.Windows.Forms.StatusBarPanel InfoStatusPanel;
+ private System.Windows.Forms.StatusBarPanel tempStatusPanel;
+ private System.Windows.Forms.Button start_button;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.MenuItem menuItem26;
+ private System.Windows.Forms.MenuItem menuItem27;
+ private System.Windows.Forms.MenuItem menuItem28;
+ private System.Windows.Forms.MenuItem menuItem29;
+ private System.Windows.Forms.CheckBox suspGS1box;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Label label28;
+ private System.Windows.Forms.TextBox fallGS2box;
+ private System.Windows.Forms.TextBox fallGS1box;
+ private System.Windows.Forms.CheckBox suspGS2box;
+ private System.Windows.Forms.CheckBox suspGS3box;
+ private System.Windows.Forms.CheckBox suspGS4box;
+ private System.Windows.Forms.CheckBox suspGS5box;
+ private System.Windows.Forms.CheckBox suspGS6box;
+ private System.Windows.Forms.CheckBox suspGS7box;
+ private System.Windows.Forms.CheckBox suspGS8box;
+ private System.Windows.Forms.CheckBox suspGS9box;
+ private System.Windows.Forms.Label gpSumLabel;
+ private System.Windows.Forms.Label gpSumLabel2;
+ private System.Windows.Forms.TextBox fallGS3box;
+ private System.Windows.Forms.TextBox fallGS4box;
+ private System.Windows.Forms.TextBox fallGS5box;
+ private System.Windows.Forms.TextBox fallGS6box;
+ private System.Windows.Forms.TextBox fallGS7box;
+ private System.Windows.Forms.TextBox fallGS8box;
+ private System.Windows.Forms.TextBox fallGS9box;
+ private System.Windows.Forms.MenuItem menuItem30;
+ private System.Windows.Forms.MenuItem menuItem31;
+ private System.Windows.Forms.MenuItem menuItem33;
+ private System.Windows.Forms.MenuItem menuItem34;
+ private System.Windows.Forms.CheckBox overrideheaderBox;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.CheckBox recirculatebox;
+ private System.Windows.Forms.Panel Panel1;
+ private System.Windows.Forms.Label label52;
+ private System.Windows.Forms.CheckBox bedslope_box;
+ private System.Windows.Forms.ToolTip toolTip1;
+ private System.Windows.Forms.TextBox tempdata1;
+ private System.Windows.Forms.TextBox tempdata2;
+ private System.Windows.Forms.CheckBox veltaubox;
+ private System.Windows.Forms.TabPage tabPage2;
+ private System.Windows.Forms.TextBox vegTauCritBox;
+ private System.Windows.Forms.Label label36;
+ private System.Windows.Forms.TextBox infile5;
+ private System.Windows.Forms.TextBox ybox5;
+ private System.Windows.Forms.TextBox xbox5;
+ private System.Windows.Forms.CheckBox inbox5;
+ private System.Windows.Forms.TextBox infile6;
+ private System.Windows.Forms.TextBox ybox6;
+ private System.Windows.Forms.TextBox xbox6;
+ private System.Windows.Forms.CheckBox inbox6;
+ private System.Windows.Forms.TextBox infile7;
+ private System.Windows.Forms.TextBox ybox7;
+ private System.Windows.Forms.TextBox xbox7;
+ private System.Windows.Forms.CheckBox inbox7;
+ private System.Windows.Forms.TextBox infile8;
+ private System.Windows.Forms.TextBox ybox8;
+ private System.Windows.Forms.TextBox xbox8;
+ private System.Windows.Forms.CheckBox inbox8;
+ private TabPage FilesTab;
+ private CheckBox reach_mode_box;
+ private CheckBox catchment_mode_box;
+ private CheckBox checkBoxGenerateTimeSeries;
+ private CheckBox checkBoxGenerateIterations;
+ private TextBox IterationOutbox;
+ private TextBox TimeseriesOutBox;
+ private TextBox outputfilesaveintervalbox;
+ private TextBox saveintervalbox;
+ private Label label45;
+ private Label label33;
+ private CheckBox uniquefilecheck;
+ private Label label32;
+ private TextBox tracerhydrofile;
+ private TextBox tracerfile;
+ private TextBox bedrockbox;
+ private TextBox graindataloadbox;
+ private TextBox openfiletextbox;
+ private CheckBox tracerbox;
+ private Label label30;
+ private Label label39;
+ private Label label24;
+ private Label label23;
+ private CheckBox flowonlybox;
+ private Smallwisdom.Windows.Forms.ZoomPanImageBox zoomPanImageBox1;
+ private TrackBar trackBar1;
+ private Label label61;
+ private GroupBox groupBox2;
+ private ComboBox comboBox1;
+ private Label label62;
+ private GroupBox groupBox3;
+ private Label label63;
+ private TrackBar trackBar2;
+ private TextBox tracerOutputtextBox;
+ private CheckBox tracerOutcheckBox;
+ private TextBox mvaluebox;
+ private Label label37;
+ private TextBox grasstextbox;
+ private Label label40;
+ private TabPage tabPage4;
+ private Label label67;
+ private TextBox soil_ratebox;
+ private TextBox slopebox;
+ private TextBox creepratebox;
+ private Label label34;
+ private Label label8;
+ private Label label69;
+ private Label label68;
+ private Label label70;
+ private Label label73;
+ private Label label72;
+ private Label label71;
+ private TextBox m3Box;
+ private TextBox n1Box;
+ private TextBox m1Box;
+ private TextBox Beta3Box;
+ private TextBox Beta1Box;
+ private CheckBox SiberiaBox;
+ private Label label75;
+ private Label label74;
+ private TextBox max_time_step_Box;
+ private Label label76;
+ private TextBox googleBeginDate;
+ private Label label78;
+ private TextBox googAnimationSaveInterval;
+ private Label label79;
+ private TextBox googleAnimationTextBox;
+ private CheckBox googleAnimationCheckbox;
+ private Button graphicToGoogleEarthButton;
+ private CheckBox einsteinbox;
+ private CheckBox wilcockbox;
+ private Label label83;
+ private TextBox div_inputs_box;
+ private CheckBox checkBox1;
+ private TabPage tabPage5;
+ private CheckBox DuneBox;
+ private Label label89;
+ private Label label88;
+ private Label label87;
+ private Label label86;
+ private Label label85;
+ private Label label84;
+ private TextBox slab_depth_box;
+ private TextBox shadow_angle_box;
+ private TextBox upstream_check_box;
+ private TextBox depo_prob_box;
+ private TextBox offset_box;
+ private TextBox init_depth_box;
+ private CheckBox bedslopebox2;
+ private Label label56;
+ private TextBox dune_time_box;
+ private Label label57;
+ private TextBox dune_grid_size_box;
+ private GroupBox groupBox4;
+ private TextBox textBox6;
+ private CheckBox UTMsouthcheck;
+ private TextBox UTMzonebox;
+ private CheckBox UTMgridcheckbox;
+ private TextBox textBox5;
+ private CheckBox soilerosionBox;
+ private CheckBox landslidesBox;
+ private TextBox fraction_dune;
+ private Label label54;
+ private TextBox propremaining;
+ private Label label50;
+ private TextBox activebox;
+ private TextBox erodefactorbox;
+ private Label label12;
+ private Label label48;
+ private BackgroundWorker backgroundWorker1;
+ private TextBox lateralratebox;
+ private TextBox textBox3;
+ private Label label60;
+ private TextBox avge_smoothbox;
+ private CheckBox newlateral;
+ private Label label7;
+ private TabPage tabPage1;
+ private TextBox courantbox;
+ private Label label38;
+ private Label label53;
+ private TextBox Q2box;
+ private Label label3;
+ private TextBox k_evapBox;
+ private TextBox textBox2;
+ private Label label46;
+ private TextBox minqbox;
+ private TextBox initscansbox;
+ private Label label9;
+ private Label label5;
+ private CheckBox nolateral;
+ private Label label55;
+ private TextBox max_vel_box;
+ private TextBox veg_lat_box;
+ private Label label51;
+ private Label label58;
+ private TextBox downstreamshiftbox;
+ private TextBox textBox4;
+ private Label label64;
+ private Label label65;
+ private TextBox textBox7;
+ private TextBox textBox8;
+ private TextBox textBox9;
+ private Label label77;
+ public static CheckBox checkBox2;
+ private TextBox MinQmaxvalue;
+ private CheckBox checkBox3;
+ private Label label90;
+ private TextBox TidalFileName;
+ private TextBox TidalInputStep;
+ private Label label82;
+ private TextBox TidalYmin;
+ private TextBox TidalYmax;
+ private TextBox TidalXmax;
+ private TextBox TidalXmin;
+ private Label label80;
+ private Label label81;
+ private GroupBox groupBox5;
+ private GroupBox groupBox1;
+ private GroupBox groupBox6;
+ private Label label91;
+ private TextBox textBox10;
+ private TextBox bedrock_erosion_threshold_box;
+ private TextBox bedrock_erosion_rate_box;
+ private Label label92;
+ private Label label93;
+ private TabPage tabPage3;
+ private Label label101;
+ private Label label100;
+ private Label label99;
+ private TextBox textBox18;
+ private TextBox textBox17;
+ private TextBox textBox16;
+ private Label label98;
+ private Label label97;
+ private Label label96;
+ private TextBox textBox15;
+ private TextBox textBox14;
+ private TextBox textBox13;
+ private Label label95;
+ private Label label94;
+ private TextBox textBox12;
+ private TextBox textBox11;
+ private CheckBox checkBox6;
+ private CheckBox checkBox5;
+ private CheckBox checkBox4;
+ private CheckBox soildevbox;
+ private GroupBox groupBox7;
+ private Label label35;
+ private TextBox raintimestepbox;
+ private CheckBox jmeaninputfilebox;
+ private Label label59;
+ private TextBox mvalueloadbox;
+ private TextBox raindataloadbox;
+ private Label label25;
+ private TextBox hydroindexBox;
+ private Label label103;
+ private Label label102;
+ private TextBox rfnumBox;
+ private CheckBox checkBox7;
+ private CheckBox checkBox8;
+ private TextBox textBox19;
+ private Label label104;
+ private CheckBox SpatVarManningsCheckbox;
+ private Label label105;
+ private TextBox mfiletimestepbox;
+ private CheckBox meyerbox;
+ private RadioButton radioButton1;
+ private GroupBox groupBox8;
+ private RadioButton radioButton2;
+ private Label label66;
+ #endregion
+
+
+ public Form1()
+ {
+ //
+ // Required for Windows Form Designer support
+ //
+ InitializeComponent();
+
+ //
+ // TODO: Add any constructor code after InitializeComponent call
+ //
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if( disposing )
+ {
+ if (components != null)
+ {
+ components.Dispose();
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.button2 = new System.Windows.Forms.Button();
+ this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components);
+ this.menuItemConfigFile = new System.Windows.Forms.MenuItem();
+ this.menuItemConfigFileOpen = new System.Windows.Forms.MenuItem();
+ this.menuItemConfigFileSaveAs = new System.Windows.Forms.MenuItem();
+ this.menuItemConfigFileSave = new System.Windows.Forms.MenuItem();
+ this.menuItem1 = new System.Windows.Forms.MenuItem();
+ this.menuItem30 = new System.Windows.Forms.MenuItem();
+ this.menuItem3 = new System.Windows.Forms.MenuItem();
+ this.menuItem4 = new System.Windows.Forms.MenuItem();
+ this.menuItem5 = new System.Windows.Forms.MenuItem();
+ this.menuItem2 = new System.Windows.Forms.MenuItem();
+ this.menuItem7 = new System.Windows.Forms.MenuItem();
+ this.menuItem8 = new System.Windows.Forms.MenuItem();
+ this.menuItem9 = new System.Windows.Forms.MenuItem();
+ this.menuItem26 = new System.Windows.Forms.MenuItem();
+ this.menuItem27 = new System.Windows.Forms.MenuItem();
+ this.menuItem28 = new System.Windows.Forms.MenuItem();
+ this.menuItem31 = new System.Windows.Forms.MenuItem();
+ this.menuItem11 = new System.Windows.Forms.MenuItem();
+ this.menuItem12 = new System.Windows.Forms.MenuItem();
+ this.menuItem13 = new System.Windows.Forms.MenuItem();
+ this.menuItem14 = new System.Windows.Forms.MenuItem();
+ this.menuItem25 = new System.Windows.Forms.MenuItem();
+ this.menuItem29 = new System.Windows.Forms.MenuItem();
+ this.menuItem33 = new System.Windows.Forms.MenuItem();
+ this.menuItem34 = new System.Windows.Forms.MenuItem();
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.FilesTab = new System.Windows.Forms.TabPage();
+ this.groupBox6 = new System.Windows.Forms.GroupBox();
+ this.groupBox4 = new System.Windows.Forms.GroupBox();
+ this.textBox6 = new System.Windows.Forms.TextBox();
+ this.UTMsouthcheck = new System.Windows.Forms.CheckBox();
+ this.UTMzonebox = new System.Windows.Forms.TextBox();
+ this.UTMgridcheckbox = new System.Windows.Forms.CheckBox();
+ this.textBox5 = new System.Windows.Forms.TextBox();
+ this.googleBeginDate = new System.Windows.Forms.TextBox();
+ this.label78 = new System.Windows.Forms.Label();
+ this.googAnimationSaveInterval = new System.Windows.Forms.TextBox();
+ this.label79 = new System.Windows.Forms.Label();
+ this.googleAnimationTextBox = new System.Windows.Forms.TextBox();
+ this.googleAnimationCheckbox = new System.Windows.Forms.CheckBox();
+ this.checkBox3 = new System.Windows.Forms.CheckBox();
+ this.outputfilesaveintervalbox = new System.Windows.Forms.TextBox();
+ this.TimeseriesOutBox = new System.Windows.Forms.TextBox();
+ this.tracerOutputtextBox = new System.Windows.Forms.TextBox();
+ this.tracerOutcheckBox = new System.Windows.Forms.CheckBox();
+ this.reach_mode_box = new System.Windows.Forms.CheckBox();
+ this.catchment_mode_box = new System.Windows.Forms.CheckBox();
+ this.checkBoxGenerateTimeSeries = new System.Windows.Forms.CheckBox();
+ this.checkBoxGenerateIterations = new System.Windows.Forms.CheckBox();
+ this.IterationOutbox = new System.Windows.Forms.TextBox();
+ this.saveintervalbox = new System.Windows.Forms.TextBox();
+ this.label45 = new System.Windows.Forms.Label();
+ this.label33 = new System.Windows.Forms.Label();
+ this.uniquefilecheck = new System.Windows.Forms.CheckBox();
+ this.label32 = new System.Windows.Forms.Label();
+ this.tracerhydrofile = new System.Windows.Forms.TextBox();
+ this.tracerfile = new System.Windows.Forms.TextBox();
+ this.bedrockbox = new System.Windows.Forms.TextBox();
+ this.graindataloadbox = new System.Windows.Forms.TextBox();
+ this.openfiletextbox = new System.Windows.Forms.TextBox();
+ this.tracerbox = new System.Windows.Forms.CheckBox();
+ this.label30 = new System.Windows.Forms.Label();
+ this.label39 = new System.Windows.Forms.Label();
+ this.label24 = new System.Windows.Forms.Label();
+ this.label23 = new System.Windows.Forms.Label();
+ this.NumericalTab = new System.Windows.Forms.TabPage();
+ this.bedslopebox2 = new System.Windows.Forms.CheckBox();
+ this.max_time_step_Box = new System.Windows.Forms.TextBox();
+ this.label76 = new System.Windows.Forms.Label();
+ this.veltaubox = new System.Windows.Forms.CheckBox();
+ this.label52 = new System.Windows.Forms.Label();
+ this.bedslope_box = new System.Windows.Forms.CheckBox();
+ this.label47 = new System.Windows.Forms.Label();
+ this.mintimestepbox = new System.Windows.Forms.TextBox();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.smoothbox = new System.Windows.Forms.TextBox();
+ this.cyclemaxbox = new System.Windows.Forms.TextBox();
+ this.itermaxbox = new System.Windows.Forms.TextBox();
+ this.limitbox = new System.Windows.Forms.TextBox();
+ this.label31 = new System.Windows.Forms.Label();
+ this.label27 = new System.Windows.Forms.Label();
+ this.label26 = new System.Windows.Forms.Label();
+ this.label10 = new System.Windows.Forms.Label();
+ this.label49 = new System.Windows.Forms.Label();
+ this.GrainTab = new System.Windows.Forms.TabPage();
+ this.meyerbox = new System.Windows.Forms.CheckBox();
+ this.checkBox8 = new System.Windows.Forms.CheckBox();
+ this.bedrock_erosion_threshold_box = new System.Windows.Forms.TextBox();
+ this.bedrock_erosion_rate_box = new System.Windows.Forms.TextBox();
+ this.label92 = new System.Windows.Forms.Label();
+ this.label93 = new System.Windows.Forms.Label();
+ this.label65 = new System.Windows.Forms.Label();
+ this.textBox7 = new System.Windows.Forms.TextBox();
+ this.label58 = new System.Windows.Forms.Label();
+ this.downstreamshiftbox = new System.Windows.Forms.TextBox();
+ this.label55 = new System.Windows.Forms.Label();
+ this.max_vel_box = new System.Windows.Forms.TextBox();
+ this.textBox3 = new System.Windows.Forms.TextBox();
+ this.label60 = new System.Windows.Forms.Label();
+ this.avge_smoothbox = new System.Windows.Forms.TextBox();
+ this.nolateral = new System.Windows.Forms.CheckBox();
+ this.newlateral = new System.Windows.Forms.CheckBox();
+ this.label7 = new System.Windows.Forms.Label();
+ this.lateralratebox = new System.Windows.Forms.TextBox();
+ this.label48 = new System.Windows.Forms.Label();
+ this.label54 = new System.Windows.Forms.Label();
+ this.propremaining = new System.Windows.Forms.TextBox();
+ this.label50 = new System.Windows.Forms.Label();
+ this.activebox = new System.Windows.Forms.TextBox();
+ this.erodefactorbox = new System.Windows.Forms.TextBox();
+ this.label12 = new System.Windows.Forms.Label();
+ this.einsteinbox = new System.Windows.Forms.CheckBox();
+ this.wilcockbox = new System.Windows.Forms.CheckBox();
+ this.fallGS9box = new System.Windows.Forms.TextBox();
+ this.fallGS8box = new System.Windows.Forms.TextBox();
+ this.fallGS7box = new System.Windows.Forms.TextBox();
+ this.fallGS6box = new System.Windows.Forms.TextBox();
+ this.fallGS5box = new System.Windows.Forms.TextBox();
+ this.fallGS4box = new System.Windows.Forms.TextBox();
+ this.fallGS3box = new System.Windows.Forms.TextBox();
+ this.gpSumLabel = new System.Windows.Forms.Label();
+ this.gpSumLabel2 = new System.Windows.Forms.Label();
+ this.suspGS9box = new System.Windows.Forms.CheckBox();
+ this.suspGS8box = new System.Windows.Forms.CheckBox();
+ this.suspGS7box = new System.Windows.Forms.CheckBox();
+ this.suspGS6box = new System.Windows.Forms.CheckBox();
+ this.suspGS5box = new System.Windows.Forms.CheckBox();
+ this.suspGS4box = new System.Windows.Forms.CheckBox();
+ this.suspGS3box = new System.Windows.Forms.CheckBox();
+ this.suspGS2box = new System.Windows.Forms.CheckBox();
+ this.fallGS2box = new System.Windows.Forms.TextBox();
+ this.fallGS1box = new System.Windows.Forms.TextBox();
+ this.label28 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.suspGS1box = new System.Windows.Forms.CheckBox();
+ this.gp3box = new System.Windows.Forms.TextBox();
+ this.gp4box = new System.Windows.Forms.TextBox();
+ this.gp5box = new System.Windows.Forms.TextBox();
+ this.gp6box = new System.Windows.Forms.TextBox();
+ this.gp7box = new System.Windows.Forms.TextBox();
+ this.gp8box = new System.Windows.Forms.TextBox();
+ this.gp9box = new System.Windows.Forms.TextBox();
+ this.gp2box = new System.Windows.Forms.TextBox();
+ this.gp1box = new System.Windows.Forms.TextBox();
+ this.g3box = new System.Windows.Forms.TextBox();
+ this.g4box = new System.Windows.Forms.TextBox();
+ this.g5box = new System.Windows.Forms.TextBox();
+ this.g6box = new System.Windows.Forms.TextBox();
+ this.g7box = new System.Windows.Forms.TextBox();
+ this.g8box = new System.Windows.Forms.TextBox();
+ this.g9box = new System.Windows.Forms.TextBox();
+ this.g2box = new System.Windows.Forms.TextBox();
+ this.g1box = new System.Windows.Forms.TextBox();
+ this.label22 = new System.Windows.Forms.Label();
+ this.label21 = new System.Windows.Forms.Label();
+ this.label20 = new System.Windows.Forms.Label();
+ this.label19 = new System.Windows.Forms.Label();
+ this.label18 = new System.Windows.Forms.Label();
+ this.label17 = new System.Windows.Forms.Label();
+ this.label16 = new System.Windows.Forms.Label();
+ this.label15 = new System.Windows.Forms.Label();
+ this.label14 = new System.Windows.Forms.Label();
+ this.label13 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.DescriptionTab = new System.Windows.Forms.TabPage();
+ this.DescBox = new System.Windows.Forms.TextBox();
+ this.GridTab = new System.Windows.Forms.TabPage();
+ this.overrideheaderBox = new System.Windows.Forms.CheckBox();
+ this.dxbox = new System.Windows.Forms.TextBox();
+ this.label11 = new System.Windows.Forms.Label();
+ this.ytextbox = new System.Windows.Forms.TextBox();
+ this.xtextbox = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label1 = new System.Windows.Forms.Label();
+ this.HydrologyTab = new System.Windows.Forms.TabPage();
+ this.groupBox7 = new System.Windows.Forms.GroupBox();
+ this.label105 = new System.Windows.Forms.Label();
+ this.mfiletimestepbox = new System.Windows.Forms.TextBox();
+ this.hydroindexBox = new System.Windows.Forms.TextBox();
+ this.label103 = new System.Windows.Forms.Label();
+ this.label37 = new System.Windows.Forms.Label();
+ this.mvaluebox = new System.Windows.Forms.TextBox();
+ this.label102 = new System.Windows.Forms.Label();
+ this.rfnumBox = new System.Windows.Forms.TextBox();
+ this.checkBox7 = new System.Windows.Forms.CheckBox();
+ this.label35 = new System.Windows.Forms.Label();
+ this.raintimestepbox = new System.Windows.Forms.TextBox();
+ this.jmeaninputfilebox = new System.Windows.Forms.CheckBox();
+ this.label59 = new System.Windows.Forms.Label();
+ this.mvalueloadbox = new System.Windows.Forms.TextBox();
+ this.raindataloadbox = new System.Windows.Forms.TextBox();
+ this.label25 = new System.Windows.Forms.Label();
+ this.groupBox5 = new System.Windows.Forms.GroupBox();
+ this.label83 = new System.Windows.Forms.Label();
+ this.div_inputs_box = new System.Windows.Forms.TextBox();
+ this.infile8 = new System.Windows.Forms.TextBox();
+ this.ybox8 = new System.Windows.Forms.TextBox();
+ this.xbox8 = new System.Windows.Forms.TextBox();
+ this.inbox8 = new System.Windows.Forms.CheckBox();
+ this.infile7 = new System.Windows.Forms.TextBox();
+ this.ybox7 = new System.Windows.Forms.TextBox();
+ this.xbox7 = new System.Windows.Forms.TextBox();
+ this.inbox7 = new System.Windows.Forms.CheckBox();
+ this.infile6 = new System.Windows.Forms.TextBox();
+ this.ybox6 = new System.Windows.Forms.TextBox();
+ this.xbox6 = new System.Windows.Forms.TextBox();
+ this.inbox6 = new System.Windows.Forms.CheckBox();
+ this.infile5 = new System.Windows.Forms.TextBox();
+ this.ybox5 = new System.Windows.Forms.TextBox();
+ this.xbox5 = new System.Windows.Forms.TextBox();
+ this.inbox5 = new System.Windows.Forms.CheckBox();
+ this.input_time_step_box = new System.Windows.Forms.TextBox();
+ this.infile4 = new System.Windows.Forms.TextBox();
+ this.infile3 = new System.Windows.Forms.TextBox();
+ this.infile2 = new System.Windows.Forms.TextBox();
+ this.infile1 = new System.Windows.Forms.TextBox();
+ this.ybox1 = new System.Windows.Forms.TextBox();
+ this.ybox2 = new System.Windows.Forms.TextBox();
+ this.ybox3 = new System.Windows.Forms.TextBox();
+ this.ybox4 = new System.Windows.Forms.TextBox();
+ this.xbox2 = new System.Windows.Forms.TextBox();
+ this.xbox3 = new System.Windows.Forms.TextBox();
+ this.xbox4 = new System.Windows.Forms.TextBox();
+ this.xbox1 = new System.Windows.Forms.TextBox();
+ this.label29 = new System.Windows.Forms.Label();
+ this.label44 = new System.Windows.Forms.Label();
+ this.label43 = new System.Windows.Forms.Label();
+ this.label41 = new System.Windows.Forms.Label();
+ this.inbox2 = new System.Windows.Forms.CheckBox();
+ this.inbox3 = new System.Windows.Forms.CheckBox();
+ this.inbox4 = new System.Windows.Forms.CheckBox();
+ this.inbox1 = new System.Windows.Forms.CheckBox();
+ this.label42 = new System.Windows.Forms.Label();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.label90 = new System.Windows.Forms.Label();
+ this.TidalFileName = new System.Windows.Forms.TextBox();
+ this.TidalInputStep = new System.Windows.Forms.TextBox();
+ this.label82 = new System.Windows.Forms.Label();
+ this.TidalYmin = new System.Windows.Forms.TextBox();
+ this.TidalYmax = new System.Windows.Forms.TextBox();
+ this.TidalXmax = new System.Windows.Forms.TextBox();
+ this.TidalXmin = new System.Windows.Forms.TextBox();
+ this.label80 = new System.Windows.Forms.Label();
+ this.label81 = new System.Windows.Forms.Label();
+ this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.groupBox8 = new System.Windows.Forms.GroupBox();
+ this.radioButton2 = new System.Windows.Forms.RadioButton();
+ this.radioButton1 = new System.Windows.Forms.RadioButton();
+ this.veg_lat_box = new System.Windows.Forms.TextBox();
+ this.label51 = new System.Windows.Forms.Label();
+ this.grasstextbox = new System.Windows.Forms.TextBox();
+ this.label40 = new System.Windows.Forms.Label();
+ this.label36 = new System.Windows.Forms.Label();
+ this.vegTauCritBox = new System.Windows.Forms.TextBox();
+ this.tabPage4 = new System.Windows.Forms.TabPage();
+ this.soilerosionBox = new System.Windows.Forms.CheckBox();
+ this.landslidesBox = new System.Windows.Forms.CheckBox();
+ this.label75 = new System.Windows.Forms.Label();
+ this.label74 = new System.Windows.Forms.Label();
+ this.label73 = new System.Windows.Forms.Label();
+ this.label72 = new System.Windows.Forms.Label();
+ this.label71 = new System.Windows.Forms.Label();
+ this.m3Box = new System.Windows.Forms.TextBox();
+ this.n1Box = new System.Windows.Forms.TextBox();
+ this.m1Box = new System.Windows.Forms.TextBox();
+ this.Beta3Box = new System.Windows.Forms.TextBox();
+ this.Beta1Box = new System.Windows.Forms.TextBox();
+ this.SiberiaBox = new System.Windows.Forms.CheckBox();
+ this.label70 = new System.Windows.Forms.Label();
+ this.label69 = new System.Windows.Forms.Label();
+ this.label68 = new System.Windows.Forms.Label();
+ this.label67 = new System.Windows.Forms.Label();
+ this.soil_ratebox = new System.Windows.Forms.TextBox();
+ this.slopebox = new System.Windows.Forms.TextBox();
+ this.creepratebox = new System.Windows.Forms.TextBox();
+ this.label34 = new System.Windows.Forms.Label();
+ this.label8 = new System.Windows.Forms.Label();
+ this.tabPage5 = new System.Windows.Forms.TabPage();
+ this.label91 = new System.Windows.Forms.Label();
+ this.textBox10 = new System.Windows.Forms.TextBox();
+ this.fraction_dune = new System.Windows.Forms.TextBox();
+ this.label57 = new System.Windows.Forms.Label();
+ this.dune_grid_size_box = new System.Windows.Forms.TextBox();
+ this.label56 = new System.Windows.Forms.Label();
+ this.dune_time_box = new System.Windows.Forms.TextBox();
+ this.label89 = new System.Windows.Forms.Label();
+ this.label88 = new System.Windows.Forms.Label();
+ this.label87 = new System.Windows.Forms.Label();
+ this.label86 = new System.Windows.Forms.Label();
+ this.label85 = new System.Windows.Forms.Label();
+ this.label84 = new System.Windows.Forms.Label();
+ this.slab_depth_box = new System.Windows.Forms.TextBox();
+ this.shadow_angle_box = new System.Windows.Forms.TextBox();
+ this.upstream_check_box = new System.Windows.Forms.TextBox();
+ this.depo_prob_box = new System.Windows.Forms.TextBox();
+ this.offset_box = new System.Windows.Forms.TextBox();
+ this.init_depth_box = new System.Windows.Forms.TextBox();
+ this.DuneBox = new System.Windows.Forms.CheckBox();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.textBox19 = new System.Windows.Forms.TextBox();
+ this.label104 = new System.Windows.Forms.Label();
+ this.SpatVarManningsCheckbox = new System.Windows.Forms.CheckBox();
+ this.MinQmaxvalue = new System.Windows.Forms.TextBox();
+ this.textBox9 = new System.Windows.Forms.TextBox();
+ this.label77 = new System.Windows.Forms.Label();
+ this.textBox8 = new System.Windows.Forms.TextBox();
+ this.label66 = new System.Windows.Forms.Label();
+ this.textBox4 = new System.Windows.Forms.TextBox();
+ this.label64 = new System.Windows.Forms.Label();
+ this.courantbox = new System.Windows.Forms.TextBox();
+ this.label38 = new System.Windows.Forms.Label();
+ this.label53 = new System.Windows.Forms.Label();
+ this.Q2box = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.k_evapBox = new System.Windows.Forms.TextBox();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.label46 = new System.Windows.Forms.Label();
+ this.minqbox = new System.Windows.Forms.TextBox();
+ this.initscansbox = new System.Windows.Forms.TextBox();
+ this.label9 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.tabPage3 = new System.Windows.Forms.TabPage();
+ this.label101 = new System.Windows.Forms.Label();
+ this.label100 = new System.Windows.Forms.Label();
+ this.label99 = new System.Windows.Forms.Label();
+ this.textBox18 = new System.Windows.Forms.TextBox();
+ this.textBox17 = new System.Windows.Forms.TextBox();
+ this.textBox16 = new System.Windows.Forms.TextBox();
+ this.label98 = new System.Windows.Forms.Label();
+ this.label97 = new System.Windows.Forms.Label();
+ this.label96 = new System.Windows.Forms.Label();
+ this.textBox15 = new System.Windows.Forms.TextBox();
+ this.textBox14 = new System.Windows.Forms.TextBox();
+ this.textBox13 = new System.Windows.Forms.TextBox();
+ this.label95 = new System.Windows.Forms.Label();
+ this.label94 = new System.Windows.Forms.Label();
+ this.textBox12 = new System.Windows.Forms.TextBox();
+ this.textBox11 = new System.Windows.Forms.TextBox();
+ this.checkBox6 = new System.Windows.Forms.CheckBox();
+ this.checkBox5 = new System.Windows.Forms.CheckBox();
+ this.checkBox4 = new System.Windows.Forms.CheckBox();
+ this.soildevbox = new System.Windows.Forms.CheckBox();
+ this.Panel1 = new System.Windows.Forms.Panel();
+ this.tempdata2 = new System.Windows.Forms.TextBox();
+ this.tempdata1 = new System.Windows.Forms.TextBox();
+ this.graphicToGoogleEarthButton = new System.Windows.Forms.Button();
+ this.button4 = new System.Windows.Forms.Button();
+ this.button3 = new System.Windows.Forms.Button();
+ this.recirculatebox = new System.Windows.Forms.CheckBox();
+ this.flowonlybox = new System.Windows.Forms.CheckBox();
+ this.statusBar1 = new System.Windows.Forms.StatusBar();
+ this.InfoStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.IterationStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.TimeStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.QwStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.QsStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.tempStatusPanel = new System.Windows.Forms.StatusBarPanel();
+ this.start_button = new System.Windows.Forms.Button();
+ this.button1 = new System.Windows.Forms.Button();
+ checkBox2 = new System.Windows.Forms.CheckBox();
+ this.checkBox1 = new System.Windows.Forms.CheckBox();
+ this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+ this.trackBar1 = new System.Windows.Forms.TrackBar();
+ this.label61 = new System.Windows.Forms.Label();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.label62 = new System.Windows.Forms.Label();
+ this.comboBox1 = new System.Windows.Forms.ComboBox();
+ this.groupBox3 = new System.Windows.Forms.GroupBox();
+ this.label63 = new System.Windows.Forms.Label();
+ this.trackBar2 = new System.Windows.Forms.TrackBar();
+ this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
+ this.zoomPanImageBox1 = new Smallwisdom.Windows.Forms.ZoomPanImageBox();
+ this.tabControl1.SuspendLayout();
+ this.FilesTab.SuspendLayout();
+ this.groupBox6.SuspendLayout();
+ this.groupBox4.SuspendLayout();
+ this.NumericalTab.SuspendLayout();
+ this.GrainTab.SuspendLayout();
+ this.DescriptionTab.SuspendLayout();
+ this.GridTab.SuspendLayout();
+ this.HydrologyTab.SuspendLayout();
+ this.groupBox7.SuspendLayout();
+ this.groupBox5.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ this.tabPage2.SuspendLayout();
+ this.groupBox8.SuspendLayout();
+ this.tabPage4.SuspendLayout();
+ this.tabPage5.SuspendLayout();
+ this.tabPage1.SuspendLayout();
+ this.tabPage3.SuspendLayout();
+ this.Panel1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.InfoStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.IterationStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.TimeStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.QwStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.QsStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.tempStatusPanel)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit();
+ this.groupBox2.SuspendLayout();
+ this.groupBox3.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.trackBar2)).BeginInit();
+ this.SuspendLayout();
+ //
+ // button2
+ //
+ this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.button2.Location = new System.Drawing.Point(9, 513);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(100, 25);
+ this.button2.TabIndex = 7;
+ this.button2.Text = "load data";
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // mainMenu1
+ //
+ this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+ this.menuItemConfigFile,
+ this.menuItem1,
+ this.menuItem2,
+ this.menuItem11});
+ //
+ // menuItemConfigFile
+ //
+ this.menuItemConfigFile.Index = 0;
+ this.menuItemConfigFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+ this.menuItemConfigFileOpen,
+ this.menuItemConfigFileSaveAs,
+ this.menuItemConfigFileSave});
+ this.menuItemConfigFile.Text = "Config &File";
+ //
+ // menuItemConfigFileOpen
+ //
+ this.menuItemConfigFileOpen.Index = 0;
+ this.menuItemConfigFileOpen.Text = "&Open";
+ this.menuItemConfigFileOpen.Click += new System.EventHandler(this.menuItemConfigFileOpen_Click);
+ //
+ // menuItemConfigFileSaveAs
+ //
+ this.menuItemConfigFileSaveAs.Index = 1;
+ this.menuItemConfigFileSaveAs.Text = "Save &As";
+ this.menuItemConfigFileSaveAs.Click += new System.EventHandler(this.menuItemConfigFileSave_Click);
+ //
+ // menuItemConfigFileSave
+ //
+ this.menuItemConfigFileSave.Index = 2;
+ this.menuItemConfigFileSave.Text = "&Save";
+ this.menuItemConfigFileSave.Click += new System.EventHandler(this.menuItemConfigFileSave_Click);
+ //
+ // menuItem1
+ //
+ this.menuItem1.Index = 1;
+ this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+ this.menuItem30,
+ this.menuItem3,
+ this.menuItem4,
+ this.menuItem5});
+ this.menuItem1.Text = "&Top Graphics";
+ //
+ // menuItem30
+ //
+ this.menuItem30.Index = 0;
+ this.menuItem30.Text = "DEM";
+ this.menuItem30.Click += new System.EventHandler(this.menuItem30_Click);
+ //
+ // menuItem3
+ //
+ this.menuItem3.Checked = true;
+ this.menuItem3.Index = 1;
+ this.menuItem3.Text = "water depth (low scale)";
+ this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click);
+ //
+ // menuItem4
+ //
+ this.menuItem4.Index = 2;
+ this.menuItem4.Text = "erosion/dep";
+ this.menuItem4.Click += new System.EventHandler(this.menuItem4_Click);
+ //
+ // menuItem5
+ //
+ this.menuItem5.Index = 3;
+ this.menuItem5.Text = "Grass/veg cover";
+ this.menuItem5.Click += new System.EventHandler(this.menuItem5_Click);
+ //
+ // menuItem2
+ //
+ this.menuItem2.Index = 2;
+ this.menuItem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+ this.menuItem7,
+ this.menuItem8,
+ this.menuItem9,
+ this.menuItem26,
+ this.menuItem27,
+ this.menuItem28,
+ this.menuItem31});
+ this.menuItem2.Text = "&Top graphics II";
+ //
+ // menuItem7
+ //
+ this.menuItem7.Index = 0;
+ this.menuItem7.Text = "lateral gradient";
+ this.menuItem7.Click += new System.EventHandler(this.menuItem7_Click);
+ //
+ // menuItem8
+ //
+ this.menuItem8.Index = 1;
+ this.menuItem8.Text = "Bed sheer stress";
+ this.menuItem8.Click += new System.EventHandler(this.menuItem8_Click);
+ //
+ // menuItem9
+ //
+ this.menuItem9.Index = 2;
+ this.menuItem9.Text = "grainsize (new scale)";
+ this.menuItem9.Click += new System.EventHandler(this.menuItem9_Click);
+ //
+ // menuItem26
+ //
+ this.menuItem26.Index = 3;
+ this.menuItem26.Text = "Drainage area";
+ this.menuItem26.Click += new System.EventHandler(this.menuItem26_Click);
+ //
+ // menuItem27
+ //
+ this.menuItem27.Index = 4;
+ this.menuItem27.Text = "susp conc";
+ this.menuItem27.Click += new System.EventHandler(this.menuItem27_Click);
+ //
+ // menuItem28
+ //
+ this.menuItem28.Index = 5;
+ this.menuItem28.Text = "soil depth";
+ this.menuItem28.Click += new System.EventHandler(this.menuItem28_Click);
+ //
+ // menuItem31
+ //
+ this.menuItem31.Index = 6;
+ this.menuItem31.Text = "flow velocity";
+ this.menuItem31.Click += new System.EventHandler(this.menuItem31_Click);
+ //
+ // menuItem11
+ //
+ this.menuItem11.Index = 3;
+ this.menuItem11.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
+ this.menuItem12,
+ this.menuItem13,
+ this.menuItem14,
+ this.menuItem25,
+ this.menuItem29,
+ this.menuItem33,
+ this.menuItem34});
+ this.menuItem11.Text = "Save Options";
+ //
+ // menuItem12
+ //
+ this.menuItem12.Checked = true;
+ this.menuItem12.Index = 0;
+ this.menuItem12.Text = "elevations";
+ this.menuItem12.Click += new System.EventHandler(this.menuItem12_Click);
+ //
+ // menuItem13
+ //
+ this.menuItem13.Checked = true;
+ this.menuItem13.Index = 1;
+ this.menuItem13.Text = "elev diff";
+ this.menuItem13.Click += new System.EventHandler(this.menuItem13_Click);
+ //
+ // menuItem14
+ //
+ this.menuItem14.Checked = true;
+ this.menuItem14.Index = 2;
+ this.menuItem14.Text = "grainsize";
+ this.menuItem14.Click += new System.EventHandler(this.menuItem14_Click);
+ //
+ // menuItem25
+ //
+ this.menuItem25.Index = 3;
+ this.menuItem25.Text = "water depth";
+ this.menuItem25.Click += new System.EventHandler(this.menuItem25_Click);
+ //
+ // menuItem29
+ //
+ this.menuItem29.Checked = true;
+ this.menuItem29.Index = 4;
+ this.menuItem29.Text = "d50 top layer";
+ this.menuItem29.Click += new System.EventHandler(this.menuItem29_Click);
+ //
+ // menuItem33
+ //
+ this.menuItem33.Index = 5;
+ this.menuItem33.Text = "flow velocity";
+ this.menuItem33.Click += new System.EventHandler(this.menuItem33_Click);
+ //
+ // menuItem34
+ //
+ this.menuItem34.Index = 6;
+ this.menuItem34.Text = "Veloc vectors";
+ this.menuItem34.Click += new System.EventHandler(this.menuItem34_Click);
+ //
+ // tabControl1
+ //
+ this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tabControl1.Controls.Add(this.FilesTab);
+ this.tabControl1.Controls.Add(this.NumericalTab);
+ this.tabControl1.Controls.Add(this.GrainTab);
+ this.tabControl1.Controls.Add(this.DescriptionTab);
+ this.tabControl1.Controls.Add(this.GridTab);
+ this.tabControl1.Controls.Add(this.HydrologyTab);
+ this.tabControl1.Controls.Add(this.tabPage2);
+ this.tabControl1.Controls.Add(this.tabPage4);
+ this.tabControl1.Controls.Add(this.tabPage5);
+ this.tabControl1.Controls.Add(this.tabPage1);
+ this.tabControl1.Controls.Add(this.tabPage3);
+ this.tabControl1.Location = new System.Drawing.Point(3, -1);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(1331, 513);
+ this.tabControl1.TabIndex = 143;
+ this.tabControl1.Tag = "Flow Model";
+ //
+ // FilesTab
+ //
+ this.FilesTab.Controls.Add(this.groupBox6);
+ this.FilesTab.Controls.Add(this.checkBox3);
+ this.FilesTab.Controls.Add(this.outputfilesaveintervalbox);
+ this.FilesTab.Controls.Add(this.TimeseriesOutBox);
+ this.FilesTab.Controls.Add(this.tracerOutputtextBox);
+ this.FilesTab.Controls.Add(this.tracerOutcheckBox);
+ this.FilesTab.Controls.Add(this.reach_mode_box);
+ this.FilesTab.Controls.Add(this.catchment_mode_box);
+ this.FilesTab.Controls.Add(this.checkBoxGenerateTimeSeries);
+ this.FilesTab.Controls.Add(this.checkBoxGenerateIterations);
+ this.FilesTab.Controls.Add(this.IterationOutbox);
+ this.FilesTab.Controls.Add(this.saveintervalbox);
+ this.FilesTab.Controls.Add(this.label45);
+ this.FilesTab.Controls.Add(this.label33);
+ this.FilesTab.Controls.Add(this.uniquefilecheck);
+ this.FilesTab.Controls.Add(this.label32);
+ this.FilesTab.Controls.Add(this.tracerhydrofile);
+ this.FilesTab.Controls.Add(this.tracerfile);
+ this.FilesTab.Controls.Add(this.bedrockbox);
+ this.FilesTab.Controls.Add(this.graindataloadbox);
+ this.FilesTab.Controls.Add(this.openfiletextbox);
+ this.FilesTab.Controls.Add(this.tracerbox);
+ this.FilesTab.Controls.Add(this.label30);
+ this.FilesTab.Controls.Add(this.label39);
+ this.FilesTab.Controls.Add(this.label24);
+ this.FilesTab.Controls.Add(this.label23);
+ this.FilesTab.Location = new System.Drawing.Point(4, 22);
+ this.FilesTab.Name = "FilesTab";
+ this.FilesTab.Size = new System.Drawing.Size(1323, 487);
+ this.FilesTab.TabIndex = 0;
+ this.FilesTab.Text = "Files";
+ this.FilesTab.UseVisualStyleBackColor = true;
+ //
+ // groupBox6
+ //
+ this.groupBox6.Controls.Add(this.groupBox4);
+ this.groupBox6.Controls.Add(this.UTMgridcheckbox);
+ this.groupBox6.Controls.Add(this.textBox5);
+ this.groupBox6.Controls.Add(this.googleBeginDate);
+ this.groupBox6.Controls.Add(this.label78);
+ this.groupBox6.Controls.Add(this.googAnimationSaveInterval);
+ this.groupBox6.Controls.Add(this.label79);
+ this.groupBox6.Controls.Add(this.googleAnimationTextBox);
+ this.groupBox6.Controls.Add(this.googleAnimationCheckbox);
+ this.groupBox6.Location = new System.Drawing.Point(367, 192);
+ this.groupBox6.Name = "groupBox6";
+ this.groupBox6.Size = new System.Drawing.Size(418, 236);
+ this.groupBox6.TabIndex = 205;
+ this.groupBox6.TabStop = false;
+ this.groupBox6.Text = "Google Earth output variables";
+ //
+ // groupBox4
+ //
+ this.groupBox4.Controls.Add(this.textBox6);
+ this.groupBox4.Controls.Add(this.UTMsouthcheck);
+ this.groupBox4.Controls.Add(this.UTMzonebox);
+ this.groupBox4.Location = new System.Drawing.Point(220, 137);
+ this.groupBox4.Name = "groupBox4";
+ this.groupBox4.Size = new System.Drawing.Size(144, 65);
+ this.groupBox4.TabIndex = 201;
+ this.groupBox4.TabStop = false;
+ this.groupBox4.Visible = false;
+ //
+ // textBox6
+ //
+ this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.textBox6.Location = new System.Drawing.Point(6, 17);
+ this.textBox6.Multiline = true;
+ this.textBox6.Name = "textBox6";
+ this.textBox6.ReadOnly = true;
+ this.textBox6.Size = new System.Drawing.Size(87, 22);
+ this.textBox6.TabIndex = 196;
+ this.textBox6.Text = "UTM zone (1-60)";
+ this.textBox6.Visible = false;
+ //
+ // UTMsouthcheck
+ //
+ this.UTMsouthcheck.AutoSize = true;
+ this.UTMsouthcheck.Location = new System.Drawing.Point(6, 42);
+ this.UTMsouthcheck.Name = "UTMsouthcheck";
+ this.UTMsouthcheck.Size = new System.Drawing.Size(128, 17);
+ this.UTMsouthcheck.TabIndex = 197;
+ this.UTMsouthcheck.Text = "Southern Hemisphere";
+ this.UTMsouthcheck.UseVisualStyleBackColor = true;
+ this.UTMsouthcheck.Visible = false;
+ //
+ // UTMzonebox
+ //
+ this.UTMzonebox.Location = new System.Drawing.Point(99, 16);
+ this.UTMzonebox.Name = "UTMzonebox";
+ this.UTMzonebox.Size = new System.Drawing.Size(39, 20);
+ this.UTMzonebox.TabIndex = 194;
+ this.UTMzonebox.Tag = "UTM zone";
+ this.toolTip1.SetToolTip(this.UTMzonebox, "Enter the UTM zone");
+ this.UTMzonebox.Visible = false;
+ //
+ // UTMgridcheckbox
+ //
+ this.UTMgridcheckbox.AutoSize = true;
+ this.UTMgridcheckbox.Location = new System.Drawing.Point(225, 116);
+ this.UTMgridcheckbox.Name = "UTMgridcheckbox";
+ this.UTMgridcheckbox.Size = new System.Drawing.Size(82, 17);
+ this.UTMgridcheckbox.TabIndex = 200;
+ this.UTMgridcheckbox.Text = "Grid is UTM";
+ this.UTMgridcheckbox.UseVisualStyleBackColor = true;
+ this.UTMgridcheckbox.CheckedChanged += new System.EventHandler(this.UTMgridcheckbox_CheckedChanged);
+ //
+ // textBox5
+ //
+ this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.textBox5.Location = new System.Drawing.Point(26, 112);
+ this.textBox5.Multiline = true;
+ this.textBox5.Name = "textBox5";
+ this.textBox5.ReadOnly = true;
+ this.textBox5.Size = new System.Drawing.Size(190, 35);
+ this.textBox5.TabIndex = 199;
+ this.textBox5.Text = "For DTMs using British National Grid or UTM WGS84";
+ //
+ // googleBeginDate
+ //
+ this.googleBeginDate.AcceptsTab = true;
+ this.googleBeginDate.Location = new System.Drawing.Point(222, 84);
+ this.googleBeginDate.Name = "googleBeginDate";
+ this.googleBeginDate.Size = new System.Drawing.Size(106, 20);
+ this.googleBeginDate.TabIndex = 191;
+ //
+ // label78
+ //
+ this.label78.AutoSize = true;
+ this.label78.Location = new System.Drawing.Point(96, 87);
+ this.label78.Name = "label78";
+ this.label78.Size = new System.Drawing.Size(120, 13);
+ this.label78.TabIndex = 190;
+ this.label78.Text = "begin date (yyyy-mm-dd)";
+ //
+ // googAnimationSaveInterval
+ //
+ this.googAnimationSaveInterval.Location = new System.Drawing.Point(222, 58);
+ this.googAnimationSaveInterval.Name = "googAnimationSaveInterval";
+ this.googAnimationSaveInterval.Size = new System.Drawing.Size(56, 20);
+ this.googAnimationSaveInterval.TabIndex = 188;
+ this.googAnimationSaveInterval.Text = "1000";
+ //
+ // label79
+ //
+ this.label79.Location = new System.Drawing.Point(64, 58);
+ this.label79.Name = "label79";
+ this.label79.Size = new System.Drawing.Size(152, 25);
+ this.label79.TabIndex = 189;
+ this.label79.Text = "Save file every * mins";
+ this.label79.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label79, "How often the avi file AND the other data files are saved");
+ //
+ // googleAnimationTextBox
+ //
+ this.googleAnimationTextBox.Location = new System.Drawing.Point(222, 32);
+ this.googleAnimationTextBox.Name = "googleAnimationTextBox";
+ this.googleAnimationTextBox.Size = new System.Drawing.Size(106, 20);
+ this.googleAnimationTextBox.TabIndex = 185;
+ this.googleAnimationTextBox.Text = "animation.kmz";
+ this.toolTip1.SetToolTip(this.googleAnimationTextBox, "File name for avi file");
+ //
+ // googleAnimationCheckbox
+ //
+ this.googleAnimationCheckbox.Location = new System.Drawing.Point(27, 31);
+ this.googleAnimationCheckbox.Name = "googleAnimationCheckbox";
+ this.googleAnimationCheckbox.Size = new System.Drawing.Size(195, 24);
+ this.googleAnimationCheckbox.TabIndex = 184;
+ this.googleAnimationCheckbox.Text = "Generate Google Earth Animation";
+ this.toolTip1.SetToolTip(this.googleAnimationCheckbox, "Check to generate a movie file of the screen display");
+ //
+ // checkBox3
+ //
+ this.checkBox3.Location = new System.Drawing.Point(307, 5);
+ this.checkBox3.Name = "checkBox3";
+ this.checkBox3.Size = new System.Drawing.Size(147, 42);
+ this.checkBox3.TabIndex = 204;
+ this.checkBox3.Text = "Stage/Tidal input";
+ this.toolTip1.SetToolTip(this.checkBox3, "CAESAR can run in both catchment and reach mode combined. But if you have reach m" +
+ "ode selected, you should enter an input file in the hydrology tab");
+ //
+ // outputfilesaveintervalbox
+ //
+ this.outputfilesaveintervalbox.Location = new System.Drawing.Point(208, 327);
+ this.outputfilesaveintervalbox.Name = "outputfilesaveintervalbox";
+ this.outputfilesaveintervalbox.Size = new System.Drawing.Size(56, 20);
+ this.outputfilesaveintervalbox.TabIndex = 166;
+ this.outputfilesaveintervalbox.Text = "60";
+ //
+ // TimeseriesOutBox
+ //
+ this.TimeseriesOutBox.Location = new System.Drawing.Point(208, 303);
+ this.TimeseriesOutBox.Name = "TimeseriesOutBox";
+ this.TimeseriesOutBox.Size = new System.Drawing.Size(112, 20);
+ this.TimeseriesOutBox.TabIndex = 168;
+ this.TimeseriesOutBox.Text = "catchment.dat";
+ //
+ // tracerOutputtextBox
+ //
+ this.tracerOutputtextBox.Location = new System.Drawing.Point(760, 55);
+ this.tracerOutputtextBox.Name = "tracerOutputtextBox";
+ this.tracerOutputtextBox.Size = new System.Drawing.Size(112, 20);
+ this.tracerOutputtextBox.TabIndex = 181;
+ this.tracerOutputtextBox.Text = "tracer_output.txt";
+ this.tracerOutputtextBox.Visible = false;
+ //
+ // tracerOutcheckBox
+ //
+ this.tracerOutcheckBox.Location = new System.Drawing.Point(720, 81);
+ this.tracerOutcheckBox.Name = "tracerOutcheckBox";
+ this.tracerOutcheckBox.Size = new System.Drawing.Size(160, 24);
+ this.tracerOutcheckBox.TabIndex = 180;
+ this.tracerOutcheckBox.Text = "Generate tracer output";
+ this.tracerOutcheckBox.Visible = false;
+ //
+ // reach_mode_box
+ //
+ this.reach_mode_box.Checked = true;
+ this.reach_mode_box.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.reach_mode_box.Location = new System.Drawing.Point(196, 5);
+ this.reach_mode_box.Name = "reach_mode_box";
+ this.reach_mode_box.Size = new System.Drawing.Size(147, 42);
+ this.reach_mode_box.TabIndex = 175;
+ this.reach_mode_box.Text = "Reach Mode";
+ this.toolTip1.SetToolTip(this.reach_mode_box, "CAESAR can run in both catchment and reach mode combined. But if you have reach m" +
+ "ode selected, you should enter an input file in the hydrology tab");
+ //
+ // catchment_mode_box
+ //
+ this.catchment_mode_box.Location = new System.Drawing.Point(54, 9);
+ this.catchment_mode_box.Name = "catchment_mode_box";
+ this.catchment_mode_box.Size = new System.Drawing.Size(147, 34);
+ this.catchment_mode_box.TabIndex = 174;
+ this.catchment_mode_box.Text = "Catchment mode";
+ this.toolTip1.SetToolTip(this.catchment_mode_box, "CAESAR can run in both catchment and reach mode, but if you have catchment mode c" +
+ "hecked, you should input a rainfall data file");
+ this.catchment_mode_box.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
+ //
+ // checkBoxGenerateTimeSeries
+ //
+ this.checkBoxGenerateTimeSeries.Location = new System.Drawing.Point(44, 304);
+ this.checkBoxGenerateTimeSeries.Name = "checkBoxGenerateTimeSeries";
+ this.checkBoxGenerateTimeSeries.Size = new System.Drawing.Size(170, 24);
+ this.checkBoxGenerateTimeSeries.TabIndex = 173;
+ this.checkBoxGenerateTimeSeries.Text = "Generate time series output";
+ //
+ // checkBoxGenerateIterations
+ //
+ this.checkBoxGenerateIterations.Location = new System.Drawing.Point(45, 367);
+ this.checkBoxGenerateIterations.Name = "checkBoxGenerateIterations";
+ this.checkBoxGenerateIterations.Size = new System.Drawing.Size(152, 24);
+ this.checkBoxGenerateIterations.TabIndex = 172;
+ this.checkBoxGenerateIterations.Text = "Generate iteration output";
+ this.checkBoxGenerateIterations.Visible = false;
+ //
+ // IterationOutbox
+ //
+ this.IterationOutbox.Location = new System.Drawing.Point(208, 367);
+ this.IterationOutbox.Name = "IterationOutbox";
+ this.IterationOutbox.Size = new System.Drawing.Size(112, 20);
+ this.IterationOutbox.TabIndex = 170;
+ this.IterationOutbox.Text = "iterout.dat";
+ this.IterationOutbox.Visible = false;
+ //
+ // saveintervalbox
+ //
+ this.saveintervalbox.Location = new System.Drawing.Point(175, 224);
+ this.saveintervalbox.Name = "saveintervalbox";
+ this.saveintervalbox.Size = new System.Drawing.Size(56, 20);
+ this.saveintervalbox.TabIndex = 163;
+ this.saveintervalbox.Text = "1000";
+ //
+ // label45
+ //
+ this.label45.Location = new System.Drawing.Point(48, 327);
+ this.label45.Name = "label45";
+ this.label45.Size = new System.Drawing.Size(152, 24);
+ this.label45.TabIndex = 167;
+ this.label45.Text = "Save file every * mins";
+ this.label45.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label33
+ //
+ this.label33.Location = new System.Drawing.Point(17, 221);
+ this.label33.Name = "label33";
+ this.label33.Size = new System.Drawing.Size(152, 25);
+ this.label33.TabIndex = 165;
+ this.label33.Text = "Save file every * mins";
+ this.label33.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label33, "How often the avi file AND the other data files are saved");
+ //
+ // uniquefilecheck
+ //
+ this.uniquefilecheck.Location = new System.Drawing.Point(44, 245);
+ this.uniquefilecheck.Name = "uniquefilecheck";
+ this.uniquefilecheck.Size = new System.Drawing.Size(120, 25);
+ this.uniquefilecheck.TabIndex = 164;
+ this.uniquefilecheck.Text = "unique file name?";
+ this.toolTip1.SetToolTip(this.uniquefilecheck, "Whether the data files are given a unqiu file name - ");
+ //
+ // label32
+ //
+ this.label32.Location = new System.Drawing.Point(603, 19);
+ this.label32.Name = "label32";
+ this.label32.Size = new System.Drawing.Size(128, 24);
+ this.label32.TabIndex = 106;
+ this.label32.Text = "tracer sediment vol file";
+ this.label32.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.label32.Visible = false;
+ //
+ // tracerhydrofile
+ //
+ this.tracerhydrofile.Location = new System.Drawing.Point(656, 42);
+ this.tracerhydrofile.Name = "tracerhydrofile";
+ this.tracerhydrofile.Size = new System.Drawing.Size(120, 20);
+ this.tracerhydrofile.TabIndex = 105;
+ this.tracerhydrofile.Text = "null";
+ this.tracerhydrofile.Visible = false;
+ //
+ // tracerfile
+ //
+ this.tracerfile.Location = new System.Drawing.Point(752, 16);
+ this.tracerfile.Name = "tracerfile";
+ this.tracerfile.Size = new System.Drawing.Size(120, 20);
+ this.tracerfile.TabIndex = 104;
+ this.tracerfile.Text = "null";
+ this.tracerfile.Visible = false;
+ //
+ // bedrockbox
+ //
+ this.bedrockbox.Location = new System.Drawing.Point(131, 97);
+ this.bedrockbox.Name = "bedrockbox";
+ this.bedrockbox.Size = new System.Drawing.Size(120, 20);
+ this.bedrockbox.TabIndex = 102;
+ this.bedrockbox.Text = "null";
+ //
+ // graindataloadbox
+ //
+ this.graindataloadbox.Location = new System.Drawing.Point(131, 73);
+ this.graindataloadbox.Name = "graindataloadbox";
+ this.graindataloadbox.Size = new System.Drawing.Size(120, 20);
+ this.graindataloadbox.TabIndex = 101;
+ this.graindataloadbox.Text = "null";
+ //
+ // openfiletextbox
+ //
+ this.openfiletextbox.Location = new System.Drawing.Point(131, 49);
+ this.openfiletextbox.Name = "openfiletextbox";
+ this.openfiletextbox.Size = new System.Drawing.Size(120, 20);
+ this.openfiletextbox.TabIndex = 100;
+ this.openfiletextbox.Text = "whole9.dat";
+ //
+ // tracerbox
+ //
+ this.tracerbox.Location = new System.Drawing.Point(760, 16);
+ this.tracerbox.Name = "tracerbox";
+ this.tracerbox.Size = new System.Drawing.Size(88, 23);
+ this.tracerbox.TabIndex = 99;
+ this.tracerbox.Text = "tracer run?";
+ this.toolTip1.SetToolTip(this.tracerbox, "Check to run in \'tracer mode\'");
+ this.tracerbox.Visible = false;
+ //
+ // label30
+ //
+ this.label30.Location = new System.Drawing.Point(732, 16);
+ this.label30.Name = "label30";
+ this.label30.Size = new System.Drawing.Size(128, 24);
+ this.label30.TabIndex = 98;
+ this.label30.Text = "tracer input file";
+ this.label30.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.label30.Visible = false;
+ //
+ // label39
+ //
+ this.label39.Location = new System.Drawing.Point(19, 97);
+ this.label39.Name = "label39";
+ this.label39.Size = new System.Drawing.Size(104, 24);
+ this.label39.TabIndex = 96;
+ this.label39.Text = "Bedrock data file";
+ this.label39.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label39, "A DEM of the bedrock - below which the model cannot erode");
+ //
+ // label24
+ //
+ this.label24.Location = new System.Drawing.Point(19, 73);
+ this.label24.Name = "label24";
+ this.label24.Size = new System.Drawing.Size(104, 24);
+ this.label24.TabIndex = 58;
+ this.label24.Text = "Grain data file";
+ this.label24.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label23
+ //
+ this.label23.Location = new System.Drawing.Point(19, 49);
+ this.label23.Name = "label23";
+ this.label23.Size = new System.Drawing.Size(104, 24);
+ this.label23.TabIndex = 56;
+ this.label23.Text = "DEM data file";
+ this.label23.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // NumericalTab
+ //
+ this.NumericalTab.Controls.Add(this.bedslopebox2);
+ this.NumericalTab.Controls.Add(this.max_time_step_Box);
+ this.NumericalTab.Controls.Add(this.label76);
+ this.NumericalTab.Controls.Add(this.veltaubox);
+ this.NumericalTab.Controls.Add(this.label52);
+ this.NumericalTab.Controls.Add(this.bedslope_box);
+ this.NumericalTab.Controls.Add(this.label47);
+ this.NumericalTab.Controls.Add(this.mintimestepbox);
+ this.NumericalTab.Controls.Add(this.textBox1);
+ this.NumericalTab.Controls.Add(this.smoothbox);
+ this.NumericalTab.Controls.Add(this.cyclemaxbox);
+ this.NumericalTab.Controls.Add(this.itermaxbox);
+ this.NumericalTab.Controls.Add(this.limitbox);
+ this.NumericalTab.Controls.Add(this.label31);
+ this.NumericalTab.Controls.Add(this.label27);
+ this.NumericalTab.Controls.Add(this.label26);
+ this.NumericalTab.Controls.Add(this.label10);
+ this.NumericalTab.Controls.Add(this.label49);
+ this.NumericalTab.Location = new System.Drawing.Point(4, 22);
+ this.NumericalTab.Name = "NumericalTab";
+ this.NumericalTab.Size = new System.Drawing.Size(1323, 487);
+ this.NumericalTab.TabIndex = 2;
+ this.NumericalTab.Text = "Numerical";
+ this.NumericalTab.UseVisualStyleBackColor = true;
+ //
+ // bedslopebox2
+ //
+ this.bedslopebox2.Location = new System.Drawing.Point(84, 298);
+ this.bedslopebox2.Name = "bedslopebox2";
+ this.bedslopebox2.Size = new System.Drawing.Size(153, 35);
+ this.bedslopebox2.TabIndex = 189;
+ this.bedslopebox2.Text = "redundant now hidden";
+ this.bedslopebox2.Visible = false;
+ this.bedslopebox2.CheckedChanged += new System.EventHandler(this.bedslopebox2_CheckedChanged);
+ //
+ // max_time_step_Box
+ //
+ this.max_time_step_Box.Location = new System.Drawing.Point(184, 80);
+ this.max_time_step_Box.Name = "max_time_step_Box";
+ this.max_time_step_Box.Size = new System.Drawing.Size(64, 20);
+ this.max_time_step_Box.TabIndex = 186;
+ this.max_time_step_Box.Text = "3600";
+ //
+ // label76
+ //
+ this.label76.Location = new System.Drawing.Point(40, 80);
+ this.label76.Name = "label76";
+ this.label76.Size = new System.Drawing.Size(136, 24);
+ this.label76.TabIndex = 187;
+ this.label76.Text = "Max time step (secs)";
+ this.label76.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // veltaubox
+ //
+ this.veltaubox.Location = new System.Drawing.Point(77, 368);
+ this.veltaubox.Name = "veltaubox";
+ this.veltaubox.Size = new System.Drawing.Size(160, 27);
+ this.veltaubox.TabIndex = 183;
+ this.veltaubox.Text = "Tau based on velocity";
+ this.veltaubox.Visible = false;
+ this.veltaubox.CheckedChanged += new System.EventHandler(this.veltaubox_CheckedChanged);
+ //
+ // label52
+ //
+ this.label52.Location = new System.Drawing.Point(81, 342);
+ this.label52.Name = "label52";
+ this.label52.Size = new System.Drawing.Size(133, 28);
+ this.label52.TabIndex = 182;
+ this.label52.Text = "Slope used to calc Tau (for erosion)";
+ this.toolTip1.SetToolTip(this.label52, "See notes on lateral tab for more. ");
+ this.label52.Visible = false;
+ //
+ // bedslope_box
+ //
+ this.bedslope_box.Checked = true;
+ this.bedslope_box.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.bedslope_box.Location = new System.Drawing.Point(22, 345);
+ this.bedslope_box.Name = "bedslope_box";
+ this.bedslope_box.Size = new System.Drawing.Size(192, 35);
+ this.bedslope_box.TabIndex = 180;
+ this.bedslope_box.Text = "Bedslope (original method)";
+ this.bedslope_box.Visible = false;
+ this.bedslope_box.CheckedChanged += new System.EventHandler(this.bedslope_box_CheckedChanged);
+ //
+ // label47
+ //
+ this.label47.Location = new System.Drawing.Point(256, 53);
+ this.label47.Name = "label47";
+ this.label47.Size = new System.Drawing.Size(66, 23);
+ this.label47.TabIndex = 176;
+ this.label47.Text = "(caution !)";
+ this.label47.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // mintimestepbox
+ //
+ this.mintimestepbox.Location = new System.Drawing.Point(184, 53);
+ this.mintimestepbox.Name = "mintimestepbox";
+ this.mintimestepbox.Size = new System.Drawing.Size(64, 20);
+ this.mintimestepbox.TabIndex = 166;
+ this.mintimestepbox.Text = "1";
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(184, 118);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(64, 20);
+ this.textBox1.TabIndex = 164;
+ this.textBox1.Text = "0";
+ //
+ // smoothbox
+ //
+ this.smoothbox.Location = new System.Drawing.Point(163, 360);
+ this.smoothbox.Name = "smoothbox";
+ this.smoothbox.Size = new System.Drawing.Size(40, 20);
+ this.smoothbox.TabIndex = 160;
+ this.smoothbox.Text = "1";
+ this.smoothbox.Visible = false;
+ //
+ // cyclemaxbox
+ //
+ this.cyclemaxbox.Location = new System.Drawing.Point(184, 142);
+ this.cyclemaxbox.Name = "cyclemaxbox";
+ this.cyclemaxbox.Size = new System.Drawing.Size(64, 20);
+ this.cyclemaxbox.TabIndex = 155;
+ this.cyclemaxbox.Text = "1000";
+ //
+ // itermaxbox
+ //
+ this.itermaxbox.Location = new System.Drawing.Point(200, 318);
+ this.itermaxbox.Name = "itermaxbox";
+ this.itermaxbox.Size = new System.Drawing.Size(64, 20);
+ this.itermaxbox.TabIndex = 154;
+ this.itermaxbox.Text = "100000";
+ this.itermaxbox.Visible = false;
+ //
+ // limitbox
+ //
+ this.limitbox.Location = new System.Drawing.Point(184, 179);
+ this.limitbox.Name = "limitbox";
+ this.limitbox.Size = new System.Drawing.Size(40, 20);
+ this.limitbox.TabIndex = 144;
+ this.limitbox.Text = "1";
+ //
+ // label31
+ //
+ this.label31.Location = new System.Drawing.Point(56, 118);
+ this.label31.Name = "label31";
+ this.label31.Size = new System.Drawing.Size(120, 24);
+ this.label31.TabIndex = 165;
+ this.label31.Text = "run start time (h)";
+ this.label31.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label27
+ //
+ this.label27.Location = new System.Drawing.Point(64, 142);
+ this.label27.Name = "label27";
+ this.label27.Size = new System.Drawing.Size(112, 24);
+ this.label27.TabIndex = 157;
+ this.label27.Text = "max run duration (h)";
+ this.label27.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label26
+ //
+ this.label26.Location = new System.Drawing.Point(56, 318);
+ this.label26.Name = "label26";
+ this.label26.Size = new System.Drawing.Size(136, 24);
+ this.label26.TabIndex = 156;
+ this.label26.Text = "max # of iterations";
+ this.label26.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.label26.Visible = false;
+ //
+ // label10
+ //
+ this.label10.Location = new System.Drawing.Point(56, 175);
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size(120, 24);
+ this.label10.TabIndex = 152;
+ this.label10.Text = "memory limit";
+ this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label49
+ //
+ this.label49.Location = new System.Drawing.Point(40, 53);
+ this.label49.Name = "label49";
+ this.label49.Size = new System.Drawing.Size(136, 24);
+ this.label49.TabIndex = 167;
+ this.label49.Text = "Min time step (s)";
+ this.label49.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // GrainTab
+ //
+ this.GrainTab.Controls.Add(this.meyerbox);
+ this.GrainTab.Controls.Add(this.checkBox8);
+ this.GrainTab.Controls.Add(this.bedrock_erosion_threshold_box);
+ this.GrainTab.Controls.Add(this.bedrock_erosion_rate_box);
+ this.GrainTab.Controls.Add(this.label92);
+ this.GrainTab.Controls.Add(this.label93);
+ this.GrainTab.Controls.Add(this.label65);
+ this.GrainTab.Controls.Add(this.textBox7);
+ this.GrainTab.Controls.Add(this.label58);
+ this.GrainTab.Controls.Add(this.downstreamshiftbox);
+ this.GrainTab.Controls.Add(this.label55);
+ this.GrainTab.Controls.Add(this.max_vel_box);
+ this.GrainTab.Controls.Add(this.textBox3);
+ this.GrainTab.Controls.Add(this.label60);
+ this.GrainTab.Controls.Add(this.avge_smoothbox);
+ this.GrainTab.Controls.Add(this.nolateral);
+ this.GrainTab.Controls.Add(this.newlateral);
+ this.GrainTab.Controls.Add(this.label7);
+ this.GrainTab.Controls.Add(this.lateralratebox);
+ this.GrainTab.Controls.Add(this.label48);
+ this.GrainTab.Controls.Add(this.label54);
+ this.GrainTab.Controls.Add(this.propremaining);
+ this.GrainTab.Controls.Add(this.label50);
+ this.GrainTab.Controls.Add(this.activebox);
+ this.GrainTab.Controls.Add(this.erodefactorbox);
+ this.GrainTab.Controls.Add(this.label12);
+ this.GrainTab.Controls.Add(this.einsteinbox);
+ this.GrainTab.Controls.Add(this.wilcockbox);
+ this.GrainTab.Controls.Add(this.fallGS9box);
+ this.GrainTab.Controls.Add(this.fallGS8box);
+ this.GrainTab.Controls.Add(this.fallGS7box);
+ this.GrainTab.Controls.Add(this.fallGS6box);
+ this.GrainTab.Controls.Add(this.fallGS5box);
+ this.GrainTab.Controls.Add(this.fallGS4box);
+ this.GrainTab.Controls.Add(this.fallGS3box);
+ this.GrainTab.Controls.Add(this.gpSumLabel);
+ this.GrainTab.Controls.Add(this.gpSumLabel2);
+ this.GrainTab.Controls.Add(this.suspGS9box);
+ this.GrainTab.Controls.Add(this.suspGS8box);
+ this.GrainTab.Controls.Add(this.suspGS7box);
+ this.GrainTab.Controls.Add(this.suspGS6box);
+ this.GrainTab.Controls.Add(this.suspGS5box);
+ this.GrainTab.Controls.Add(this.suspGS4box);
+ this.GrainTab.Controls.Add(this.suspGS3box);
+ this.GrainTab.Controls.Add(this.suspGS2box);
+ this.GrainTab.Controls.Add(this.fallGS2box);
+ this.GrainTab.Controls.Add(this.fallGS1box);
+ this.GrainTab.Controls.Add(this.label28);
+ this.GrainTab.Controls.Add(this.label4);
+ this.GrainTab.Controls.Add(this.suspGS1box);
+ this.GrainTab.Controls.Add(this.gp3box);
+ this.GrainTab.Controls.Add(this.gp4box);
+ this.GrainTab.Controls.Add(this.gp5box);
+ this.GrainTab.Controls.Add(this.gp6box);
+ this.GrainTab.Controls.Add(this.gp7box);
+ this.GrainTab.Controls.Add(this.gp8box);
+ this.GrainTab.Controls.Add(this.gp9box);
+ this.GrainTab.Controls.Add(this.gp2box);
+ this.GrainTab.Controls.Add(this.gp1box);
+ this.GrainTab.Controls.Add(this.g3box);
+ this.GrainTab.Controls.Add(this.g4box);
+ this.GrainTab.Controls.Add(this.g5box);
+ this.GrainTab.Controls.Add(this.g6box);
+ this.GrainTab.Controls.Add(this.g7box);
+ this.GrainTab.Controls.Add(this.g8box);
+ this.GrainTab.Controls.Add(this.g9box);
+ this.GrainTab.Controls.Add(this.g2box);
+ this.GrainTab.Controls.Add(this.g1box);
+ this.GrainTab.Controls.Add(this.label22);
+ this.GrainTab.Controls.Add(this.label21);
+ this.GrainTab.Controls.Add(this.label20);
+ this.GrainTab.Controls.Add(this.label19);
+ this.GrainTab.Controls.Add(this.label18);
+ this.GrainTab.Controls.Add(this.label17);
+ this.GrainTab.Controls.Add(this.label16);
+ this.GrainTab.Controls.Add(this.label15);
+ this.GrainTab.Controls.Add(this.label14);
+ this.GrainTab.Controls.Add(this.label13);
+ this.GrainTab.Controls.Add(this.label6);
+ this.GrainTab.Location = new System.Drawing.Point(4, 22);
+ this.GrainTab.Name = "GrainTab";
+ this.GrainTab.Size = new System.Drawing.Size(1323, 487);
+ this.GrainTab.TabIndex = 3;
+ this.GrainTab.Text = "Sediment";
+ this.GrainTab.UseVisualStyleBackColor = true;
+ //
+ // meyerbox
+ //
+ this.meyerbox.AutoSize = true;
+ this.meyerbox.Location = new System.Drawing.Point(605, 71);
+ this.meyerbox.Name = "meyerbox";
+ this.meyerbox.Size = new System.Drawing.Size(114, 17);
+ this.meyerbox.TabIndex = 107;
+ this.meyerbox.Text = "Meyer Peter Muller";
+ this.meyerbox.UseVisualStyleBackColor = true;
+ this.meyerbox.CheckedChanged += new System.EventHandler(this.meyerbox_CheckedChanged);
+ //
+ // checkBox8
+ //
+ this.checkBox8.Checked = true;
+ this.checkBox8.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.checkBox8.Location = new System.Drawing.Point(27, 322);
+ this.checkBox8.Name = "checkBox8";
+ this.checkBox8.Size = new System.Drawing.Size(169, 28);
+ this.checkBox8.TabIndex = 218;
+ this.checkBox8.Text = "All 9 grainsizes?";
+ //
+ // bedrock_erosion_threshold_box
+ //
+ this.bedrock_erosion_threshold_box.Location = new System.Drawing.Point(27, 362);
+ this.bedrock_erosion_threshold_box.Name = "bedrock_erosion_threshold_box";
+ this.bedrock_erosion_threshold_box.Size = new System.Drawing.Size(100, 20);
+ this.bedrock_erosion_threshold_box.TabIndex = 214;
+ this.bedrock_erosion_threshold_box.Text = "0";
+ //
+ // bedrock_erosion_rate_box
+ //
+ this.bedrock_erosion_rate_box.Location = new System.Drawing.Point(27, 395);
+ this.bedrock_erosion_rate_box.Name = "bedrock_erosion_rate_box";
+ this.bedrock_erosion_rate_box.Size = new System.Drawing.Size(100, 20);
+ this.bedrock_erosion_rate_box.TabIndex = 215;
+ this.bedrock_erosion_rate_box.Text = "0";
+ //
+ // label92
+ //
+ this.label92.Location = new System.Drawing.Point(133, 358);
+ this.label92.Name = "label92";
+ this.label92.Size = new System.Drawing.Size(167, 33);
+ this.label92.TabIndex = 217;
+ this.label92.Text = "Bedrock erosion threshold (Pa)";
+ this.label92.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label93
+ //
+ this.label93.Location = new System.Drawing.Point(138, 393);
+ this.label93.Name = "label93";
+ this.label93.Size = new System.Drawing.Size(162, 24);
+ this.label93.TabIndex = 216;
+ this.label93.Text = "Bedrock erosion rate (m/Pa/Yr)";
+ this.label93.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label65
+ //
+ this.label65.Location = new System.Drawing.Point(686, 415);
+ this.label65.Name = "label65";
+ this.label65.Size = new System.Drawing.Size(131, 27);
+ this.label65.TabIndex = 213;
+ this.label65.Text = "Max difference allowed in cross channel smoothing";
+ //
+ // textBox7
+ //
+ this.textBox7.Location = new System.Drawing.Point(605, 415);
+ this.textBox7.Name = "textBox7";
+ this.textBox7.Size = new System.Drawing.Size(73, 20);
+ this.textBox7.TabIndex = 212;
+ this.textBox7.Text = "0.0001";
+ //
+ // label58
+ //
+ this.label58.Location = new System.Drawing.Point(686, 384);
+ this.label58.Name = "label58";
+ this.label58.Size = new System.Drawing.Size(131, 27);
+ this.label58.TabIndex = 211;
+ this.label58.Text = "Number of cells to shift lat erosion downstream";
+ //
+ // downstreamshiftbox
+ //
+ this.downstreamshiftbox.Location = new System.Drawing.Point(605, 384);
+ this.downstreamshiftbox.Name = "downstreamshiftbox";
+ this.downstreamshiftbox.Size = new System.Drawing.Size(73, 20);
+ this.downstreamshiftbox.TabIndex = 210;
+ this.downstreamshiftbox.Text = "5";
+ //
+ // label55
+ //
+ this.label55.Location = new System.Drawing.Point(683, 103);
+ this.label55.Name = "label55";
+ this.label55.Size = new System.Drawing.Size(195, 27);
+ this.label55.TabIndex = 209;
+ this.label55.Text = "Max velocity used to calc Tau from vel.";
+ //
+ // max_vel_box
+ //
+ this.max_vel_box.Location = new System.Drawing.Point(603, 104);
+ this.max_vel_box.Name = "max_vel_box";
+ this.max_vel_box.Size = new System.Drawing.Size(40, 20);
+ this.max_vel_box.TabIndex = 208;
+ this.max_vel_box.Text = "5";
+ //
+ // textBox3
+ //
+ this.textBox3.Location = new System.Drawing.Point(604, 324);
+ this.textBox3.Name = "textBox3";
+ this.textBox3.Size = new System.Drawing.Size(40, 20);
+ this.textBox3.TabIndex = 202;
+ this.textBox3.Text = "0";
+ //
+ // label60
+ //
+ this.label60.Location = new System.Drawing.Point(683, 350);
+ this.label60.Name = "label60";
+ this.label60.Size = new System.Drawing.Size(131, 27);
+ this.label60.TabIndex = 201;
+ this.label60.Text = "Number of passes for edge smoothing filter";
+ //
+ // avge_smoothbox
+ //
+ this.avge_smoothbox.Location = new System.Drawing.Point(604, 353);
+ this.avge_smoothbox.Name = "avge_smoothbox";
+ this.avge_smoothbox.Size = new System.Drawing.Size(73, 20);
+ this.avge_smoothbox.TabIndex = 200;
+ this.avge_smoothbox.Text = "100";
+ //
+ // nolateral
+ //
+ this.nolateral.Checked = true;
+ this.nolateral.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.nolateral.Location = new System.Drawing.Point(386, 334);
+ this.nolateral.Name = "nolateral";
+ this.nolateral.Size = new System.Drawing.Size(121, 28);
+ this.nolateral.TabIndex = 199;
+ this.nolateral.Text = "No Lateral erosion";
+ this.nolateral.Visible = false;
+ //
+ // newlateral
+ //
+ this.newlateral.Location = new System.Drawing.Point(606, 290);
+ this.newlateral.Name = "newlateral";
+ this.newlateral.Size = new System.Drawing.Size(106, 28);
+ this.newlateral.TabIndex = 198;
+ this.newlateral.Text = "Lateral Erosion";
+ //
+ // label7
+ //
+ this.label7.Location = new System.Drawing.Point(671, 323);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(95, 24);
+ this.label7.TabIndex = 197;
+ this.label7.Text = "Lat erosion rate";
+ this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label7, "Lateral erosion constant that is applied to method 1 (old laterla) and method 2 (" +
+ "new lateral)");
+ //
+ // lateralratebox
+ //
+ this.lateralratebox.Location = new System.Drawing.Point(603, 256);
+ this.lateralratebox.Name = "lateralratebox";
+ this.lateralratebox.Size = new System.Drawing.Size(64, 20);
+ this.lateralratebox.TabIndex = 196;
+ this.lateralratebox.Text = "20";
+ //
+ // label48
+ //
+ this.label48.Location = new System.Drawing.Point(683, 253);
+ this.label48.Name = "label48";
+ this.label48.Size = new System.Drawing.Size(152, 24);
+ this.label48.TabIndex = 195;
+ this.label48.Text = "in channel lateral erosion rate";
+ this.label48.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // label54
+ //
+ this.label54.Location = new System.Drawing.Point(683, 214);
+ this.label54.Name = "label54";
+ this.label54.Size = new System.Drawing.Size(195, 27);
+ this.label54.TabIndex = 193;
+ this.label54.Text = "Proportion re-circulated if recirculate box is checked";
+ //
+ // propremaining
+ //
+ this.propremaining.Location = new System.Drawing.Point(603, 217);
+ this.propremaining.Name = "propremaining";
+ this.propremaining.Size = new System.Drawing.Size(64, 20);
+ this.propremaining.TabIndex = 192;
+ this.propremaining.Text = "1.0";
+ //
+ // label50
+ //
+ this.label50.Location = new System.Drawing.Point(678, 154);
+ this.label50.Name = "label50";
+ this.label50.Size = new System.Drawing.Size(172, 48);
+ this.label50.TabIndex = 173;
+ this.label50.Text = "Active layer thickness (m) must be at least 4 times max erode limit";
+ this.label50.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // activebox
+ //
+ this.activebox.Location = new System.Drawing.Point(603, 160);
+ this.activebox.Name = "activebox";
+ this.activebox.Size = new System.Drawing.Size(64, 20);
+ this.activebox.TabIndex = 172;
+ this.activebox.Text = "0.1";
+ //
+ // erodefactorbox
+ //
+ this.erodefactorbox.Location = new System.Drawing.Point(603, 133);
+ this.erodefactorbox.Name = "erodefactorbox";
+ this.erodefactorbox.Size = new System.Drawing.Size(40, 20);
+ this.erodefactorbox.TabIndex = 170;
+ this.erodefactorbox.Text = "0.02";
+ //
+ // label12
+ //
+ this.label12.Location = new System.Drawing.Point(673, 130);
+ this.label12.Name = "label12";
+ this.label12.Size = new System.Drawing.Size(87, 24);
+ this.label12.TabIndex = 171;
+ this.label12.Text = "Max erode limit";
+ this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // einsteinbox
+ //
+ this.einsteinbox.AutoSize = true;
+ this.einsteinbox.Location = new System.Drawing.Point(605, 51);
+ this.einsteinbox.Name = "einsteinbox";
+ this.einsteinbox.Size = new System.Drawing.Size(63, 17);
+ this.einsteinbox.TabIndex = 107;
+ this.einsteinbox.Text = "Einstein";
+ this.einsteinbox.UseVisualStyleBackColor = true;
+ this.einsteinbox.CheckedChanged += new System.EventHandler(this.einsteinbox_CheckedChanged);
+ //
+ // wilcockbox
+ //
+ this.wilcockbox.AutoSize = true;
+ this.wilcockbox.Checked = true;
+ this.wilcockbox.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.wilcockbox.Location = new System.Drawing.Point(604, 32);
+ this.wilcockbox.Name = "wilcockbox";
+ this.wilcockbox.Size = new System.Drawing.Size(119, 17);
+ this.wilcockbox.TabIndex = 106;
+ this.wilcockbox.Text = "Wilcock and Crowe";
+ this.wilcockbox.UseVisualStyleBackColor = true;
+ this.wilcockbox.CheckedChanged += new System.EventHandler(this.wilcockbox_CheckedChanged);
+ //
+ // fallGS9box
+ //
+ this.fallGS9box.Enabled = false;
+ this.fallGS9box.Location = new System.Drawing.Point(416, 378);
+ this.fallGS9box.Name = "fallGS9box";
+ this.fallGS9box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS9box.TabIndex = 90;
+ this.fallGS9box.Text = "1.357";
+ this.fallGS9box.Visible = false;
+ //
+ // fallGS8box
+ //
+ this.fallGS8box.Enabled = false;
+ this.fallGS8box.Location = new System.Drawing.Point(376, 378);
+ this.fallGS8box.Name = "fallGS8box";
+ this.fallGS8box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS8box.TabIndex = 89;
+ this.fallGS8box.Text = "0.959";
+ this.fallGS8box.Visible = false;
+ //
+ // fallGS7box
+ //
+ this.fallGS7box.Enabled = false;
+ this.fallGS7box.Location = new System.Drawing.Point(424, 343);
+ this.fallGS7box.Name = "fallGS7box";
+ this.fallGS7box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS7box.TabIndex = 88;
+ this.fallGS7box.Text = "0.678";
+ this.fallGS7box.Visible = false;
+ //
+ // fallGS6box
+ //
+ this.fallGS6box.Enabled = false;
+ this.fallGS6box.Location = new System.Drawing.Point(386, 364);
+ this.fallGS6box.Name = "fallGS6box";
+ this.fallGS6box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS6box.TabIndex = 87;
+ this.fallGS6box.Text = "0.479";
+ this.fallGS6box.Visible = false;
+ //
+ // fallGS5box
+ //
+ this.fallGS5box.Enabled = false;
+ this.fallGS5box.Location = new System.Drawing.Point(386, 364);
+ this.fallGS5box.Name = "fallGS5box";
+ this.fallGS5box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS5box.TabIndex = 86;
+ this.fallGS5box.Text = "0.338";
+ this.fallGS5box.Visible = false;
+ //
+ // fallGS4box
+ //
+ this.fallGS4box.Enabled = false;
+ this.fallGS4box.Location = new System.Drawing.Point(393, 368);
+ this.fallGS4box.Name = "fallGS4box";
+ this.fallGS4box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS4box.TabIndex = 85;
+ this.fallGS4box.Text = "0.237";
+ this.fallGS4box.Visible = false;
+ //
+ // fallGS3box
+ //
+ this.fallGS3box.Enabled = false;
+ this.fallGS3box.Location = new System.Drawing.Point(386, 364);
+ this.fallGS3box.Name = "fallGS3box";
+ this.fallGS3box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS3box.TabIndex = 84;
+ this.fallGS3box.Text = "0.164";
+ this.fallGS3box.Visible = false;
+ //
+ // gpSumLabel
+ //
+ this.gpSumLabel.Location = new System.Drawing.Point(229, 343);
+ this.gpSumLabel.Name = "gpSumLabel";
+ this.gpSumLabel.Size = new System.Drawing.Size(96, 16);
+ this.gpSumLabel.TabIndex = 105;
+ this.gpSumLabel.Text = "OK";
+ this.gpSumLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // gpSumLabel2
+ //
+ this.gpSumLabel2.ForeColor = System.Drawing.SystemColors.ControlText;
+ this.gpSumLabel2.Location = new System.Drawing.Point(229, 319);
+ this.gpSumLabel2.Name = "gpSumLabel2";
+ this.gpSumLabel2.Size = new System.Drawing.Size(112, 16);
+ this.gpSumLabel2.TabIndex = 104;
+ this.gpSumLabel2.Text = "sum must equal 1.0";
+ this.gpSumLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // suspGS9box
+ //
+ this.suspGS9box.Location = new System.Drawing.Point(401, 374);
+ this.suspGS9box.Name = "suspGS9box";
+ this.suspGS9box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS9box.TabIndex = 81;
+ this.suspGS9box.Visible = false;
+ this.suspGS9box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS8box
+ //
+ this.suspGS8box.Location = new System.Drawing.Point(394, 368);
+ this.suspGS8box.Name = "suspGS8box";
+ this.suspGS8box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS8box.TabIndex = 80;
+ this.suspGS8box.Visible = false;
+ this.suspGS8box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS7box
+ //
+ this.suspGS7box.Location = new System.Drawing.Point(394, 368);
+ this.suspGS7box.Name = "suspGS7box";
+ this.suspGS7box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS7box.TabIndex = 79;
+ this.suspGS7box.Visible = false;
+ this.suspGS7box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS6box
+ //
+ this.suspGS6box.Location = new System.Drawing.Point(401, 372);
+ this.suspGS6box.Name = "suspGS6box";
+ this.suspGS6box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS6box.TabIndex = 78;
+ this.suspGS6box.Visible = false;
+ this.suspGS6box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS5box
+ //
+ this.suspGS5box.Location = new System.Drawing.Point(416, 372);
+ this.suspGS5box.Name = "suspGS5box";
+ this.suspGS5box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS5box.TabIndex = 77;
+ this.suspGS5box.Visible = false;
+ this.suspGS5box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS4box
+ //
+ this.suspGS4box.Location = new System.Drawing.Point(399, 368);
+ this.suspGS4box.Name = "suspGS4box";
+ this.suspGS4box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS4box.TabIndex = 76;
+ this.suspGS4box.Visible = false;
+ this.suspGS4box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS3box
+ //
+ this.suspGS3box.Location = new System.Drawing.Point(423, 368);
+ this.suspGS3box.Name = "suspGS3box";
+ this.suspGS3box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS3box.TabIndex = 75;
+ this.suspGS3box.Visible = false;
+ this.suspGS3box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // suspGS2box
+ //
+ this.suspGS2box.Location = new System.Drawing.Point(416, 371);
+ this.suspGS2box.Name = "suspGS2box";
+ this.suspGS2box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS2box.TabIndex = 74;
+ this.suspGS2box.Visible = false;
+ this.suspGS2box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // fallGS2box
+ //
+ this.fallGS2box.Location = new System.Drawing.Point(386, 364);
+ this.fallGS2box.Name = "fallGS2box";
+ this.fallGS2box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS2box.TabIndex = 83;
+ this.fallGS2box.Text = "0.109";
+ this.fallGS2box.Visible = false;
+ //
+ // fallGS1box
+ //
+ this.fallGS1box.Location = new System.Drawing.Point(424, 40);
+ this.fallGS1box.Name = "fallGS1box";
+ this.fallGS1box.Size = new System.Drawing.Size(100, 20);
+ this.fallGS1box.TabIndex = 82;
+ this.fallGS1box.Text = "0.066";
+ //
+ // label28
+ //
+ this.label28.Location = new System.Drawing.Point(432, 16);
+ this.label28.Name = "label28";
+ this.label28.Size = new System.Drawing.Size(88, 16);
+ this.label28.TabIndex = 95;
+ this.label28.Text = "fall velocity (m/s)";
+ this.label28.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label4
+ //
+ this.label4.Location = new System.Drawing.Point(336, 16);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(96, 16);
+ this.label4.TabIndex = 85;
+ this.label4.Text = "suspended ?";
+ this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // suspGS1box
+ //
+ this.suspGS1box.Location = new System.Drawing.Point(376, 40);
+ this.suspGS1box.Name = "suspGS1box";
+ this.suspGS1box.Size = new System.Drawing.Size(16, 24);
+ this.suspGS1box.TabIndex = 73;
+ this.suspGS1box.CheckedChanged += new System.EventHandler(this.suspCheckedChange);
+ //
+ // gp3box
+ //
+ this.gp3box.Location = new System.Drawing.Point(232, 104);
+ this.gp3box.Name = "gp3box";
+ this.gp3box.Size = new System.Drawing.Size(100, 20);
+ this.gp3box.TabIndex = 66;
+ this.gp3box.Text = "0.019";
+ this.gp3box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp4box
+ //
+ this.gp4box.Location = new System.Drawing.Point(232, 136);
+ this.gp4box.Name = "gp4box";
+ this.gp4box.Size = new System.Drawing.Size(100, 20);
+ this.gp4box.TabIndex = 67;
+ this.gp4box.Text = "0.029";
+ this.gp4box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp5box
+ //
+ this.gp5box.Location = new System.Drawing.Point(232, 168);
+ this.gp5box.Name = "gp5box";
+ this.gp5box.Size = new System.Drawing.Size(100, 20);
+ this.gp5box.TabIndex = 68;
+ this.gp5box.Text = "0.068";
+ this.gp5box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp6box
+ //
+ this.gp6box.Location = new System.Drawing.Point(232, 200);
+ this.gp6box.Name = "gp6box";
+ this.gp6box.Size = new System.Drawing.Size(100, 20);
+ this.gp6box.TabIndex = 69;
+ this.gp6box.Text = "0.146";
+ this.gp6box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp7box
+ //
+ this.gp7box.Location = new System.Drawing.Point(232, 232);
+ this.gp7box.Name = "gp7box";
+ this.gp7box.Size = new System.Drawing.Size(100, 20);
+ this.gp7box.TabIndex = 70;
+ this.gp7box.Text = "0.220";
+ this.gp7box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp8box
+ //
+ this.gp8box.Location = new System.Drawing.Point(232, 264);
+ this.gp8box.Name = "gp8box";
+ this.gp8box.Size = new System.Drawing.Size(100, 20);
+ this.gp8box.TabIndex = 71;
+ this.gp8box.Text = "0.231";
+ this.gp8box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp9box
+ //
+ this.gp9box.Location = new System.Drawing.Point(232, 296);
+ this.gp9box.Name = "gp9box";
+ this.gp9box.Size = new System.Drawing.Size(100, 20);
+ this.gp9box.TabIndex = 72;
+ this.gp9box.Text = "0.121";
+ this.gp9box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp2box
+ //
+ this.gp2box.Location = new System.Drawing.Point(232, 72);
+ this.gp2box.Name = "gp2box";
+ this.gp2box.Size = new System.Drawing.Size(100, 20);
+ this.gp2box.TabIndex = 65;
+ this.gp2box.Text = "0.022";
+ this.gp2box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // gp1box
+ //
+ this.gp1box.Location = new System.Drawing.Point(232, 40);
+ this.gp1box.Name = "gp1box";
+ this.gp1box.Size = new System.Drawing.Size(100, 20);
+ this.gp1box.TabIndex = 64;
+ this.gp1box.Text = "0.144";
+ this.gp1box.TextChanged += new System.EventHandler(this.fracGSchanged);
+ //
+ // g3box
+ //
+ this.g3box.Location = new System.Drawing.Point(96, 104);
+ this.g3box.Name = "g3box";
+ this.g3box.Size = new System.Drawing.Size(100, 20);
+ this.g3box.TabIndex = 57;
+ this.g3box.Text = "0.002";
+ //
+ // g4box
+ //
+ this.g4box.Location = new System.Drawing.Point(96, 136);
+ this.g4box.Name = "g4box";
+ this.g4box.Size = new System.Drawing.Size(100, 20);
+ this.g4box.TabIndex = 58;
+ this.g4box.Text = "0.004";
+ //
+ // g5box
+ //
+ this.g5box.Location = new System.Drawing.Point(96, 168);
+ this.g5box.Name = "g5box";
+ this.g5box.Size = new System.Drawing.Size(100, 20);
+ this.g5box.TabIndex = 59;
+ this.g5box.Text = "0.008";
+ //
+ // g6box
+ //
+ this.g6box.Location = new System.Drawing.Point(96, 200);
+ this.g6box.Name = "g6box";
+ this.g6box.Size = new System.Drawing.Size(100, 20);
+ this.g6box.TabIndex = 60;
+ this.g6box.Text = "0.016";
+ //
+ // g7box
+ //
+ this.g7box.Location = new System.Drawing.Point(96, 232);
+ this.g7box.Name = "g7box";
+ this.g7box.Size = new System.Drawing.Size(100, 20);
+ this.g7box.TabIndex = 61;
+ this.g7box.Text = "0.032";
+ //
+ // g8box
+ //
+ this.g8box.Location = new System.Drawing.Point(96, 264);
+ this.g8box.Name = "g8box";
+ this.g8box.Size = new System.Drawing.Size(100, 20);
+ this.g8box.TabIndex = 62;
+ this.g8box.Text = "0.064";
+ //
+ // g9box
+ //
+ this.g9box.Location = new System.Drawing.Point(96, 296);
+ this.g9box.Name = "g9box";
+ this.g9box.Size = new System.Drawing.Size(100, 20);
+ this.g9box.TabIndex = 63;
+ this.g9box.Text = "0.128";
+ //
+ // g2box
+ //
+ this.g2box.Location = new System.Drawing.Point(96, 72);
+ this.g2box.Name = "g2box";
+ this.g2box.Size = new System.Drawing.Size(100, 20);
+ this.g2box.TabIndex = 56;
+ this.g2box.Text = "0.001";
+ //
+ // g1box
+ //
+ this.g1box.Location = new System.Drawing.Point(96, 40);
+ this.g1box.Name = "g1box";
+ this.g1box.Size = new System.Drawing.Size(100, 20);
+ this.g1box.TabIndex = 55;
+ this.g1box.Text = "0.0005";
+ //
+ // label22
+ //
+ this.label22.Location = new System.Drawing.Point(232, 16);
+ this.label22.Name = "label22";
+ this.label22.Size = new System.Drawing.Size(96, 16);
+ this.label22.TabIndex = 83;
+ this.label22.Text = "proportion";
+ this.label22.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label21
+ //
+ this.label21.Location = new System.Drawing.Point(96, 16);
+ this.label21.Name = "label21";
+ this.label21.Size = new System.Drawing.Size(96, 16);
+ this.label21.TabIndex = 82;
+ this.label21.Text = "grain size (m)";
+ this.label21.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label20
+ //
+ this.label20.Location = new System.Drawing.Point(24, 72);
+ this.label20.Name = "label20";
+ this.label20.Size = new System.Drawing.Size(40, 24);
+ this.label20.TabIndex = 81;
+ this.label20.Text = "size2";
+ this.label20.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label19
+ //
+ this.label19.Location = new System.Drawing.Point(24, 104);
+ this.label19.Name = "label19";
+ this.label19.Size = new System.Drawing.Size(40, 24);
+ this.label19.TabIndex = 80;
+ this.label19.Text = "size3";
+ this.label19.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label18
+ //
+ this.label18.Location = new System.Drawing.Point(24, 136);
+ this.label18.Name = "label18";
+ this.label18.Size = new System.Drawing.Size(40, 24);
+ this.label18.TabIndex = 79;
+ this.label18.Text = "size4";
+ this.label18.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label17
+ //
+ this.label17.Location = new System.Drawing.Point(24, 168);
+ this.label17.Name = "label17";
+ this.label17.Size = new System.Drawing.Size(40, 24);
+ this.label17.TabIndex = 78;
+ this.label17.Text = "size5";
+ this.label17.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label16
+ //
+ this.label16.Location = new System.Drawing.Point(24, 200);
+ this.label16.Name = "label16";
+ this.label16.Size = new System.Drawing.Size(40, 24);
+ this.label16.TabIndex = 77;
+ this.label16.Text = "size6";
+ this.label16.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label15
+ //
+ this.label15.Location = new System.Drawing.Point(24, 232);
+ this.label15.Name = "label15";
+ this.label15.Size = new System.Drawing.Size(40, 24);
+ this.label15.TabIndex = 76;
+ this.label15.Text = "size7";
+ this.label15.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label14
+ //
+ this.label14.Location = new System.Drawing.Point(24, 264);
+ this.label14.Name = "label14";
+ this.label14.Size = new System.Drawing.Size(40, 24);
+ this.label14.TabIndex = 75;
+ this.label14.Text = "size8";
+ this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label13
+ //
+ this.label13.Location = new System.Drawing.Point(24, 296);
+ this.label13.Name = "label13";
+ this.label13.Size = new System.Drawing.Size(40, 24);
+ this.label13.TabIndex = 74;
+ this.label13.Text = "size9";
+ this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label6
+ //
+ this.label6.Location = new System.Drawing.Point(24, 40);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(40, 24);
+ this.label6.TabIndex = 73;
+ this.label6.Text = "size1";
+ this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // DescriptionTab
+ //
+ this.DescriptionTab.Controls.Add(this.DescBox);
+ this.DescriptionTab.Location = new System.Drawing.Point(4, 22);
+ this.DescriptionTab.Name = "DescriptionTab";
+ this.DescriptionTab.Size = new System.Drawing.Size(1323, 487);
+ this.DescriptionTab.TabIndex = 5;
+ this.DescriptionTab.Text = "Description";
+ this.DescriptionTab.UseVisualStyleBackColor = true;
+ //
+ // DescBox
+ //
+ this.DescBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.DescBox.Location = new System.Drawing.Point(16, 16);
+ this.DescBox.Multiline = true;
+ this.DescBox.Name = "DescBox";
+ this.DescBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.DescBox.Size = new System.Drawing.Size(1126, 664);
+ this.DescBox.TabIndex = 132;
+ //
+ // GridTab
+ //
+ this.GridTab.Controls.Add(this.overrideheaderBox);
+ this.GridTab.Controls.Add(this.dxbox);
+ this.GridTab.Controls.Add(this.label11);
+ this.GridTab.Controls.Add(this.ytextbox);
+ this.GridTab.Controls.Add(this.xtextbox);
+ this.GridTab.Controls.Add(this.label2);
+ this.GridTab.Controls.Add(this.label1);
+ this.GridTab.Location = new System.Drawing.Point(4, 22);
+ this.GridTab.Name = "GridTab";
+ this.GridTab.Size = new System.Drawing.Size(1323, 487);
+ this.GridTab.TabIndex = 1;
+ this.GridTab.Text = "Grid";
+ this.GridTab.UseVisualStyleBackColor = true;
+ //
+ // overrideheaderBox
+ //
+ this.overrideheaderBox.Location = new System.Drawing.Point(16, 16);
+ this.overrideheaderBox.Name = "overrideheaderBox";
+ this.overrideheaderBox.Size = new System.Drawing.Size(200, 24);
+ this.overrideheaderBox.TabIndex = 27;
+ this.overrideheaderBox.Text = "override header file";
+ this.overrideheaderBox.CheckedChanged += new System.EventHandler(this.overrideheaderBox_CheckedChanged);
+ //
+ // dxbox
+ //
+ this.dxbox.Enabled = false;
+ this.dxbox.Location = new System.Drawing.Point(120, 88);
+ this.dxbox.Name = "dxbox";
+ this.dxbox.Size = new System.Drawing.Size(40, 20);
+ this.dxbox.TabIndex = 25;
+ this.dxbox.Text = "5";
+ //
+ // label11
+ //
+ this.label11.Enabled = false;
+ this.label11.Location = new System.Drawing.Point(16, 88);
+ this.label11.Name = "label11";
+ this.label11.Size = new System.Drawing.Size(96, 24);
+ this.label11.TabIndex = 26;
+ this.label11.Text = "Cell size";
+ this.label11.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // ytextbox
+ //
+ this.ytextbox.Enabled = false;
+ this.ytextbox.Location = new System.Drawing.Point(120, 64);
+ this.ytextbox.Name = "ytextbox";
+ this.ytextbox.Size = new System.Drawing.Size(56, 20);
+ this.ytextbox.TabIndex = 5;
+ this.ytextbox.Text = "358";
+ //
+ // xtextbox
+ //
+ this.xtextbox.Enabled = false;
+ this.xtextbox.Location = new System.Drawing.Point(120, 40);
+ this.xtextbox.Name = "xtextbox";
+ this.xtextbox.Size = new System.Drawing.Size(56, 20);
+ this.xtextbox.TabIndex = 4;
+ this.xtextbox.Text = "593";
+ //
+ // label2
+ //
+ this.label2.Enabled = false;
+ this.label2.Location = new System.Drawing.Point(16, 64);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(96, 24);
+ this.label2.TabIndex = 7;
+ this.label2.Text = "Y coordinates";
+ this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label1
+ //
+ this.label1.Enabled = false;
+ this.label1.Location = new System.Drawing.Point(24, 40);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(88, 24);
+ this.label1.TabIndex = 6;
+ this.label1.Text = "X coordinates";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // HydrologyTab
+ //
+ this.HydrologyTab.Controls.Add(this.groupBox7);
+ this.HydrologyTab.Controls.Add(this.groupBox5);
+ this.HydrologyTab.Controls.Add(this.groupBox1);
+ this.HydrologyTab.Location = new System.Drawing.Point(4, 22);
+ this.HydrologyTab.Name = "HydrologyTab";
+ this.HydrologyTab.Size = new System.Drawing.Size(1323, 487);
+ this.HydrologyTab.TabIndex = 4;
+ this.HydrologyTab.Text = "Hydrology";
+ this.HydrologyTab.UseVisualStyleBackColor = true;
+ this.HydrologyTab.Click += new System.EventHandler(this.HydrologyTab_Click);
+ //
+ // groupBox7
+ //
+ this.groupBox7.Controls.Add(this.label105);
+ this.groupBox7.Controls.Add(this.mfiletimestepbox);
+ this.groupBox7.Controls.Add(this.hydroindexBox);
+ this.groupBox7.Controls.Add(this.label103);
+ this.groupBox7.Controls.Add(this.label37);
+ this.groupBox7.Controls.Add(this.mvaluebox);
+ this.groupBox7.Controls.Add(this.label102);
+ this.groupBox7.Controls.Add(this.rfnumBox);
+ this.groupBox7.Controls.Add(this.checkBox7);
+ this.groupBox7.Controls.Add(this.label35);
+ this.groupBox7.Controls.Add(this.raintimestepbox);
+ this.groupBox7.Controls.Add(this.jmeaninputfilebox);
+ this.groupBox7.Controls.Add(this.label59);
+ this.groupBox7.Controls.Add(this.mvalueloadbox);
+ this.groupBox7.Controls.Add(this.raindataloadbox);
+ this.groupBox7.Controls.Add(this.label25);
+ this.groupBox7.Location = new System.Drawing.Point(526, 17);
+ this.groupBox7.Name = "groupBox7";
+ this.groupBox7.Size = new System.Drawing.Size(467, 281);
+ this.groupBox7.TabIndex = 222;
+ this.groupBox7.TabStop = false;
+ this.groupBox7.Text = "Rainfall input variables";
+ //
+ // label105
+ //
+ this.label105.Location = new System.Drawing.Point(288, 113);
+ this.label105.Name = "label105";
+ this.label105.Size = new System.Drawing.Size(104, 39);
+ this.label105.TabIndex = 235;
+ this.label105.Text = "Time varying M file time step (min)";
+ this.label105.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // mfiletimestepbox
+ //
+ this.mfiletimestepbox.Location = new System.Drawing.Point(398, 120);
+ this.mfiletimestepbox.Name = "mfiletimestepbox";
+ this.mfiletimestepbox.Size = new System.Drawing.Size(56, 20);
+ this.mfiletimestepbox.TabIndex = 234;
+ this.mfiletimestepbox.Text = "1440";
+ //
+ // hydroindexBox
+ //
+ this.hydroindexBox.Location = new System.Drawing.Point(152, 227);
+ this.hydroindexBox.Name = "hydroindexBox";
+ this.hydroindexBox.Size = new System.Drawing.Size(118, 20);
+ this.hydroindexBox.TabIndex = 233;
+ this.hydroindexBox.Text = "null";
+ this.hydroindexBox.Visible = false;
+ //
+ // label103
+ //
+ this.label103.AutoSize = true;
+ this.label103.Location = new System.Drawing.Point(40, 230);
+ this.label103.Name = "label103";
+ this.label103.Size = new System.Drawing.Size(74, 13);
+ this.label103.TabIndex = 232;
+ this.label103.Text = "hydroindex file";
+ this.label103.Visible = false;
+ //
+ // label37
+ //
+ this.label37.Location = new System.Drawing.Point(16, 81);
+ this.label37.Name = "label37";
+ this.label37.Size = new System.Drawing.Size(128, 24);
+ this.label37.TabIndex = 200;
+ this.label37.Text = "\'m\' value";
+ this.label37.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // mvaluebox
+ //
+ this.mvaluebox.Location = new System.Drawing.Point(153, 85);
+ this.mvaluebox.Name = "mvaluebox";
+ this.mvaluebox.Size = new System.Drawing.Size(40, 20);
+ this.mvaluebox.TabIndex = 199;
+ this.mvaluebox.Text = "0.01";
+ //
+ // label102
+ //
+ this.label102.AutoSize = true;
+ this.label102.Location = new System.Drawing.Point(40, 202);
+ this.label102.Name = "label102";
+ this.label102.Size = new System.Drawing.Size(98, 13);
+ this.label102.TabIndex = 231;
+ this.label102.Text = "number of rain cells";
+ this.label102.Visible = false;
+ //
+ // rfnumBox
+ //
+ this.rfnumBox.Location = new System.Drawing.Point(152, 199);
+ this.rfnumBox.Name = "rfnumBox";
+ this.rfnumBox.Size = new System.Drawing.Size(56, 20);
+ this.rfnumBox.TabIndex = 230;
+ this.rfnumBox.Text = "1";
+ this.rfnumBox.Visible = false;
+ //
+ // checkBox7
+ //
+ this.checkBox7.AutoSize = true;
+ this.checkBox7.Location = new System.Drawing.Point(43, 177);
+ this.checkBox7.Name = "checkBox7";
+ this.checkBox7.Size = new System.Drawing.Size(297, 17);
+ this.checkBox7.TabIndex = 229;
+ this.checkBox7.Text = "Spatially variable rainfall and M value (if M value file used)";
+ this.checkBox7.UseVisualStyleBackColor = true;
+ this.checkBox7.CheckedChanged += new System.EventHandler(this.checkBox7_CheckedChanged);
+ //
+ // label35
+ //
+ this.label35.Location = new System.Drawing.Point(40, 47);
+ this.label35.Name = "label35";
+ this.label35.Size = new System.Drawing.Size(104, 39);
+ this.label35.TabIndex = 228;
+ this.label35.Text = "Rainfall data file time step (min)";
+ this.label35.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // raintimestepbox
+ //
+ this.raintimestepbox.Location = new System.Drawing.Point(153, 51);
+ this.raintimestepbox.Name = "raintimestepbox";
+ this.raintimestepbox.Size = new System.Drawing.Size(56, 20);
+ this.raintimestepbox.TabIndex = 227;
+ this.raintimestepbox.Text = "60";
+ //
+ // jmeaninputfilebox
+ //
+ this.jmeaninputfilebox.AutoSize = true;
+ this.jmeaninputfilebox.Location = new System.Drawing.Point(43, 151);
+ this.jmeaninputfilebox.Name = "jmeaninputfilebox";
+ this.jmeaninputfilebox.Size = new System.Drawing.Size(263, 17);
+ this.jmeaninputfilebox.TabIndex = 226;
+ this.jmeaninputfilebox.Text = "if checked, discharge is read direct from rainfall file";
+ this.jmeaninputfilebox.UseVisualStyleBackColor = true;
+ //
+ // label59
+ //
+ this.label59.AutoSize = true;
+ this.label59.Location = new System.Drawing.Point(40, 126);
+ this.label59.Name = "label59";
+ this.label59.Size = new System.Drawing.Size(95, 13);
+ this.label59.TabIndex = 225;
+ this.label59.Text = "Time varying M file";
+ //
+ // mvalueloadbox
+ //
+ this.mvalueloadbox.Location = new System.Drawing.Point(153, 120);
+ this.mvalueloadbox.Name = "mvalueloadbox";
+ this.mvalueloadbox.Size = new System.Drawing.Size(118, 20);
+ this.mvalueloadbox.TabIndex = 224;
+ this.mvalueloadbox.Text = "null";
+ //
+ // raindataloadbox
+ //
+ this.raindataloadbox.Location = new System.Drawing.Point(152, 25);
+ this.raindataloadbox.Name = "raindataloadbox";
+ this.raindataloadbox.Size = new System.Drawing.Size(120, 20);
+ this.raindataloadbox.TabIndex = 223;
+ this.raindataloadbox.Text = "null";
+ //
+ // label25
+ //
+ this.label25.Location = new System.Drawing.Point(40, 25);
+ this.label25.Name = "label25";
+ this.label25.Size = new System.Drawing.Size(104, 24);
+ this.label25.TabIndex = 222;
+ this.label25.Text = "Rainfall data file";
+ this.label25.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label25, "Hourly rainfall data - in an ascii format");
+ //
+ // groupBox5
+ //
+ this.groupBox5.Controls.Add(this.label83);
+ this.groupBox5.Controls.Add(this.div_inputs_box);
+ this.groupBox5.Controls.Add(this.infile8);
+ this.groupBox5.Controls.Add(this.ybox8);
+ this.groupBox5.Controls.Add(this.xbox8);
+ this.groupBox5.Controls.Add(this.inbox8);
+ this.groupBox5.Controls.Add(this.infile7);
+ this.groupBox5.Controls.Add(this.ybox7);
+ this.groupBox5.Controls.Add(this.xbox7);
+ this.groupBox5.Controls.Add(this.inbox7);
+ this.groupBox5.Controls.Add(this.infile6);
+ this.groupBox5.Controls.Add(this.ybox6);
+ this.groupBox5.Controls.Add(this.xbox6);
+ this.groupBox5.Controls.Add(this.inbox6);
+ this.groupBox5.Controls.Add(this.infile5);
+ this.groupBox5.Controls.Add(this.ybox5);
+ this.groupBox5.Controls.Add(this.xbox5);
+ this.groupBox5.Controls.Add(this.inbox5);
+ this.groupBox5.Controls.Add(this.input_time_step_box);
+ this.groupBox5.Controls.Add(this.infile4);
+ this.groupBox5.Controls.Add(this.infile3);
+ this.groupBox5.Controls.Add(this.infile2);
+ this.groupBox5.Controls.Add(this.infile1);
+ this.groupBox5.Controls.Add(this.ybox1);
+ this.groupBox5.Controls.Add(this.ybox2);
+ this.groupBox5.Controls.Add(this.ybox3);
+ this.groupBox5.Controls.Add(this.ybox4);
+ this.groupBox5.Controls.Add(this.xbox2);
+ this.groupBox5.Controls.Add(this.xbox3);
+ this.groupBox5.Controls.Add(this.xbox4);
+ this.groupBox5.Controls.Add(this.xbox1);
+ this.groupBox5.Controls.Add(this.label29);
+ this.groupBox5.Controls.Add(this.label44);
+ this.groupBox5.Controls.Add(this.label43);
+ this.groupBox5.Controls.Add(this.label41);
+ this.groupBox5.Controls.Add(this.inbox2);
+ this.groupBox5.Controls.Add(this.inbox3);
+ this.groupBox5.Controls.Add(this.inbox4);
+ this.groupBox5.Controls.Add(this.inbox1);
+ this.groupBox5.Controls.Add(this.label42);
+ this.groupBox5.Location = new System.Drawing.Point(32, 17);
+ this.groupBox5.Name = "groupBox5";
+ this.groupBox5.Size = new System.Drawing.Size(463, 332);
+ this.groupBox5.TabIndex = 214;
+ this.groupBox5.TabStop = false;
+ this.groupBox5.Text = "Reach input variables";
+ //
+ // label83
+ //
+ this.label83.Location = new System.Drawing.Point(118, 275);
+ this.label83.Name = "label83";
+ this.label83.Size = new System.Drawing.Size(100, 32);
+ this.label83.TabIndex = 202;
+ this.label83.Text = "Divide inputs by..";
+ //
+ // div_inputs_box
+ //
+ this.div_inputs_box.Location = new System.Drawing.Point(224, 272);
+ this.div_inputs_box.Name = "div_inputs_box";
+ this.div_inputs_box.Size = new System.Drawing.Size(31, 20);
+ this.div_inputs_box.TabIndex = 201;
+ this.div_inputs_box.Text = "1";
+ //
+ // infile8
+ //
+ this.infile8.Location = new System.Drawing.Point(166, 236);
+ this.infile8.Name = "infile8";
+ this.infile8.Size = new System.Drawing.Size(120, 20);
+ this.infile8.TabIndex = 198;
+ //
+ // ybox8
+ //
+ this.ybox8.Location = new System.Drawing.Point(120, 236);
+ this.ybox8.Name = "ybox8";
+ this.ybox8.Size = new System.Drawing.Size(31, 20);
+ this.ybox8.TabIndex = 197;
+ //
+ // xbox8
+ //
+ this.xbox8.Location = new System.Drawing.Point(73, 236);
+ this.xbox8.Name = "xbox8";
+ this.xbox8.Size = new System.Drawing.Size(32, 20);
+ this.xbox8.TabIndex = 196;
+ //
+ // inbox8
+ //
+ this.inbox8.Location = new System.Drawing.Point(9, 236);
+ this.inbox8.Name = "inbox8";
+ this.inbox8.Size = new System.Drawing.Size(64, 16);
+ this.inbox8.TabIndex = 195;
+ this.inbox8.Text = "Input 8";
+ //
+ // infile7
+ //
+ this.infile7.Location = new System.Drawing.Point(166, 208);
+ this.infile7.Name = "infile7";
+ this.infile7.Size = new System.Drawing.Size(120, 20);
+ this.infile7.TabIndex = 194;
+ //
+ // ybox7
+ //
+ this.ybox7.Location = new System.Drawing.Point(120, 208);
+ this.ybox7.Name = "ybox7";
+ this.ybox7.Size = new System.Drawing.Size(31, 20);
+ this.ybox7.TabIndex = 193;
+ //
+ // xbox7
+ //
+ this.xbox7.Location = new System.Drawing.Point(73, 208);
+ this.xbox7.Name = "xbox7";
+ this.xbox7.Size = new System.Drawing.Size(32, 20);
+ this.xbox7.TabIndex = 192;
+ //
+ // inbox7
+ //
+ this.inbox7.Location = new System.Drawing.Point(9, 208);
+ this.inbox7.Name = "inbox7";
+ this.inbox7.Size = new System.Drawing.Size(64, 17);
+ this.inbox7.TabIndex = 191;
+ this.inbox7.Text = "Input 7";
+ //
+ // infile6
+ //
+ this.infile6.Location = new System.Drawing.Point(166, 180);
+ this.infile6.Name = "infile6";
+ this.infile6.Size = new System.Drawing.Size(120, 20);
+ this.infile6.TabIndex = 190;
+ //
+ // ybox6
+ //
+ this.ybox6.Location = new System.Drawing.Point(120, 180);
+ this.ybox6.Name = "ybox6";
+ this.ybox6.Size = new System.Drawing.Size(31, 20);
+ this.ybox6.TabIndex = 189;
+ //
+ // xbox6
+ //
+ this.xbox6.Location = new System.Drawing.Point(73, 180);
+ this.xbox6.Name = "xbox6";
+ this.xbox6.Size = new System.Drawing.Size(32, 20);
+ this.xbox6.TabIndex = 188;
+ //
+ // inbox6
+ //
+ this.inbox6.Location = new System.Drawing.Point(9, 180);
+ this.inbox6.Name = "inbox6";
+ this.inbox6.Size = new System.Drawing.Size(64, 17);
+ this.inbox6.TabIndex = 187;
+ this.inbox6.Text = "Input 6";
+ //
+ // infile5
+ //
+ this.infile5.Location = new System.Drawing.Point(166, 153);
+ this.infile5.Name = "infile5";
+ this.infile5.Size = new System.Drawing.Size(120, 20);
+ this.infile5.TabIndex = 186;
+ //
+ // ybox5
+ //
+ this.ybox5.Location = new System.Drawing.Point(120, 153);
+ this.ybox5.Name = "ybox5";
+ this.ybox5.Size = new System.Drawing.Size(31, 20);
+ this.ybox5.TabIndex = 185;
+ //
+ // xbox5
+ //
+ this.xbox5.Location = new System.Drawing.Point(73, 153);
+ this.xbox5.Name = "xbox5";
+ this.xbox5.Size = new System.Drawing.Size(32, 20);
+ this.xbox5.TabIndex = 184;
+ //
+ // inbox5
+ //
+ this.inbox5.Location = new System.Drawing.Point(9, 153);
+ this.inbox5.Name = "inbox5";
+ this.inbox5.Size = new System.Drawing.Size(64, 16);
+ this.inbox5.TabIndex = 183;
+ this.inbox5.Text = "Input 5";
+ //
+ // input_time_step_box
+ //
+ this.input_time_step_box.Location = new System.Drawing.Point(320, 90);
+ this.input_time_step_box.Name = "input_time_step_box";
+ this.input_time_step_box.Size = new System.Drawing.Size(63, 20);
+ this.input_time_step_box.TabIndex = 181;
+ this.input_time_step_box.Text = "1440";
+ //
+ // infile4
+ //
+ this.infile4.Location = new System.Drawing.Point(169, 127);
+ this.infile4.Name = "infile4";
+ this.infile4.Size = new System.Drawing.Size(120, 20);
+ this.infile4.TabIndex = 180;
+ //
+ // infile3
+ //
+ this.infile3.Location = new System.Drawing.Point(169, 103);
+ this.infile3.Name = "infile3";
+ this.infile3.Size = new System.Drawing.Size(120, 20);
+ this.infile3.TabIndex = 179;
+ //
+ // infile2
+ //
+ this.infile2.Location = new System.Drawing.Point(169, 79);
+ this.infile2.Name = "infile2";
+ this.infile2.Size = new System.Drawing.Size(120, 20);
+ this.infile2.TabIndex = 178;
+ //
+ // infile1
+ //
+ this.infile1.Location = new System.Drawing.Point(169, 55);
+ this.infile1.Name = "infile1";
+ this.infile1.Size = new System.Drawing.Size(120, 20);
+ this.infile1.TabIndex = 177;
+ //
+ // ybox1
+ //
+ this.ybox1.Location = new System.Drawing.Point(121, 55);
+ this.ybox1.Name = "ybox1";
+ this.ybox1.Size = new System.Drawing.Size(32, 20);
+ this.ybox1.TabIndex = 175;
+ //
+ // ybox2
+ //
+ this.ybox2.Location = new System.Drawing.Point(121, 79);
+ this.ybox2.Name = "ybox2";
+ this.ybox2.Size = new System.Drawing.Size(32, 20);
+ this.ybox2.TabIndex = 174;
+ //
+ // ybox3
+ //
+ this.ybox3.Location = new System.Drawing.Point(121, 103);
+ this.ybox3.Name = "ybox3";
+ this.ybox3.Size = new System.Drawing.Size(32, 20);
+ this.ybox3.TabIndex = 173;
+ //
+ // ybox4
+ //
+ this.ybox4.Location = new System.Drawing.Point(121, 127);
+ this.ybox4.Name = "ybox4";
+ this.ybox4.Size = new System.Drawing.Size(32, 20);
+ this.ybox4.TabIndex = 172;
+ //
+ // xbox2
+ //
+ this.xbox2.Location = new System.Drawing.Point(73, 79);
+ this.xbox2.Name = "xbox2";
+ this.xbox2.Size = new System.Drawing.Size(32, 20);
+ this.xbox2.TabIndex = 171;
+ //
+ // xbox3
+ //
+ this.xbox3.Location = new System.Drawing.Point(73, 103);
+ this.xbox3.Name = "xbox3";
+ this.xbox3.Size = new System.Drawing.Size(32, 20);
+ this.xbox3.TabIndex = 170;
+ //
+ // xbox4
+ //
+ this.xbox4.Location = new System.Drawing.Point(73, 127);
+ this.xbox4.Name = "xbox4";
+ this.xbox4.Size = new System.Drawing.Size(32, 20);
+ this.xbox4.TabIndex = 169;
+ //
+ // xbox1
+ //
+ this.xbox1.Location = new System.Drawing.Point(73, 55);
+ this.xbox1.Name = "xbox1";
+ this.xbox1.Size = new System.Drawing.Size(32, 20);
+ this.xbox1.TabIndex = 168;
+ //
+ // label29
+ //
+ this.label29.Location = new System.Drawing.Point(317, 60);
+ this.label29.Name = "label29";
+ this.label29.Size = new System.Drawing.Size(100, 32);
+ this.label29.TabIndex = 182;
+ this.label29.Text = "input data time step (mins)";
+ //
+ // label44
+ //
+ this.label44.Location = new System.Drawing.Point(169, 31);
+ this.label44.Name = "label44";
+ this.label44.Size = new System.Drawing.Size(56, 16);
+ this.label44.TabIndex = 176;
+ this.label44.Text = "File Name";
+ //
+ // label43
+ //
+ this.label43.Location = new System.Drawing.Point(129, 31);
+ this.label43.Name = "label43";
+ this.label43.Size = new System.Drawing.Size(16, 16);
+ this.label43.TabIndex = 167;
+ this.label43.Text = "Y";
+ //
+ // label41
+ //
+ this.label41.Location = new System.Drawing.Point(81, 31);
+ this.label41.Name = "label41";
+ this.label41.Size = new System.Drawing.Size(16, 16);
+ this.label41.TabIndex = 165;
+ this.label41.Text = "X";
+ //
+ // inbox2
+ //
+ this.inbox2.Location = new System.Drawing.Point(9, 79);
+ this.inbox2.Name = "inbox2";
+ this.inbox2.Size = new System.Drawing.Size(64, 16);
+ this.inbox2.TabIndex = 164;
+ this.inbox2.Text = "Input 2";
+ //
+ // inbox3
+ //
+ this.inbox3.Location = new System.Drawing.Point(9, 103);
+ this.inbox3.Name = "inbox3";
+ this.inbox3.Size = new System.Drawing.Size(64, 16);
+ this.inbox3.TabIndex = 163;
+ this.inbox3.Text = "Input 3";
+ //
+ // inbox4
+ //
+ this.inbox4.Location = new System.Drawing.Point(9, 127);
+ this.inbox4.Name = "inbox4";
+ this.inbox4.Size = new System.Drawing.Size(64, 16);
+ this.inbox4.TabIndex = 162;
+ this.inbox4.Text = "Input 4";
+ //
+ // inbox1
+ //
+ this.inbox1.Location = new System.Drawing.Point(9, 55);
+ this.inbox1.Name = "inbox1";
+ this.inbox1.Size = new System.Drawing.Size(64, 16);
+ this.inbox1.TabIndex = 161;
+ this.inbox1.Text = "Input 1";
+ //
+ // label42
+ //
+ this.label42.Location = new System.Drawing.Point(81, 31);
+ this.label42.Name = "label42";
+ this.label42.Size = new System.Drawing.Size(16, 16);
+ this.label42.TabIndex = 166;
+ this.label42.Text = "X";
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.label90);
+ this.groupBox1.Controls.Add(this.TidalFileName);
+ this.groupBox1.Controls.Add(this.TidalInputStep);
+ this.groupBox1.Controls.Add(this.label82);
+ this.groupBox1.Controls.Add(this.TidalYmin);
+ this.groupBox1.Controls.Add(this.TidalYmax);
+ this.groupBox1.Controls.Add(this.TidalXmax);
+ this.groupBox1.Controls.Add(this.TidalXmin);
+ this.groupBox1.Controls.Add(this.label80);
+ this.groupBox1.Controls.Add(this.label81);
+ this.groupBox1.Location = new System.Drawing.Point(526, 303);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(364, 202);
+ this.groupBox1.TabIndex = 213;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Stage/Tidal input variables";
+ //
+ // label90
+ //
+ this.label90.Location = new System.Drawing.Point(206, 45);
+ this.label90.Name = "label90";
+ this.label90.Size = new System.Drawing.Size(55, 15);
+ this.label90.TabIndex = 212;
+ this.label90.Text = "File Name";
+ //
+ // TidalFileName
+ //
+ this.TidalFileName.Location = new System.Drawing.Point(207, 62);
+ this.TidalFileName.Name = "TidalFileName";
+ this.TidalFileName.Size = new System.Drawing.Size(120, 20);
+ this.TidalFileName.TabIndex = 211;
+ //
+ // TidalInputStep
+ //
+ this.TidalInputStep.Location = new System.Drawing.Point(52, 121);
+ this.TidalInputStep.Name = "TidalInputStep";
+ this.TidalInputStep.Size = new System.Drawing.Size(63, 20);
+ this.TidalInputStep.TabIndex = 209;
+ this.TidalInputStep.Text = "1440";
+ //
+ // label82
+ //
+ this.label82.Location = new System.Drawing.Point(125, 114);
+ this.label82.Name = "label82";
+ this.label82.Size = new System.Drawing.Size(100, 32);
+ this.label82.TabIndex = 210;
+ this.label82.Text = "input data time step (mins)";
+ //
+ // TidalYmin
+ //
+ this.TidalYmin.Location = new System.Drawing.Point(93, 39);
+ this.TidalYmin.Name = "TidalYmin";
+ this.TidalYmin.Size = new System.Drawing.Size(32, 20);
+ this.TidalYmin.TabIndex = 208;
+ this.TidalYmin.Text = "0";
+ //
+ // TidalYmax
+ //
+ this.TidalYmax.Location = new System.Drawing.Point(93, 87);
+ this.TidalYmax.Name = "TidalYmax";
+ this.TidalYmax.Size = new System.Drawing.Size(32, 20);
+ this.TidalYmax.TabIndex = 207;
+ this.TidalYmax.Text = "0";
+ //
+ // TidalXmax
+ //
+ this.TidalXmax.Location = new System.Drawing.Point(128, 62);
+ this.TidalXmax.Name = "TidalXmax";
+ this.TidalXmax.Size = new System.Drawing.Size(31, 20);
+ this.TidalXmax.TabIndex = 206;
+ this.TidalXmax.Text = "0";
+ //
+ // TidalXmin
+ //
+ this.TidalXmin.Location = new System.Drawing.Point(54, 62);
+ this.TidalXmin.Name = "TidalXmin";
+ this.TidalXmin.Size = new System.Drawing.Size(31, 20);
+ this.TidalXmin.TabIndex = 205;
+ this.TidalXmin.Text = "0";
+ //
+ // label80
+ //
+ this.label80.Location = new System.Drawing.Point(100, 21);
+ this.label80.Name = "label80";
+ this.label80.Size = new System.Drawing.Size(15, 15);
+ this.label80.TabIndex = 204;
+ this.label80.Text = "Y";
+ //
+ // label81
+ //
+ this.label81.Location = new System.Drawing.Point(32, 65);
+ this.label81.Name = "label81";
+ this.label81.Size = new System.Drawing.Size(16, 15);
+ this.label81.TabIndex = 203;
+ this.label81.Text = "X";
+ //
+ // tabPage2
+ //
+ this.tabPage2.Controls.Add(this.groupBox8);
+ this.tabPage2.Controls.Add(this.veg_lat_box);
+ this.tabPage2.Controls.Add(this.label51);
+ this.tabPage2.Controls.Add(this.grasstextbox);
+ this.tabPage2.Controls.Add(this.label40);
+ this.tabPage2.Controls.Add(this.label36);
+ this.tabPage2.Controls.Add(this.vegTauCritBox);
+ this.tabPage2.Location = new System.Drawing.Point(4, 22);
+ this.tabPage2.Name = "tabPage2";
+ this.tabPage2.Size = new System.Drawing.Size(1323, 487);
+ this.tabPage2.TabIndex = 7;
+ this.tabPage2.Text = "Vegetation";
+ this.tabPage2.UseVisualStyleBackColor = true;
+ //
+ // groupBox8
+ //
+ this.groupBox8.Controls.Add(this.radioButton2);
+ this.groupBox8.Controls.Add(this.radioButton1);
+ this.groupBox8.Location = new System.Drawing.Point(284, 32);
+ this.groupBox8.Name = "groupBox8";
+ this.groupBox8.Size = new System.Drawing.Size(117, 77);
+ this.groupBox8.TabIndex = 178;
+ this.groupBox8.TabStop = false;
+ this.groupBox8.Text = "Vegetation model";
+ //
+ // radioButton2
+ //
+ this.radioButton2.AutoSize = true;
+ this.radioButton2.Location = new System.Drawing.Point(17, 43);
+ this.radioButton2.Name = "radioButton2";
+ this.radioButton2.Size = new System.Drawing.Size(84, 17);
+ this.radioButton2.TabIndex = 177;
+ this.radioButton2.Text = "new (>=1.9g)";
+ this.radioButton2.UseVisualStyleBackColor = true;
+ //
+ // radioButton1
+ //
+ this.radioButton1.AutoSize = true;
+ this.radioButton1.Checked = true;
+ this.radioButton1.Location = new System.Drawing.Point(17, 20);
+ this.radioButton1.Name = "radioButton1";
+ this.radioButton1.Size = new System.Drawing.Size(75, 17);
+ this.radioButton1.TabIndex = 176;
+ this.radioButton1.TabStop = true;
+ this.radioButton1.Text = "old (<1.9d)";
+ this.radioButton1.UseVisualStyleBackColor = true;
+ //
+ // veg_lat_box
+ //
+ this.veg_lat_box.Location = new System.Drawing.Point(157, 117);
+ this.veg_lat_box.Name = "veg_lat_box";
+ this.veg_lat_box.Size = new System.Drawing.Size(40, 20);
+ this.veg_lat_box.TabIndex = 175;
+ this.veg_lat_box.Text = "0.1";
+ //
+ // label51
+ //
+ this.label51.Location = new System.Drawing.Point(29, 103);
+ this.label51.Name = "label51";
+ this.label51.Size = new System.Drawing.Size(120, 47);
+ this.label51.TabIndex = 174;
+ this.label51.Text = "Proportion of erosion that can occur when veg is fully grown (0-1)";
+ this.label51.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // grasstextbox
+ //
+ this.grasstextbox.Location = new System.Drawing.Point(157, 68);
+ this.grasstextbox.Name = "grasstextbox";
+ this.grasstextbox.Size = new System.Drawing.Size(40, 20);
+ this.grasstextbox.TabIndex = 172;
+ this.grasstextbox.Text = "5";
+ //
+ // label40
+ //
+ this.label40.Location = new System.Drawing.Point(29, 68);
+ this.label40.Name = "label40";
+ this.label40.Size = new System.Drawing.Size(120, 24);
+ this.label40.TabIndex = 173;
+ this.label40.Text = "Grass maturity (yrs)";
+ this.label40.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label36
+ //
+ this.label36.Location = new System.Drawing.Point(37, 28);
+ this.label36.Name = "label36";
+ this.label36.Size = new System.Drawing.Size(112, 24);
+ this.label36.TabIndex = 108;
+ this.label36.Text = "vegetation crit shear";
+ this.label36.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // vegTauCritBox
+ //
+ this.vegTauCritBox.Location = new System.Drawing.Point(157, 32);
+ this.vegTauCritBox.Name = "vegTauCritBox";
+ this.vegTauCritBox.Size = new System.Drawing.Size(71, 20);
+ this.vegTauCritBox.TabIndex = 92;
+ this.vegTauCritBox.Text = "180.0";
+ //
+ // tabPage4
+ //
+ this.tabPage4.Controls.Add(this.soilerosionBox);
+ this.tabPage4.Controls.Add(this.landslidesBox);
+ this.tabPage4.Controls.Add(this.label75);
+ this.tabPage4.Controls.Add(this.label74);
+ this.tabPage4.Controls.Add(this.label73);
+ this.tabPage4.Controls.Add(this.label72);
+ this.tabPage4.Controls.Add(this.label71);
+ this.tabPage4.Controls.Add(this.m3Box);
+ this.tabPage4.Controls.Add(this.n1Box);
+ this.tabPage4.Controls.Add(this.m1Box);
+ this.tabPage4.Controls.Add(this.Beta3Box);
+ this.tabPage4.Controls.Add(this.Beta1Box);
+ this.tabPage4.Controls.Add(this.SiberiaBox);
+ this.tabPage4.Controls.Add(this.label70);
+ this.tabPage4.Controls.Add(this.label69);
+ this.tabPage4.Controls.Add(this.label68);
+ this.tabPage4.Controls.Add(this.label67);
+ this.tabPage4.Controls.Add(this.soil_ratebox);
+ this.tabPage4.Controls.Add(this.slopebox);
+ this.tabPage4.Controls.Add(this.creepratebox);
+ this.tabPage4.Controls.Add(this.label34);
+ this.tabPage4.Controls.Add(this.label8);
+ this.tabPage4.Location = new System.Drawing.Point(4, 22);
+ this.tabPage4.Name = "tabPage4";
+ this.tabPage4.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage4.Size = new System.Drawing.Size(1323, 487);
+ this.tabPage4.TabIndex = 9;
+ this.tabPage4.Text = "Slope Processes";
+ this.tabPage4.UseVisualStyleBackColor = true;
+ //
+ // soilerosionBox
+ //
+ this.soilerosionBox.Location = new System.Drawing.Point(223, 163);
+ this.soilerosionBox.Name = "soilerosionBox";
+ this.soilerosionBox.Size = new System.Drawing.Size(147, 34);
+ this.soilerosionBox.TabIndex = 187;
+ this.soilerosionBox.Text = "Soil erosion varies according to j_mean";
+ this.toolTip1.SetToolTip(this.soilerosionBox, "CAESAR can run in both catchment and reach mode, but if you have catchment mode c" +
+ "hecked, you should input a rainfall data file");
+ //
+ // landslidesBox
+ //
+ this.landslidesBox.Location = new System.Drawing.Point(223, 69);
+ this.landslidesBox.Name = "landslidesBox";
+ this.landslidesBox.Size = new System.Drawing.Size(196, 34);
+ this.landslidesBox.TabIndex = 186;
+ this.landslidesBox.Text = "Dynamic Slope fail angle - varies according to j_mean";
+ //
+ // label75
+ //
+ this.label75.Location = new System.Drawing.Point(648, 174);
+ this.label75.Name = "label75";
+ this.label75.Size = new System.Drawing.Size(96, 24);
+ this.label75.TabIndex = 185;
+ this.label75.Text = "n1";
+ this.label75.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label74
+ //
+ this.label74.Location = new System.Drawing.Point(648, 151);
+ this.label74.Name = "label74";
+ this.label74.Size = new System.Drawing.Size(96, 24);
+ this.label74.TabIndex = 184;
+ this.label74.Text = "m3";
+ this.label74.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label73
+ //
+ this.label73.Location = new System.Drawing.Point(648, 73);
+ this.label73.Name = "label73";
+ this.label73.Size = new System.Drawing.Size(96, 24);
+ this.label73.TabIndex = 183;
+ this.label73.Text = "Beta1";
+ this.label73.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label72
+ //
+ this.label72.Location = new System.Drawing.Point(648, 125);
+ this.label72.Name = "label72";
+ this.label72.Size = new System.Drawing.Size(96, 24);
+ this.label72.TabIndex = 182;
+ this.label72.Text = "m1";
+ this.label72.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label71
+ //
+ this.label71.Location = new System.Drawing.Point(648, 99);
+ this.label71.Name = "label71";
+ this.label71.Size = new System.Drawing.Size(96, 24);
+ this.label71.TabIndex = 181;
+ this.label71.Text = "Beta3";
+ this.label71.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // m3Box
+ //
+ this.m3Box.Location = new System.Drawing.Point(750, 151);
+ this.m3Box.Name = "m3Box";
+ this.m3Box.Size = new System.Drawing.Size(49, 20);
+ this.m3Box.TabIndex = 180;
+ this.m3Box.Text = "0.79";
+ //
+ // n1Box
+ //
+ this.n1Box.Location = new System.Drawing.Point(750, 177);
+ this.n1Box.Name = "n1Box";
+ this.n1Box.Size = new System.Drawing.Size(49, 20);
+ this.n1Box.TabIndex = 179;
+ this.n1Box.Text = "0.69";
+ this.n1Box.TextChanged += new System.EventHandler(this.n1Box_TextChanged);
+ //
+ // m1Box
+ //
+ this.m1Box.Location = new System.Drawing.Point(750, 125);
+ this.m1Box.Name = "m1Box";
+ this.m1Box.Size = new System.Drawing.Size(49, 20);
+ this.m1Box.TabIndex = 178;
+ this.m1Box.Text = "1.7";
+ //
+ // Beta3Box
+ //
+ this.Beta3Box.Location = new System.Drawing.Point(750, 99);
+ this.Beta3Box.Name = "Beta3Box";
+ this.Beta3Box.Size = new System.Drawing.Size(49, 20);
+ this.Beta3Box.TabIndex = 177;
+ this.Beta3Box.Text = "0.000186";
+ //
+ // Beta1Box
+ //
+ this.Beta1Box.Location = new System.Drawing.Point(750, 73);
+ this.Beta1Box.Name = "Beta1Box";
+ this.Beta1Box.Size = new System.Drawing.Size(49, 20);
+ this.Beta1Box.TabIndex = 176;
+ this.Beta1Box.Text = "1067";
+ //
+ // SiberiaBox
+ //
+ this.SiberiaBox.Location = new System.Drawing.Point(692, 36);
+ this.SiberiaBox.Name = "SiberiaBox";
+ this.SiberiaBox.Size = new System.Drawing.Size(147, 34);
+ this.SiberiaBox.TabIndex = 175;
+ this.SiberiaBox.Text = "SIBERIA sub model?";
+ this.toolTip1.SetToolTip(this.SiberiaBox, "CAESAR can run in both catchment and reach mode, but if you have catchment mode c" +
+ "hecked, you should input a rainfall data file");
+ //
+ // label70
+ //
+ this.label70.AutoSize = true;
+ this.label70.Location = new System.Drawing.Point(220, 132);
+ this.label70.Name = "label70";
+ this.label70.Size = new System.Drawing.Size(246, 13);
+ this.label70.TabIndex = 168;
+ this.label70.Text = "simply slope * slope length, so replicates wash term";
+ //
+ // label69
+ //
+ this.label69.AutoSize = true;
+ this.label69.Location = new System.Drawing.Point(220, 116);
+ this.label69.Name = "label69";
+ this.label69.Size = new System.Drawing.Size(357, 13);
+ this.label69.TabIndex = 167;
+ this.label69.Text = "Slope * Soil erosion rate * (drainage area ^ 0.5) * Time(years) / DX(cellsize)";
+ //
+ // label68
+ //
+ this.label68.AutoSize = true;
+ this.label68.Location = new System.Drawing.Point(220, 42);
+ this.label68.Name = "label68";
+ this.label68.Size = new System.Drawing.Size(220, 13);
+ this.label68.TabIndex = 166;
+ this.label68.Text = "Slope * Creeprate * Time(years) / DX(cellsize)";
+ //
+ // label67
+ //
+ this.label67.Location = new System.Drawing.Point(51, 109);
+ this.label67.Name = "label67";
+ this.label67.Size = new System.Drawing.Size(96, 24);
+ this.label67.TabIndex = 165;
+ this.label67.Text = "Soil erosion rate";
+ this.label67.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // soil_ratebox
+ //
+ this.soil_ratebox.Location = new System.Drawing.Point(155, 113);
+ this.soil_ratebox.Name = "soil_ratebox";
+ this.soil_ratebox.Size = new System.Drawing.Size(49, 20);
+ this.soil_ratebox.TabIndex = 164;
+ this.soil_ratebox.Text = "0.0";
+ //
+ // slopebox
+ //
+ this.slopebox.Location = new System.Drawing.Point(155, 75);
+ this.slopebox.Name = "slopebox";
+ this.slopebox.Size = new System.Drawing.Size(40, 20);
+ this.slopebox.TabIndex = 162;
+ this.slopebox.Text = "45";
+ //
+ // creepratebox
+ //
+ this.creepratebox.Location = new System.Drawing.Point(155, 39);
+ this.creepratebox.Name = "creepratebox";
+ this.creepratebox.Size = new System.Drawing.Size(49, 20);
+ this.creepratebox.TabIndex = 160;
+ this.creepratebox.Text = "0.0025";
+ //
+ // label34
+ //
+ this.label34.Location = new System.Drawing.Point(21, 75);
+ this.label34.Name = "label34";
+ this.label34.Size = new System.Drawing.Size(128, 24);
+ this.label34.TabIndex = 163;
+ this.label34.Text = "slope failure threshold";
+ this.label34.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label8
+ //
+ this.label8.Location = new System.Drawing.Point(51, 39);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(96, 24);
+ this.label8.TabIndex = 161;
+ this.label8.Text = "Creep rate";
+ this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // tabPage5
+ //
+ this.tabPage5.Controls.Add(this.label91);
+ this.tabPage5.Controls.Add(this.textBox10);
+ this.tabPage5.Controls.Add(this.fraction_dune);
+ this.tabPage5.Controls.Add(this.label57);
+ this.tabPage5.Controls.Add(this.dune_grid_size_box);
+ this.tabPage5.Controls.Add(this.label56);
+ this.tabPage5.Controls.Add(this.dune_time_box);
+ this.tabPage5.Controls.Add(this.label89);
+ this.tabPage5.Controls.Add(this.label88);
+ this.tabPage5.Controls.Add(this.label87);
+ this.tabPage5.Controls.Add(this.label86);
+ this.tabPage5.Controls.Add(this.label85);
+ this.tabPage5.Controls.Add(this.label84);
+ this.tabPage5.Controls.Add(this.slab_depth_box);
+ this.tabPage5.Controls.Add(this.shadow_angle_box);
+ this.tabPage5.Controls.Add(this.upstream_check_box);
+ this.tabPage5.Controls.Add(this.depo_prob_box);
+ this.tabPage5.Controls.Add(this.offset_box);
+ this.tabPage5.Controls.Add(this.init_depth_box);
+ this.tabPage5.Controls.Add(this.DuneBox);
+ this.tabPage5.Location = new System.Drawing.Point(4, 22);
+ this.tabPage5.Name = "tabPage5";
+ this.tabPage5.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage5.Size = new System.Drawing.Size(1323, 487);
+ this.tabPage5.TabIndex = 10;
+ this.tabPage5.Text = "Dune model";
+ this.tabPage5.UseVisualStyleBackColor = true;
+ this.tabPage5.Click += new System.EventHandler(this.tabPage5_Click);
+ //
+ // label91
+ //
+ this.label91.AutoSize = true;
+ this.label91.Location = new System.Drawing.Point(115, 153);
+ this.label91.Name = "label91";
+ this.label91.Size = new System.Drawing.Size(100, 13);
+ this.label91.TabIndex = 19;
+ this.label91.Text = "Dune landslip angle";
+ //
+ // textBox10
+ //
+ this.textBox10.Location = new System.Drawing.Point(26, 150);
+ this.textBox10.Name = "textBox10";
+ this.textBox10.Size = new System.Drawing.Size(75, 20);
+ this.textBox10.TabIndex = 18;
+ this.textBox10.Text = "30";
+ //
+ // fraction_dune
+ //
+ this.fraction_dune.Location = new System.Drawing.Point(512, 113);
+ this.fraction_dune.Name = "fraction_dune";
+ this.fraction_dune.Size = new System.Drawing.Size(75, 20);
+ this.fraction_dune.TabIndex = 17;
+ this.fraction_dune.Text = "1";
+ //
+ // label57
+ //
+ this.label57.AutoSize = true;
+ this.label57.Location = new System.Drawing.Point(600, 79);
+ this.label57.Name = "label57";
+ this.label57.Size = new System.Drawing.Size(91, 13);
+ this.label57.TabIndex = 16;
+ this.label57.Text = "Grid size of dunes";
+ //
+ // dune_grid_size_box
+ //
+ this.dune_grid_size_box.Location = new System.Drawing.Point(512, 76);
+ this.dune_grid_size_box.Name = "dune_grid_size_box";
+ this.dune_grid_size_box.Size = new System.Drawing.Size(75, 20);
+ this.dune_grid_size_box.TabIndex = 15;
+ this.dune_grid_size_box.Text = "2";
+ //
+ // label56
+ //
+ this.label56.AutoSize = true;
+ this.label56.Location = new System.Drawing.Point(600, 44);
+ this.label56.Name = "label56";
+ this.label56.Size = new System.Drawing.Size(169, 13);
+ this.label56.TabIndex = 14;
+ this.label56.Text = "time step (min) between dune calls";
+ //
+ // dune_time_box
+ //
+ this.dune_time_box.Location = new System.Drawing.Point(512, 41);
+ this.dune_time_box.Name = "dune_time_box";
+ this.dune_time_box.Size = new System.Drawing.Size(75, 20);
+ this.dune_time_box.TabIndex = 13;
+ this.dune_time_box.Text = "144";
+ //
+ // label89
+ //
+ this.label89.AutoSize = true;
+ this.label89.Location = new System.Drawing.Point(117, 257);
+ this.label89.Name = "label89";
+ this.label89.Size = new System.Drawing.Size(270, 13);
+ this.label89.TabIndex = 12;
+ this.label89.Text = "Downstream offset (travel distance automatically added)";
+ //
+ // label88
+ //
+ this.label88.AutoSize = true;
+ this.label88.Location = new System.Drawing.Point(115, 222);
+ this.label88.Name = "label88";
+ this.label88.Size = new System.Drawing.Size(124, 13);
+ this.label88.TabIndex = 11;
+ this.label88.Text = "Deposition probability (%)";
+ this.label88.Click += new System.EventHandler(this.label88_Click);
+ //
+ // label87
+ //
+ this.label87.AutoSize = true;
+ this.label87.Location = new System.Drawing.Point(115, 186);
+ this.label87.Name = "label87";
+ this.label87.Size = new System.Drawing.Size(381, 13);
+ this.label87.TabIndex = 10;
+ this.label87.Text = "Shadow check distance (cells) - number of cells Upstream it checks for shadow";
+ //
+ // label86
+ //
+ this.label86.AutoSize = true;
+ this.label86.Location = new System.Drawing.Point(115, 118);
+ this.label86.Name = "label86";
+ this.label86.Size = new System.Drawing.Size(105, 13);
+ this.label86.TabIndex = 9;
+ this.label86.Text = "Shadow angle (deg) ";
+ //
+ // label85
+ //
+ this.label85.AutoSize = true;
+ this.label85.Location = new System.Drawing.Point(117, 83);
+ this.label85.Name = "label85";
+ this.label85.Size = new System.Drawing.Size(138, 13);
+ this.label85.TabIndex = 8;
+ this.label85.Text = "Maximum slab thickness (m)";
+ //
+ // label84
+ //
+ this.label84.AutoSize = true;
+ this.label84.Location = new System.Drawing.Point(115, 47);
+ this.label84.Name = "label84";
+ this.label84.Size = new System.Drawing.Size(185, 13);
+ this.label84.TabIndex = 7;
+ this.label84.Text = "how many slabs added per col per iter";
+ //
+ // slab_depth_box
+ //
+ this.slab_depth_box.Location = new System.Drawing.Point(26, 80);
+ this.slab_depth_box.Name = "slab_depth_box";
+ this.slab_depth_box.Size = new System.Drawing.Size(75, 20);
+ this.slab_depth_box.TabIndex = 6;
+ this.slab_depth_box.Text = "0.5";
+ this.slab_depth_box.TextChanged += new System.EventHandler(this.textBox12_TextChanged);
+ //
+ // shadow_angle_box
+ //
+ this.shadow_angle_box.Location = new System.Drawing.Point(26, 115);
+ this.shadow_angle_box.Name = "shadow_angle_box";
+ this.shadow_angle_box.Size = new System.Drawing.Size(75, 20);
+ this.shadow_angle_box.TabIndex = 5;
+ this.shadow_angle_box.Text = "15";
+ //
+ // upstream_check_box
+ //
+ this.upstream_check_box.Location = new System.Drawing.Point(26, 183);
+ this.upstream_check_box.Name = "upstream_check_box";
+ this.upstream_check_box.Size = new System.Drawing.Size(75, 20);
+ this.upstream_check_box.TabIndex = 4;
+ this.upstream_check_box.Text = "40";
+ //
+ // depo_prob_box
+ //
+ this.depo_prob_box.Location = new System.Drawing.Point(27, 219);
+ this.depo_prob_box.Name = "depo_prob_box";
+ this.depo_prob_box.Size = new System.Drawing.Size(75, 20);
+ this.depo_prob_box.TabIndex = 3;
+ this.depo_prob_box.Text = "50";
+ //
+ // offset_box
+ //
+ this.offset_box.Location = new System.Drawing.Point(26, 254);
+ this.offset_box.Name = "offset_box";
+ this.offset_box.Size = new System.Drawing.Size(75, 20);
+ this.offset_box.TabIndex = 2;
+ this.offset_box.Text = "1";
+ //
+ // init_depth_box
+ //
+ this.init_depth_box.Location = new System.Drawing.Point(27, 44);
+ this.init_depth_box.Name = "init_depth_box";
+ this.init_depth_box.Size = new System.Drawing.Size(75, 20);
+ this.init_depth_box.TabIndex = 1;
+ this.init_depth_box.Text = "4";
+ //
+ // DuneBox
+ //
+ this.DuneBox.AutoSize = true;
+ this.DuneBox.Location = new System.Drawing.Point(26, 18);
+ this.DuneBox.Name = "DuneBox";
+ this.DuneBox.Size = new System.Drawing.Size(108, 17);
+ this.DuneBox.TabIndex = 0;
+ this.DuneBox.Text = "Run with Dunes?";
+ this.DuneBox.UseVisualStyleBackColor = true;
+ //
+ // tabPage1
+ //
+ this.tabPage1.Controls.Add(this.textBox19);
+ this.tabPage1.Controls.Add(this.label104);
+ this.tabPage1.Controls.Add(this.SpatVarManningsCheckbox);
+ this.tabPage1.Controls.Add(this.MinQmaxvalue);
+ this.tabPage1.Controls.Add(this.textBox9);
+ this.tabPage1.Controls.Add(this.label77);
+ this.tabPage1.Controls.Add(this.textBox8);
+ this.tabPage1.Controls.Add(this.label66);
+ this.tabPage1.Controls.Add(this.textBox4);
+ this.tabPage1.Controls.Add(this.label64);
+ this.tabPage1.Controls.Add(this.courantbox);
+ this.tabPage1.Controls.Add(this.label38);
+ this.tabPage1.Controls.Add(this.label53);
+ this.tabPage1.Controls.Add(this.Q2box);
+ this.tabPage1.Controls.Add(this.label3);
+ this.tabPage1.Controls.Add(this.k_evapBox);
+ this.tabPage1.Controls.Add(this.textBox2);
+ this.tabPage1.Controls.Add(this.label46);
+ this.tabPage1.Controls.Add(this.minqbox);
+ this.tabPage1.Controls.Add(this.initscansbox);
+ this.tabPage1.Controls.Add(this.label9);
+ this.tabPage1.Controls.Add(this.label5);
+ this.tabPage1.Location = new System.Drawing.Point(4, 22);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage1.Size = new System.Drawing.Size(1323, 487);
+ this.tabPage1.TabIndex = 11;
+ this.tabPage1.Text = "Flow Model";
+ this.tabPage1.UseVisualStyleBackColor = true;
+ //
+ // textBox19
+ //
+ this.textBox19.Location = new System.Drawing.Point(331, 341);
+ this.textBox19.Name = "textBox19";
+ this.textBox19.Size = new System.Drawing.Size(118, 20);
+ this.textBox19.TabIndex = 235;
+ this.textBox19.Text = "null";
+ this.textBox19.Visible = false;
+ //
+ // label104
+ //
+ this.label104.AutoSize = true;
+ this.label104.Location = new System.Drawing.Point(247, 344);
+ this.label104.Name = "label104";
+ this.label104.Size = new System.Drawing.Size(78, 13);
+ this.label104.TabIndex = 234;
+ this.label104.Text = "Mannings n file";
+ this.label104.Visible = false;
+ //
+ // SpatVarManningsCheckbox
+ //
+ this.SpatVarManningsCheckbox.AutoSize = true;
+ this.SpatVarManningsCheckbox.Location = new System.Drawing.Point(293, 318);
+ this.SpatVarManningsCheckbox.Name = "SpatVarManningsCheckbox";
+ this.SpatVarManningsCheckbox.Size = new System.Drawing.Size(162, 17);
+ this.SpatVarManningsCheckbox.TabIndex = 230;
+ this.SpatVarManningsCheckbox.Text = "Spatially variable mannings n";
+ this.SpatVarManningsCheckbox.UseVisualStyleBackColor = true;
+ this.SpatVarManningsCheckbox.CheckedChanged += new System.EventHandler(this.SpatVarManningsCheckbox_CheckedChanged);
+ //
+ // MinQmaxvalue
+ //
+ this.MinQmaxvalue.Location = new System.Drawing.Point(302, 106);
+ this.MinQmaxvalue.Name = "MinQmaxvalue";
+ this.MinQmaxvalue.Size = new System.Drawing.Size(49, 20);
+ this.MinQmaxvalue.TabIndex = 216;
+ this.MinQmaxvalue.Text = "1000.0";
+ //
+ // textBox9
+ //
+ this.textBox9.Location = new System.Drawing.Point(229, 315);
+ this.textBox9.Name = "textBox9";
+ this.textBox9.Size = new System.Drawing.Size(38, 20);
+ this.textBox9.TabIndex = 215;
+ this.textBox9.Text = "0.04";
+ //
+ // label77
+ //
+ this.label77.Location = new System.Drawing.Point(95, 311);
+ this.label77.Name = "label77";
+ this.label77.Size = new System.Drawing.Size(128, 24);
+ this.label77.TabIndex = 214;
+ this.label77.Text = "Mannings n";
+ this.label77.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // textBox8
+ //
+ this.textBox8.Location = new System.Drawing.Point(229, 291);
+ this.textBox8.Name = "textBox8";
+ this.textBox8.Size = new System.Drawing.Size(38, 20);
+ this.textBox8.TabIndex = 213;
+ this.textBox8.Text = "0.8";
+ //
+ // label66
+ //
+ this.label66.Location = new System.Drawing.Point(95, 287);
+ this.label66.Name = "label66";
+ this.label66.Size = new System.Drawing.Size(128, 24);
+ this.label66.TabIndex = 212;
+ this.label66.Text = "froude # flow limit";
+ this.label66.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // textBox4
+ //
+ this.textBox4.Location = new System.Drawing.Point(229, 267);
+ this.textBox4.Name = "textBox4";
+ this.textBox4.Size = new System.Drawing.Size(38, 20);
+ this.textBox4.TabIndex = 211;
+ this.textBox4.Text = "0.00001";
+ //
+ // label64
+ //
+ this.label64.Location = new System.Drawing.Point(95, 263);
+ this.label64.Name = "label64";
+ this.label64.Size = new System.Drawing.Size(128, 24);
+ this.label64.TabIndex = 210;
+ this.label64.Text = "hflow threshold";
+ this.label64.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // courantbox
+ //
+ this.courantbox.Location = new System.Drawing.Point(229, 241);
+ this.courantbox.Name = "courantbox";
+ this.courantbox.Size = new System.Drawing.Size(38, 20);
+ this.courantbox.TabIndex = 209;
+ this.courantbox.Text = "0.7";
+ //
+ // label38
+ //
+ this.label38.Location = new System.Drawing.Point(95, 237);
+ this.label38.Name = "label38";
+ this.label38.Size = new System.Drawing.Size(128, 24);
+ this.label38.TabIndex = 208;
+ this.label38.Text = "Courant Number";
+ this.label38.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // label53
+ //
+ this.label53.Location = new System.Drawing.Point(101, 130);
+ this.label53.Name = "label53";
+ this.label53.Size = new System.Drawing.Size(120, 43);
+ this.label53.TabIndex = 205;
+ this.label53.Text = "Water depth threshold above which erosion will happen (m)";
+ this.label53.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label53, "MinQ is a threshold value, above which CAEASR treats flow as surface flow, it sho" +
+ "uld be scaled to the grid size. Try 0.01 for 10m grids and 0.25 for 50m..");
+ //
+ // Q2box
+ //
+ this.Q2box.Location = new System.Drawing.Point(229, 137);
+ this.Q2box.Name = "Q2box";
+ this.Q2box.Size = new System.Drawing.Size(49, 20);
+ this.Q2box.TabIndex = 204;
+ this.Q2box.Text = "0.01";
+ //
+ // label3
+ //
+ this.label3.Location = new System.Drawing.Point(82, 212);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(139, 24);
+ this.label3.TabIndex = 203;
+ this.label3.Text = "Evaporation rate (m/day)";
+ this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // k_evapBox
+ //
+ this.k_evapBox.Location = new System.Drawing.Point(229, 215);
+ this.k_evapBox.Name = "k_evapBox";
+ this.k_evapBox.Size = new System.Drawing.Size(80, 20);
+ this.k_evapBox.TabIndex = 202;
+ this.k_evapBox.Text = "0.0";
+ //
+ // textBox2
+ //
+ this.textBox2.Location = new System.Drawing.Point(229, 182);
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(40, 20);
+ this.textBox2.TabIndex = 200;
+ this.textBox2.Text = "0.005";
+ //
+ // label46
+ //
+ this.label46.Location = new System.Drawing.Point(93, 179);
+ this.label46.Name = "label46";
+ this.label46.Size = new System.Drawing.Size(128, 24);
+ this.label46.TabIndex = 201;
+ this.label46.Text = "Slope for edge cells";
+ this.label46.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // minqbox
+ //
+ this.minqbox.Location = new System.Drawing.Point(229, 106);
+ this.minqbox.Name = "minqbox";
+ this.minqbox.Size = new System.Drawing.Size(49, 20);
+ this.minqbox.TabIndex = 197;
+ this.minqbox.Text = "0.01";
+ //
+ // initscansbox
+ //
+ this.initscansbox.Location = new System.Drawing.Point(227, 68);
+ this.initscansbox.Name = "initscansbox";
+ this.initscansbox.Size = new System.Drawing.Size(40, 20);
+ this.initscansbox.TabIndex = 196;
+ this.initscansbox.Text = "1";
+ //
+ // label9
+ //
+ this.label9.Location = new System.Drawing.Point(101, 106);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(120, 24);
+ this.label9.TabIndex = 199;
+ this.label9.Text = "Min Q for depth calc";
+ this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.toolTip1.SetToolTip(this.label9, "MinQ is a threshold value, above which CAEASR treats flow as surface flow, it sho" +
+ "uld be scaled to the grid size. Try 0.01 for 10m grids and 0.25 for 50m..");
+ //
+ // label5
+ //
+ this.label5.Location = new System.Drawing.Point(29, 65);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(182, 26);
+ this.label5.TabIndex = 198;
+ this.label5.Text = "input/output difference allowed";
+ this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // tabPage3
+ //
+ this.tabPage3.Controls.Add(this.label101);
+ this.tabPage3.Controls.Add(this.label100);
+ this.tabPage3.Controls.Add(this.label99);
+ this.tabPage3.Controls.Add(this.textBox18);
+ this.tabPage3.Controls.Add(this.textBox17);
+ this.tabPage3.Controls.Add(this.textBox16);
+ this.tabPage3.Controls.Add(this.label98);
+ this.tabPage3.Controls.Add(this.label97);
+ this.tabPage3.Controls.Add(this.label96);
+ this.tabPage3.Controls.Add(this.textBox15);
+ this.tabPage3.Controls.Add(this.textBox14);
+ this.tabPage3.Controls.Add(this.textBox13);
+ this.tabPage3.Controls.Add(this.label95);
+ this.tabPage3.Controls.Add(this.label94);
+ this.tabPage3.Controls.Add(this.textBox12);
+ this.tabPage3.Controls.Add(this.textBox11);
+ this.tabPage3.Controls.Add(this.checkBox6);
+ this.tabPage3.Controls.Add(this.checkBox5);
+ this.tabPage3.Controls.Add(this.checkBox4);
+ this.tabPage3.Controls.Add(this.soildevbox);
+ this.tabPage3.Location = new System.Drawing.Point(4, 22);
+ this.tabPage3.Name = "tabPage3";
+ this.tabPage3.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage3.Size = new System.Drawing.Size(1323, 487);
+ this.tabPage3.TabIndex = 12;
+ this.tabPage3.Text = "Soil Development";
+ this.tabPage3.UseVisualStyleBackColor = true;
+ //
+ // label101
+ //
+ this.label101.AutoSize = true;
+ this.label101.Enabled = false;
+ this.label101.Location = new System.Drawing.Point(414, 153);
+ this.label101.Name = "label101";
+ this.label101.Size = new System.Drawing.Size(19, 13);
+ this.label101.TabIndex = 19;
+ this.label101.Text = "c4";
+ //
+ // label100
+ //
+ this.label100.AutoSize = true;
+ this.label100.Enabled = false;
+ this.label100.Location = new System.Drawing.Point(414, 124);
+ this.label100.Name = "label100";
+ this.label100.Size = new System.Drawing.Size(19, 13);
+ this.label100.TabIndex = 18;
+ this.label100.Text = "c3";
+ //
+ // label99
+ //
+ this.label99.AutoSize = true;
+ this.label99.Enabled = false;
+ this.label99.Location = new System.Drawing.Point(415, 94);
+ this.label99.Name = "label99";
+ this.label99.Size = new System.Drawing.Size(19, 13);
+ this.label99.TabIndex = 17;
+ this.label99.Text = "k2";
+ //
+ // textBox18
+ //
+ this.textBox18.Enabled = false;
+ this.textBox18.Location = new System.Drawing.Point(336, 150);
+ this.textBox18.Name = "textBox18";
+ this.textBox18.Size = new System.Drawing.Size(57, 20);
+ this.textBox18.TabIndex = 16;
+ this.textBox18.Text = "1";
+ //
+ // textBox17
+ //
+ this.textBox17.Enabled = false;
+ this.textBox17.Location = new System.Drawing.Point(336, 121);
+ this.textBox17.Name = "textBox17";
+ this.textBox17.Size = new System.Drawing.Size(57, 20);
+ this.textBox17.TabIndex = 15;
+ this.textBox17.Text = "-2.5";
+ //
+ // textBox16
+ //
+ this.textBox16.Enabled = false;
+ this.textBox16.Location = new System.Drawing.Point(337, 91);
+ this.textBox16.Name = "textBox16";
+ this.textBox16.Size = new System.Drawing.Size(57, 20);
+ this.textBox16.TabIndex = 14;
+ this.textBox16.Text = "70";
+ //
+ // label98
+ //
+ this.label98.AutoSize = true;
+ this.label98.Location = new System.Drawing.Point(99, 240);
+ this.label98.Name = "label98";
+ this.label98.Size = new System.Drawing.Size(19, 13);
+ this.label98.TabIndex = 13;
+ this.label98.Text = "c2";
+ //
+ // label97
+ //
+ this.label97.AutoSize = true;
+ this.label97.Location = new System.Drawing.Point(100, 207);
+ this.label97.Name = "label97";
+ this.label97.Size = new System.Drawing.Size(19, 13);
+ this.label97.TabIndex = 12;
+ this.label97.Text = "c1";
+ //
+ // label96
+ //
+ this.label96.AutoSize = true;
+ this.label96.Location = new System.Drawing.Point(101, 173);
+ this.label96.Name = "label96";
+ this.label96.Size = new System.Drawing.Size(19, 13);
+ this.label96.TabIndex = 11;
+ this.label96.Text = "k1";
+ //
+ // textBox15
+ //
+ this.textBox15.Location = new System.Drawing.Point(32, 238);
+ this.textBox15.Name = "textBox15";
+ this.textBox15.Size = new System.Drawing.Size(50, 20);
+ this.textBox15.TabIndex = 10;
+ this.textBox15.Text = "5";
+ //
+ // textBox14
+ //
+ this.textBox14.Location = new System.Drawing.Point(33, 205);
+ this.textBox14.Name = "textBox14";
+ this.textBox14.Size = new System.Drawing.Size(50, 20);
+ this.textBox14.TabIndex = 9;
+ this.textBox14.Text = "-0.5";
+ //
+ // textBox13
+ //
+ this.textBox13.Location = new System.Drawing.Point(32, 173);
+ this.textBox13.Name = "textBox13";
+ this.textBox13.Size = new System.Drawing.Size(50, 20);
+ this.textBox13.TabIndex = 8;
+ this.textBox13.Text = "0.0001";
+ //
+ // label95
+ //
+ this.label95.AutoSize = true;
+ this.label95.Location = new System.Drawing.Point(98, 121);
+ this.label95.Name = "label95";
+ this.label95.Size = new System.Drawing.Size(19, 13);
+ this.label95.TabIndex = 7;
+ this.label95.Text = "b1";
+ //
+ // label94
+ //
+ this.label94.AutoSize = true;
+ this.label94.Location = new System.Drawing.Point(97, 94);
+ this.label94.Name = "label94";
+ this.label94.Size = new System.Drawing.Size(20, 13);
+ this.label94.TabIndex = 6;
+ this.label94.Text = "P1";
+ //
+ // textBox12
+ //
+ this.textBox12.Location = new System.Drawing.Point(34, 120);
+ this.textBox12.Name = "textBox12";
+ this.textBox12.Size = new System.Drawing.Size(50, 20);
+ this.textBox12.TabIndex = 5;
+ this.textBox12.Text = "2";
+ //
+ // textBox11
+ //
+ this.textBox11.Location = new System.Drawing.Point(34, 91);
+ this.textBox11.Name = "textBox11";
+ this.textBox11.Size = new System.Drawing.Size(51, 20);
+ this.textBox11.TabIndex = 4;
+ this.textBox11.Text = "0.000053";
+ //
+ // checkBox6
+ //
+ this.checkBox6.AutoSize = true;
+ this.checkBox6.Enabled = false;
+ this.checkBox6.Location = new System.Drawing.Point(336, 61);
+ this.checkBox6.Name = "checkBox6";
+ this.checkBox6.Size = new System.Drawing.Size(127, 17);
+ this.checkBox6.TabIndex = 3;
+ this.checkBox6.Text = "Chemical Weathering";
+ this.checkBox6.UseVisualStyleBackColor = true;
+ //
+ // checkBox5
+ //
+ this.checkBox5.AutoSize = true;
+ this.checkBox5.Location = new System.Drawing.Point(35, 150);
+ this.checkBox5.Name = "checkBox5";
+ this.checkBox5.Size = new System.Drawing.Size(123, 17);
+ this.checkBox5.TabIndex = 2;
+ this.checkBox5.Text = "Physical Weathering";
+ this.checkBox5.UseVisualStyleBackColor = true;
+ //
+ // checkBox4
+ //
+ this.checkBox4.AutoSize = true;
+ this.checkBox4.Location = new System.Drawing.Point(33, 63);
+ this.checkBox4.Name = "checkBox4";
+ this.checkBox4.Size = new System.Drawing.Size(108, 17);
+ this.checkBox4.TabIndex = 1;
+ this.checkBox4.Text = "Bedrock lowering";
+ this.checkBox4.UseVisualStyleBackColor = true;
+ //
+ // soildevbox
+ //
+ this.soildevbox.AutoSize = true;
+ this.soildevbox.Location = new System.Drawing.Point(32, 16);
+ this.soildevbox.Name = "soildevbox";
+ this.soildevbox.Size = new System.Drawing.Size(147, 17);
+ this.soildevbox.TabIndex = 0;
+ this.soildevbox.Text = "Soil Development Model?";
+ this.soildevbox.UseVisualStyleBackColor = true;
+ //
+ // Panel1
+ //
+ this.Panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.Panel1.Controls.Add(this.tempdata2);
+ this.Panel1.Controls.Add(this.tempdata1);
+ this.Panel1.Controls.Add(this.graphicToGoogleEarthButton);
+ this.Panel1.Controls.Add(this.button4);
+ this.Panel1.Controls.Add(this.button3);
+ this.Panel1.Controls.Add(this.recirculatebox);
+ this.Panel1.Controls.Add(this.flowonlybox);
+ this.Panel1.Location = new System.Drawing.Point(7, 476);
+ this.Panel1.Name = "Panel1";
+ this.Panel1.Size = new System.Drawing.Size(822, 49);
+ this.Panel1.TabIndex = 145;
+ this.Panel1.Visible = false;
+ //
+ // tempdata2
+ //
+ this.tempdata2.Location = new System.Drawing.Point(548, 7);
+ this.tempdata2.Name = "tempdata2";
+ this.tempdata2.Size = new System.Drawing.Size(39, 20);
+ this.tempdata2.TabIndex = 145;
+ this.tempdata2.Text = "358";
+ //
+ // tempdata1
+ //
+ this.tempdata1.Location = new System.Drawing.Point(503, 7);
+ this.tempdata1.Name = "tempdata1";
+ this.tempdata1.Size = new System.Drawing.Size(39, 20);
+ this.tempdata1.TabIndex = 98;
+ this.tempdata1.Text = "358";
+ //
+ // graphicToGoogleEarthButton
+ //
+ this.graphicToGoogleEarthButton.Location = new System.Drawing.Point(693, 8);
+ this.graphicToGoogleEarthButton.Name = "graphicToGoogleEarthButton";
+ this.graphicToGoogleEarthButton.Size = new System.Drawing.Size(119, 28);
+ this.graphicToGoogleEarthButton.TabIndex = 150;
+ this.graphicToGoogleEarthButton.Text = "graphic to google earth";
+ this.graphicToGoogleEarthButton.UseVisualStyleBackColor = true;
+ this.graphicToGoogleEarthButton.Click += new System.EventHandler(this.graphicToGoogleEarthButton_Click);
+ //
+ // button4
+ //
+ this.button4.Location = new System.Drawing.Point(8, 4);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(112, 28);
+ this.button4.TabIndex = 144;
+ this.button4.Text = "update graphics";
+ this.button4.Click += new System.EventHandler(this.button4_Click_1);
+ //
+ // button3
+ //
+ this.button3.Font = new System.Drawing.Font("Monotype Corsiva", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.button3.Location = new System.Drawing.Point(604, 5);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(82, 29);
+ this.button3.TabIndex = 99;
+ this.button3.Text = "Grass now!";
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // recirculatebox
+ //
+ this.recirculatebox.Location = new System.Drawing.Point(221, 6);
+ this.recirculatebox.Name = "recirculatebox";
+ this.recirculatebox.Size = new System.Drawing.Size(128, 24);
+ this.recirculatebox.TabIndex = 89;
+ this.recirculatebox.Text = "recirculate sediment";
+ //
+ // flowonlybox
+ //
+ this.flowonlybox.Location = new System.Drawing.Point(370, 5);
+ this.flowonlybox.Name = "flowonlybox";
+ this.flowonlybox.Size = new System.Drawing.Size(104, 24);
+ this.flowonlybox.TabIndex = 97;
+ this.flowonlybox.Text = "flow only?";
+ //
+ // statusBar1
+ //
+ this.statusBar1.Location = new System.Drawing.Point(0, 561);
+ this.statusBar1.Name = "statusBar1";
+ this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
+ this.InfoStatusPanel,
+ this.IterationStatusPanel,
+ this.TimeStatusPanel,
+ this.QwStatusPanel,
+ this.QsStatusPanel,
+ this.tempStatusPanel});
+ this.statusBar1.ShowPanels = true;
+ this.statusBar1.Size = new System.Drawing.Size(1149, 22);
+ this.statusBar1.SizingGrip = false;
+ this.statusBar1.TabIndex = 144;
+ this.statusBar1.Text = "statusBar1";
+ //
+ // InfoStatusPanel
+ //
+ this.InfoStatusPanel.Name = "InfoStatusPanel";
+ this.InfoStatusPanel.Text = "info";
+ this.InfoStatusPanel.Width = 200;
+ //
+ // IterationStatusPanel
+ //
+ this.IterationStatusPanel.Name = "IterationStatusPanel";
+ this.IterationStatusPanel.Text = "iterations";
+ this.IterationStatusPanel.Width = 120;
+ //
+ // TimeStatusPanel
+ //
+ this.TimeStatusPanel.Name = "TimeStatusPanel";
+ this.TimeStatusPanel.Text = "time";
+ this.TimeStatusPanel.Width = 120;
+ //
+ // QwStatusPanel
+ //
+ this.QwStatusPanel.Name = "QwStatusPanel";
+ this.QwStatusPanel.Text = "Qw";
+ this.QwStatusPanel.Width = 120;
+ //
+ // QsStatusPanel
+ //
+ this.QsStatusPanel.Name = "QsStatusPanel";
+ this.QsStatusPanel.Text = "Qs";
+ this.QsStatusPanel.Width = 120;
+ //
+ // tempStatusPanel
+ //
+ this.tempStatusPanel.Name = "tempStatusPanel";
+ this.tempStatusPanel.Text = "tempdata";
+ //
+ // start_button
+ //
+ this.start_button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.start_button.Enabled = false;
+ this.start_button.Location = new System.Drawing.Point(114, 514);
+ this.start_button.Name = "start_button";
+ this.start_button.Size = new System.Drawing.Size(88, 25);
+ this.start_button.TabIndex = 146;
+ this.start_button.Text = "Start!";
+ this.start_button.Click += new System.EventHandler(this.main_loop);
+ //
+ // button1
+ //
+ this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.button1.Enabled = false;
+ this.button1.Location = new System.Drawing.Point(207, 514);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(100, 25);
+ this.button1.TabIndex = 147;
+ this.button1.Text = "Quit and save";
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // checkBox2
+ //
+ checkBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ checkBox2.AutoSize = true;
+ checkBox2.Location = new System.Drawing.Point(407, 543);
+ checkBox2.Name = "checkBox2";
+ checkBox2.Size = new System.Drawing.Size(108, 17);
+ checkBox2.TabIndex = 151;
+ checkBox2.Text = "point info window";
+ checkBox2.UseVisualStyleBackColor = true;
+ checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged);
+ //
+ // checkBox1
+ //
+ this.checkBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.checkBox1.AutoSize = true;
+ this.checkBox1.Checked = true;
+ this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.checkBox1.Location = new System.Drawing.Point(313, 522);
+ this.checkBox1.Name = "checkBox1";
+ this.checkBox1.Size = new System.Drawing.Size(77, 17);
+ this.checkBox1.TabIndex = 151;
+ this.checkBox1.Text = "view tabs?";
+ this.checkBox1.UseVisualStyleBackColor = true;
+ this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged_1);
+ //
+ // trackBar1
+ //
+ this.trackBar1.AutoSize = false;
+ this.trackBar1.Location = new System.Drawing.Point(216, 9);
+ this.trackBar1.Name = "trackBar1";
+ this.trackBar1.Size = new System.Drawing.Size(104, 20);
+ this.trackBar1.TabIndex = 149;
+ this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll);
+ //
+ // label61
+ //
+ this.label61.AutoSize = true;
+ this.label61.Location = new System.Drawing.Point(6, 14);
+ this.label61.Name = "label61";
+ this.label61.Size = new System.Drawing.Size(44, 13);
+ this.label61.TabIndex = 150;
+ this.label61.Text = "Graphic";
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.label62);
+ this.groupBox2.Controls.Add(this.comboBox1);
+ this.groupBox2.Controls.Add(this.trackBar1);
+ this.groupBox2.Controls.Add(this.label61);
+ this.groupBox2.Location = new System.Drawing.Point(12, -3);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(334, 35);
+ this.groupBox2.TabIndex = 151;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Visible = false;
+ //
+ // label62
+ //
+ this.label62.AutoSize = true;
+ this.label62.Location = new System.Drawing.Point(170, 14);
+ this.label62.Name = "label62";
+ this.label62.Size = new System.Drawing.Size(46, 13);
+ this.label62.TabIndex = 152;
+ this.label62.Text = "Contrast";
+ //
+ // comboBox1
+ //
+ this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBox1.FormattingEnabled = true;
+ this.comboBox1.Location = new System.Drawing.Point(54, 10);
+ this.comboBox1.Name = "comboBox1";
+ this.comboBox1.Size = new System.Drawing.Size(104, 21);
+ this.comboBox1.TabIndex = 151;
+ this.comboBox1.SelectedValueChanged += new System.EventHandler(this.comboBox1_SelectedValueChanged);
+ //
+ // groupBox3
+ //
+ this.groupBox3.Controls.Add(this.label63);
+ this.groupBox3.Controls.Add(this.trackBar2);
+ this.groupBox3.Location = new System.Drawing.Point(346, -3);
+ this.groupBox3.Name = "groupBox3";
+ this.groupBox3.Size = new System.Drawing.Size(156, 35);
+ this.groupBox3.TabIndex = 152;
+ this.groupBox3.TabStop = false;
+ this.groupBox3.Visible = false;
+ //
+ // label63
+ //
+ this.label63.AutoSize = true;
+ this.label63.Location = new System.Drawing.Point(6, 13);
+ this.label63.Name = "label63";
+ this.label63.Size = new System.Drawing.Size(34, 13);
+ this.label63.TabIndex = 154;
+ this.label63.Text = "Zoom";
+ //
+ // trackBar2
+ //
+ this.trackBar2.AutoSize = false;
+ this.trackBar2.Location = new System.Drawing.Point(42, 9);
+ this.trackBar2.Minimum = 1;
+ this.trackBar2.Name = "trackBar2";
+ this.trackBar2.Size = new System.Drawing.Size(104, 20);
+ this.trackBar2.TabIndex = 153;
+ this.trackBar2.Value = 5;
+ this.trackBar2.Scroll += new System.EventHandler(this.trackBar2_Scroll);
+ //
+ // backgroundWorker1
+ //
+ this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
+ //
+ // zoomPanImageBox1
+ //
+ this.zoomPanImageBox1.Image = null;
+ this.zoomPanImageBox1.Location = new System.Drawing.Point(7, 37);
+ this.zoomPanImageBox1.Name = "zoomPanImageBox1";
+ this.zoomPanImageBox1.Size = new System.Drawing.Size(824, 316);
+ this.zoomPanImageBox1.TabIndex = 148;
+ this.zoomPanImageBox1.Visible = false;
+ this.zoomPanImageBox1.Load += new System.EventHandler(this.zoomPanImageBox1_Load);
+ //
+ // Form1
+ //
+ this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
+ this.AutoScroll = true;
+ this.ClientSize = new System.Drawing.Size(1149, 583);
+ this.Controls.Add(checkBox2);
+ this.Controls.Add(this.checkBox1);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.tabControl1);
+ this.Controls.Add(this.start_button);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.statusBar1);
+ this.Controls.Add(this.Panel1);
+ this.Controls.Add(this.groupBox3);
+ this.Controls.Add(this.groupBox2);
+ this.Controls.Add(this.zoomPanImageBox1);
+ this.Menu = this.mainMenu1;
+ this.Name = "Form1";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "CAESAR Lisflood 1.9j";
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.Resize += new System.EventHandler(this.Form1_Resize);
+ this.tabControl1.ResumeLayout(false);
+ this.FilesTab.ResumeLayout(false);
+ this.FilesTab.PerformLayout();
+ this.groupBox6.ResumeLayout(false);
+ this.groupBox6.PerformLayout();
+ this.groupBox4.ResumeLayout(false);
+ this.groupBox4.PerformLayout();
+ this.NumericalTab.ResumeLayout(false);
+ this.NumericalTab.PerformLayout();
+ this.GrainTab.ResumeLayout(false);
+ this.GrainTab.PerformLayout();
+ this.DescriptionTab.ResumeLayout(false);
+ this.DescriptionTab.PerformLayout();
+ this.GridTab.ResumeLayout(false);
+ this.GridTab.PerformLayout();
+ this.HydrologyTab.ResumeLayout(false);
+ this.groupBox7.ResumeLayout(false);
+ this.groupBox7.PerformLayout();
+ this.groupBox5.ResumeLayout(false);
+ this.groupBox5.PerformLayout();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.tabPage2.ResumeLayout(false);
+ this.tabPage2.PerformLayout();
+ this.groupBox8.ResumeLayout(false);
+ this.groupBox8.PerformLayout();
+ this.tabPage4.ResumeLayout(false);
+ this.tabPage4.PerformLayout();
+ this.tabPage5.ResumeLayout(false);
+ this.tabPage5.PerformLayout();
+ this.tabPage1.ResumeLayout(false);
+ this.tabPage1.PerformLayout();
+ this.tabPage3.ResumeLayout(false);
+ this.tabPage3.PerformLayout();
+ this.Panel1.ResumeLayout(false);
+ this.Panel1.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.InfoStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.IterationStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.TimeStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.QwStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.QsStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.tempStatusPanel)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.groupBox3.ResumeLayout(false);
+ this.groupBox3.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.trackBar2)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+ #endregion
+
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.Run(new Form1());
+ }
+
+ private void start_button_Click(object sender, System.EventArgs e)
+ {
+ xtextbox.Visible=false;
+ ytextbox.Visible=false;
+ button1.Visible=false;
+ button2.Visible=false;
+ label1.Visible=false;
+ label2.Visible=false;
+
+ }
+
+ private void clearforms()
+ {
+ tabControl1.Visible = false;
+
+ }
+
+ private void main_loop(object sender, System.EventArgs e)
+ {
+
+
+ /********* locals ***********/
+ double tempflow=baseflow;
+ double ince=cycle+60;
+
+ gameClock = new System.Windows.Forms.Timer();
+
+// clearforms(); // MJ 14/01/05 this is done when load button is clicked
+ start_button.Enabled = false; // MJ 17/01/05
+ button1.Enabled = true; // MJ 17/01/05
+ comboBox1.Items.Add("water depth");
+ popComboBox1();
+
+ time_1=1;
+
+ calc_J(1.0);
+
+ save_time=cycle;
+ creep_time=cycle;
+ creep_time2 = cycle;
+ soil_erosion_time = cycle;
+ soil_development_time = cycle;
+ time_1=cycle;
+
+
+
+ mygraphics = this.CreateGraphics();
+
+
+ //slide_5();
+ get_area();
+
+ get_catchment_input_points();
+
+ this.InfoStatusPanel.Text="Starting main loop"; // MJ 14/01/05
+ //JMW
+
+ this.InfoStatusPanel.Text="Running"; // MJ 14/01/05
+
+ //Googel Earth Animation Directory
+ if (googleAnimationCheckbox.Checked)
+ {
+ if(Directory.Exists("animation"))Directory.Delete("animation",true);
+ Directory.CreateDirectory("animation");
+ }
+
+ time_factor = 1;
+
+ // Here we go into the main loop,
+ // I copied this bit of code to get
+ // the event handler to work - and it seems OK so why change it.
+ // so the main loop is really in erodedepo()
+
+ gameClock.Interval = 100;
+ gameClock.Tick += new EventHandler(update_screen_outputs);
+ gameClock.Start();
+
+ backgroundWorker1.RunWorkerAsync();
+
+ }
+
+ private void erodedepo() // erodedepo is the main loop from which all the main CL functions are called.
+ {
+ var watch = System.Diagnostics.Stopwatch.StartNew();
+
+ int y;
+ do
+ {
+
+ // set of lines commented out to instigate uplift at set times (if needed)
+ // line to do uplift at set time....
+ //if (cycle > (1440 * 18250) && elev[1, 1] < 100)
+ //{
+ // for (int x = 1; x <= 300; x++)
+ // {
+ // for (y = 1; y <= ymax; y++)
+ // {
+ // elev[x, y] += 10;//Convert.ToInt32(textBox6.Text);
+ // }
+ // }
+ // slide_5();
+ // slide_5();
+ // elev[1, 1] = 100;
+ //}
+
+ // Gez code: set previous cycle = to cycle
+ previous = cycle;
+ old_cycle = cycle % output_file_save_interval;
+ // end gez code
+
+ //
+ // section below workign out time step.
+ //
+ double input_output_difference = Math.Abs(waterinput - waterOut);
+ //this.tempdata1.Text = Convert.ToString(waterinput-waterOut);
+
+ // all dealing with calculating model time step
+ if (maxdepth <= water_depth_erosion_threshold) maxdepth = water_depth_erosion_threshold;
+ //if (time_factor < min_time_step) time_factor = min_time_step;
+ if (time_factor < (courant_number * (DX / Math.Sqrt(gravity * (maxdepth))))) time_factor = (courant_number * (DX / Math.Sqrt(gravity * (maxdepth))));
+ if (input_output_difference > in_out_difference && time_factor > (courant_number * (DX / Math.Sqrt(gravity * (maxdepth)))))
+ {
+ time_factor = courant_number * (DX / Math.Sqrt(gravity * (maxdepth)));
+ }
+
+ double local_time_factor = time_factor;
+ if (local_time_factor > (courant_number * (DX / Math.Sqrt(gravity * (maxdepth))))) local_time_factor = courant_number * (DX / Math.Sqrt(gravity * (maxdepth)));
+
+
+
+ // code to incrememtn counters. Counter is model iterations, cycle is the actual (modelled reality) time
+ counter++;
+ cycle += time_factor / 60;
+ // cycle in min
+ // time_factor in secs.
+
+ // Gez code
+ new_cycle = cycle % output_file_save_interval;
+ // end gez code
+
+
+ //
+ // adding in sand movement gradually
+ if (DuneBox.Checked == true && cycle >= duneupdatetime)
+ {
+ double factor = (max_time_step/60) / double.Parse(dune_time_box.Text);
+ //factor = 1;
+ for (int x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ if (elev_diff[x, y] != 0)
+ {
+ if (elev[x, y] < init_elevs[x, y] && elev_diff[x, y] > 0) elev_diff[x, y] = 0;
+ elev[x, y] -= elev_diff[x, y] * factor;
+ //elev_diff[x, y] = 0;
+ if (index[x, y] != -9999 && elev_diff[x, y] < 0 && water_depth[x, y] >= water_depth_erosion_threshold)
+ {
+ grain[index[x, y], 1] -= elev_diff[x, y] * factor;
+ sand[x, y] += elev_diff[x, y] * factor;
+ sort_active(x, y);
+ }
+ }
+ }
+ }
+ duneupdatetime = cycle + (max_time_step/60);
+ }
+
+
+ //// This whole section below deals with the water inputs. A separate part for point inputs and
+ //// a different bit for gradual inputs from the whole of the catchment. (reach or catchment)
+ // first zero counter to tally up water inputs
+ waterinput = 0;
+
+ // reach mode water inputs
+ if (reach_mode_box.Checked == true) reach_water_and_sediment_input(local_time_factor);
+
+ // catchment mode water inputs
+ if (catchment_mode_box.Checked == true) catchment_water_input_and_hydrology(local_time_factor);
+
+ // tidal/stage mode water inputs
+ if (checkBox3.Checked == true) stage_tidal_input(local_time_factor);
+
+ // route water and update flow depths
+
+ qroute();
+ depth_update();
+
+ // check scan area every 5 iters.. maybe re-visit for reach mode if it causes too much backing up of sed. see code commented below nex if..
+ if (Math.IEEERemainder(counter, 5) == 0)
+ {
+ scan_area();
+ }
+
+ // carry out erosion
+
+ if (!flowonlybox.Checked)
+ {
+ if (counter >= erode_call)
+ {
+ erode_mult = (int)(ERODEFACTOR / erode(erode_mult));
+ if (erode_mult < 1) erode_mult = 1;
+ if (erode_mult > 10) erode_mult = 10;
+
+ erode_call = counter + erode_mult;
+ //this.tempdata1.Text = Convert.ToString(erode_mult);
+ }
+ //
+ // carry out lateral erosion
+ //
+ if (newlateral.Checked && counter >= lateralcounter)
+ {
+ lateral3();
+ lateralcounter = counter + (50 * erode_mult);
+ }
+ }
+
+ //
+ // work out water coming out..
+ // and zero water depths in edges..
+ //
+ // this doesnt actually zero water - sets it to the min water depth
+ // If this is not done, then zero'd water depth prevents material being moved to the edge cells and thus eroded fromthe catchment
+ // leading to buildups of sediment at the edge.
+
+ double temptot = 0;
+ for (y = 1; y <= ymax; y++)
+ {
+ if (water_depth[xmax, y] > water_depth_erosion_threshold)
+ {
+ temptot += (water_depth[xmax, y]-water_depth_erosion_threshold) * DX * DX / local_time_factor;
+ // and zero water depths at RH end
+ water_depth[xmax, y] = water_depth_erosion_threshold;
+ }
+ if (water_depth[1, y] > water_depth_erosion_threshold)
+ {
+ temptot += (water_depth[1, y]-water_depth_erosion_threshold) * DX * DX / local_time_factor;
+ // and zero water depths at RH end
+ water_depth[1, y] = water_depth_erosion_threshold;
+ }
+ }
+ for (int x = 1; x <= xmax; x++)
+ {
+ if (water_depth[x, 1] > water_depth_erosion_threshold)
+ {
+ temptot += (water_depth[x, 1]-water_depth_erosion_threshold) * DX * DX / local_time_factor;
+ // and zero water depths at RH end
+ water_depth[x, 1] = water_depth_erosion_threshold;
+ }
+ if (water_depth[x, ymax] > water_depth_erosion_threshold)
+ {
+ temptot += (water_depth[x, ymax]-water_depth_erosion_threshold) * DX * DX / local_time_factor;
+ // and zero water depths at RH end
+ water_depth[x, ymax] = water_depth_erosion_threshold;
+ }
+ }
+ waterOut = temptot;
+
+ // then carry out soil creep.
+ //- also growing grass...
+ // and dunes...
+ // slide_3 is looking at landslides only in the 'scanned' area
+ // slide_4 is to do with dunes
+ // slide_5 is landslides everywhere..
+
+ if (!flowonlybox.Checked)
+ {
+ // carry out local landslides every X iterations...
+ if (Math.IEEERemainder(counter, 10) == 0)
+ {
+ slide_3();
+ }
+ // soil creep - here every 10 days
+ if (cycle > creep_time)
+ {
+ // updating counter creep_time
+ creep_time += 14400;
+ // now calling soil creep function
+ creep(0.028);//(0.019);//(0.083);
+ }
+ //// doing sand dunes part
+
+ if (DuneBox.Checked == true && cycle > dune_time)
+ {
+ dune1(0);
+ dune_time += double.Parse(dune_time_box.Text); ;
+ }
+
+ //
+ // now calling soil erosion function - also checks if soil erosion rate is > 0
+ // to prevent it calling it if not required.
+ // then soil erosion time
+ //
+
+ if (SOIL_RATE > 0 && cycle > soil_erosion_time)
+ {
+ get_area(); // gets drainage area before doing soil erosion - as used in the calcs. therefore good to have accurate/fresh drianage area
+ soil_erosion_time += 1440;// do soil erosion daily
+ //if (soilerosionBox.Checked == true) SOIL_RATE = ((0.768383841078 * j_mean + 0.000001979564));
+ soilerosion(0.0028);
+ }
+
+ if (cycle > soil_development_time)
+ {
+ soil_development_time += 1440 * 365 / 12;
+ if (soildevbox.Checked) soil_development();
+ }
+
+ }
+
+
+
+ // other slope things.. done every day.
+ if (cycle > creep_time2)
+ {
+ evaporate(1440);
+ // updating counter creep_time2
+ creep_time2 += 1440;// daily
+
+ if (!flowonlybox.Checked)
+ {
+
+ slide_5();
+
+ // calling siberia model (if wanted)
+ if (SiberiaBox.Checked == true)
+ {
+ get_area();
+ siberia(0.002739); // the value passed is the time step (in years)
+ }
+ // next line does grass growing, must change it if changes from monthly update
+ if (grow_grass_time > 0) grow_grass(1 / (grow_grass_time * 365));
+
+ }
+ }
+
+ // Gez
+ temptotal = temptot;
+
+ // call output routine
+ // only if iteration by iteration output is required.
+ if (checkBoxGenerateTimeSeries.Checked) // MJ 20/01/05
+ {
+ output_data();
+ }
+ // end gez code
+
+ //Google Earth Animation outputs data to file.
+ if (cycle >= save_time2 && googleAnimationCheckbox.Checked)
+ {
+ googleoutputflag = true;
+ save_time2 += save_interval2;
+ imageCount2 = imageCount2 + 1;
+ }
+
+ // save data & draw graphics every specified interval. Passes the cycle whuch becomes the file extension
+ if (cycle >= save_time && uniquefilecheck.Checked == true)
+ {
+ save_data_and_draw_graphics();
+ save_time += saveinterval;
+ }
+ // if its at the end of the run kill the program
+ } while (cycle / 60 < maxcycle);
+
+ watch.Stop();
+ MessageBox.Show($"finished. Runtime: {watch.Elapsed} ");
+ // end of main loop!!
+ }
+
+
+ void catchment_water_input_and_hydrology(double local_time_factor)
+ {
+ // revised way of determining water input 21/8/18
+ double tempwaterinput = 0;
+
+ for (int z = 1; z <= totalinputpoints; z++)
+ {
+ int x = catchment_input_x_coord[z];
+ int y = catchment_input_y_coord[z];
+ double water_add_amt = (j_mean[rfarea[x, y]] * nActualGridCells[rfarea[x, y]]) / (catchment_input_counter[rfarea[x, y]]) * local_time_factor;
+ // revised way of getting water input 21/8/18
+ tempwaterinput += water_add_amt * DX * DX / local_time_factor;
+ if (water_add_amt > ERODEFACTOR) water_add_amt = ERODEFACTOR;
+
+ water_depth[x, y] += water_add_amt;
+ //if ((j_mean * nActualGridCells) / (catchment_input_counter) * local_time_factor > ERODEFACTOR) this.tempStatusPanel.Text = "C add= " + Convert.ToString((j_mean * nActualGridCells) / (catchment_input_counter) * local_time_factor);
+ }
+
+ waterinput = tempwaterinput;
+
+ // if the input type flag is 1 then the discharge is input from the hydrograph...
+ if (cycle >= time_1)
+ {
+ do
+ {
+ time_1++;
+ calc_J(time_1);
+
+ if (time_factor > max_time_step)
+ {
+
+ double j_mean_max_temp = 0;
+ for (int n = 1; n <= rfnum; n++) if (new_j_mean[n] > j_mean_max_temp) j_mean_max_temp = new_j_mean[n];
+ if (j_mean_max_temp > (0.2 / (xmax * ymax * DX * DX)))
+ // check after variable rainfall area has been added...
+ //stops code going too fast when there is actual flow in the channels greater than 0.2cu.
+ {
+ cycle = time_1 + (max_time_step / 60);
+ time_factor = max_time_step;
+ }
+ }
+ } while (time_1 < cycle);
+ }
+
+ calchydrograph(time_1 - cycle);
+
+ double jmeanmax = 0;
+ for (int n = 1; n <= rfnum; n++) if (j_mean[n] > jmeanmax) jmeanmax = j_mean[n];
+
+ if (jmeaninputfilebox.Checked == true) j_mean[1] = ((hourly_rain_data[(int)(cycle / rain_data_time_step), 1]) / Math.Pow(DX, 2)) / nActualGridCells[1];
+
+ if (jmeanmax >= baseflow)
+ {
+ baseflow = baseflow * 3;
+ //Console.Write("going up.. \n");
+ get_area();
+ get_catchment_input_points();
+ }
+
+
+ if (baseflow > (jmeanmax * 3) && baseflow > 0.000001)
+ {
+ baseflow = jmeanmax * 1.25;
+ //Console.Write("going down.. \n");
+ get_area();
+ get_catchment_input_points();
+ }
+
+
+ }
+
+ void reach_water_and_sediment_input(double local_time_factor)
+ {
+ double[] remove_from_temp_grain;
+
+ remove_from_temp_grain = new Double[G_MAX + 2];
+
+ if (reach_mode_box.Checked == true)
+ {
+ for (int n = 0; n <= number_of_points - 1; n++)
+ {
+ int tempn;
+
+ int x = inpoints[n, 0];
+ int y = inpoints[n, 1];
+
+
+
+ double adding_factor = 1;
+ // tot up total to be added - and if its greater than number of cells and erode_limit
+ // then reduce what can be added via a factor.
+ double added_tot = 0;
+
+ if (water_depth[x, y] > water_depth_erosion_threshold)
+ {
+ for (tempn = 5; tempn <= G_MAX+3; tempn++)
+ {
+ added_tot += (Math.Abs(inputfile[n, (int)(cycle / input_time_step), tempn])) / div_inputs / (DX * DX) / (input_time_step * 60) * time_factor;
+ }
+
+ // then multiply by the recirculation factor..
+ if (added_tot / number_of_points > ERODEFACTOR * 0.75) adding_factor = (ERODEFACTOR * 0.75) / (added_tot / number_of_points);
+
+ if (index[x, y] == -9999) addGS(x, y);
+ for (tempn = 5; tempn <= G_MAX+3; tempn++)
+ {
+ double amount_to_add = adding_factor * (Math.Abs(inputfile[n, (int)(cycle / input_time_step), tempn])) / div_inputs / (DX * DX) / (input_time_step * 60) * time_factor;
+ if (isSuspended[tempn - 4])
+ {
+ Vsusptot[x, y] += amount_to_add;
+ }
+ else
+ {
+ grain[index[x, y], tempn - 4] += amount_to_add;
+ elev[x, y] += amount_to_add;
+ }
+
+ }
+ }
+ }
+ }
+
+ // add in recirculating sediment.
+ if (recirculatebox.Checked == true && reach_mode_box.Checked == true)
+ {
+ int tempn;
+ double adding_factor = 1;
+ // tot up total to be added - and if its greater than number of cells and erode_limit
+ // then reduce what can be added via a factor.
+ double added_tot = 0;
+
+ for (tempn = 5; tempn <= G_MAX+3 ; tempn++)
+ {
+ added_tot += temp_grain[tempn - 4];
+ remove_from_temp_grain[tempn - 4] = 0; // quick way of emptying this variable
+ }
+
+ // then multiply by the recirculation factor..
+ if (added_tot / number_of_points > ERODEFACTOR * 0.75) adding_factor = (ERODEFACTOR * 0.75) / (added_tot / number_of_points);
+
+
+ for (int n = 0; n <= number_of_points - 1; n++)
+ {
+ int x = inpoints[n, 0];
+ int y = inpoints[n, 1];
+
+ if (water_depth[x, y] > water_depth_erosion_threshold)
+ {
+
+ for (tempn = 5; tempn <= G_MAX+3 ; tempn++)
+ {
+ if (index[x, y] == -9999) addGS(x, y);
+ if (isSuspended[tempn - 4])
+ {
+ Vsusptot[x, y] += ((temp_grain[tempn - 4] * adding_factor) / number_of_points);
+ remove_from_temp_grain[tempn - 4] += ((temp_grain[tempn - 4] * adding_factor) / number_of_points);
+ }
+ else
+ {
+ grain[index[x, y], tempn - 4] += ((temp_grain[tempn - 4] * adding_factor) / number_of_points);
+ elev[x, y] += ((temp_grain[tempn - 4] * adding_factor) / number_of_points);
+ remove_from_temp_grain[tempn - 4] += ((temp_grain[tempn - 4] * adding_factor) / number_of_points);
+ }
+
+ }
+ }
+ }
+
+ }
+
+ for (int n = 1; n <= G_MAX; n++)
+ {
+ temp_grain[n] -= remove_from_temp_grain[n];
+ }
+
+
+
+ for (int n = 0; n <= number_of_points - 1; n++)
+ {
+ int x = inpoints[n, 0];
+ int y = inpoints[n, 1];
+ double interpolated_input1 = inputfile[n, (int)(cycle / input_time_step), 1];
+ double interpolated_input2 = inputfile[n, (int)(cycle / input_time_step) + 1, 1];
+ double proportion_between_time1and2 = ((((int)(cycle / input_time_step)+ 1 ) * input_time_step) - cycle)
+ / input_time_step;
+
+
+ double input = interpolated_input1 + ((interpolated_input2 - interpolated_input1) * (1-proportion_between_time1and2));
+
+ //j_mean = old_j_mean + (((new_j_mean - old_j_mean) / 2) * (2 - time));
+
+ waterinput += (input / div_inputs);
+
+ // trial adding SS line
+ // if(counter<500)Vsusptot[x+5, y] = 0.1;
+ water_depth[x, y] += (input / div_inputs) / (DX * DX) * local_time_factor;
+ // also have to add suspended sediment here..
+ // from file
+
+ }
+
+
+
+ }
+
+ void stage_tidal_input(double local_time_factor)
+ {
+
+ for (int x = Math.Min(fromx, tox); x <= Math.Max(fromx, tox); x++)
+ {
+ for (int y = Math.Min(fromy, toy); y <= Math.Max(fromy, toy); y++)
+ {
+ double interpolated_input1 = stage_inputfile[(int)(cycle / stage_input_time_step)];
+ double interpolated_input2 = stage_inputfile[(int)(cycle / stage_input_time_step) + 1];
+ double proportion_between_time1and2 = ((((int)(cycle / stage_input_time_step) + 1) * stage_input_time_step) - cycle)
+ / stage_input_time_step;
+
+
+ double input = interpolated_input1 + ((interpolated_input2 - interpolated_input1) * (1 - proportion_between_time1and2));
+
+ if (elev[x, y] > -9999 && input > elev[x, y])
+ {
+ water_depth[x, y] = input - elev[x, y];
+ if (water_depth[x, y] > 0) Vsusptot[x, y] = water_depth[x, y] * 0.001;//0.0005 is 500mg l.. approx.
+ }
+ }
+
+ }
+
+ }
+
+ void soil_development() // all based on Vanwalleghem et al., 2013 (JoGR:ES)
+ {
+ for (int x = 1; x <= xmax; x++)
+ {
+ for (int y = 1; y <= ymax; y++)
+ {
+ if (elev[x, y] > -9999) // ensure it is not a no-data point
+ {
+ if (index[x, y] == -9999) addGS(x, y); // first ensure that there is grainsize defined for that cell
+
+ if (checkBox4.Checked) // Bedrock lowering
+ {
+ if (bedrock[x, y] > -9999 && elev[x,y]>=bedrock[x,y])
+ {
+ double h = elev[x, y] - bedrock[x, y];
+ if (h == 0) h = 0.001;
+ bedrock[x,y] += - P1 * Math.Exp(-b1 * (h)) / 12; // / 12 to make it months
+ }
+ }
+
+ if (checkBox5.Checked) // Physical Weathering
+ {
+ //amt = k1 * Math.Exp(-c1*depth_below_surface) * (c2/Math.Log10(particle_size) * time;
+ // start from top then work down - means no need to hold values in temp arrays...
+ double Di = 0;
+ int xyindex = index[x, y];
+
+
+ for (int n = 2; n <= (G_MAX - 1); n++)
+ {
+ if ((grain[xyindex, n] > 0.0))
+ {
+ switch (n)
+ {
+ case 1: Di = d1; break;
+ case 2: Di = d2; break;
+ case 3: Di = d3; break;
+ case 4: Di = d4; break;
+ case 5: Di = d5; break;
+ case 6: Di = d6; break;
+ case 7: Di = d7; break;
+ case 8: Di = d8; break;
+ case 9: Di = d9; break;
+ }
+
+ double amount = grain[xyindex, n] * ((-(k1 * Math.Exp(-c1 * active * 0.5) * (c2 / Math.Log(Di)) * 1)) / 12); // / 12 to make it months
+ grain[xyindex, n] -= amount;
+ if (n == 2)
+ {
+ grain[xyindex, n - 1] += amount;
+ }
+ else
+ {
+ grain[xyindex, n - 1] += amount * 0.05;
+ grain[xyindex, n - 2] += amount * 0.95;
+ }
+
+ for (int z = 1; z <= 9; z++)
+ {
+ double amount2 = strata[xyindex, z - 1, n] * ((-(k1 * Math.Exp(-c1 * active * z) * (c2 / Math.Log(Di)) * 1)) / 12); // / 12 to make it months
+
+ strata[xyindex, z-1, n] -= amount;
+ if (n == 2)
+ {
+ strata[xyindex, z-1, n - 1] += amount;
+ }
+ else
+ {
+ strata[xyindex, z-1, n - 1] += amount * 0.05;
+ strata[xyindex, z-1, n - 2] += amount * 0.95;
+ }
+
+
+ }
+ }
+ }
+
+ //for (int z = 9; z >= 1; z--)
+ //{
+ // for (int n = 0; n <= G_MAX - 2; n++)
+ // {
+
+ // strata[xyindex, z, n] = strata[xyindex, z - 1, n];
+
+ // }
+ //}
+
+
+ }
+
+ if (checkBox6.Checked) // Chemical Weathering
+ {
+ //amt = k2 * Math.Exp(-c3 * depth_below_surface) * c4 * Specific_surface_area * time;
+ }
+ }
+ }
+ }
+ }
+
+ void get_catchment_input_points()
+ {
+ totalinputpoints = 0;
+ for (int n = 1; n <= rfnum; n++) catchment_input_counter[n] = 0;
+ for (int x = 1; x <= xmax; x++)
+ {
+ for (int y = 1; y <= ymax; y++)
+ {
+ if ((area[x, y] * baseflow * DX * DX) > MIN_Q && (area[x, y] * baseflow * DX * DX) < Convert.ToDouble(MinQmaxvalue.Text))
+ {
+ totalinputpoints++;
+ catchment_input_x_coord[totalinputpoints] = x;
+ catchment_input_y_coord[totalinputpoints] = y;
+ catchment_input_counter[rfarea[x, y]]++;
+ }
+ }
+ }
+ // could be the below line causing problems..?
+ //if (totalinputpoints == 0) totalinputpoints = 1;
+ }
+
+ void evaporate(double time)
+ {
+ double evap_amount = k_evap * (time / 1440);
+ // now reduce if greater than erodedepo - to prevent instability
+ if (evap_amount > ERODEFACTOR) evap_amount = ERODEFACTOR;
+
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax, options, delegate(int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+ // removes water in rate of mm per day..
+ if (water_depth[x, y] > 0)
+ {
+ water_depth[x, y] -= evap_amount;
+ if (water_depth[x, y] < 0) water_depth[x, y] = 0;
+ }
+
+ }
+
+ });
+ }
+
+ void save_data_every1000iters()
+ {
+ if (menuItem25.Checked == true) save_data(1, 0); // save waterdepths
+ if (menuItem13.Checked == true) save_data(2, 0); // save elevdiff
+ if (menuItem12.Checked == true) save_data(3, 0); // save elevations
+ if (menuItem14.Checked == true) save_data(4, 0); // save grainsize
+ if (menuItem29.Checked == true) save_data(15, 0); // save d50 top layer
+ if (menuItem33.Checked == true) save_data(16, 0); // save velocity
+ if (menuItem34.Checked == true) save_data(17, 0); // save soil_saturation
+ slide_5();
+
+ }
+
+ void save_data_and_draw_graphics()
+ {
+ if (menuItem25.Checked == true) save_data(1, Math.Abs(cycle)); // save waterdepths
+ if (menuItem13.Checked == true) save_data(2, Math.Abs(cycle)); // save elevdiff
+ if (menuItem12.Checked == true) save_data(3, Math.Abs(cycle)); // save elevations
+ if (menuItem14.Checked == true) save_data(4, Math.Abs(cycle)); // save grainsize
+ if (menuItem29.Checked == true) save_data(15, Math.Abs(cycle)); // save d50 top layer
+ if (menuItem33.Checked == true) save_data(16, Math.Abs(cycle)); // save velocity
+ if (menuItem34.Checked == true) save_data(17, Math.Abs(cycle)); // save soil saturation
+ ";
+ kml = kml + "\n"
+ + "\nAnimation";
+ kmlsr.WriteLine(kml);
+ kml = "";
+ }
+ kml = kml + "\n"
+ + "\nUntitled Image Overlay";
+ kml = kml + "\n"
+ + "\n" + kmlTime + ""
+ + "\n" + kmlTime + ""
+ + "\n"
+ + "\n"
+ + "\nmySavedImage" + imageCount2 + ".png"
+ + "\n"
+ + "\n";
+ kml = kml + "\n" + urfinalLati + ""
+ + "\n" + llfinalLati + ""
+ + "\n" + urfinalLongi + ""
+ + "\n" + llfinalLongi + "\n";
+ kml = kml + @"
+ ";
+ kmlsr.WriteLine(kml);
+ kml = "";
+ kmlsr.Close();
+ //imageCount2 = imageCount2 + 1;
+ //save_time2 += save_interval2;
+ }
+ }
+
+ void calchydrograph(double time)
+ {
+ for (int n = 1; n <= rfnum; n++)
+ {
+ j_mean[n] = old_j_mean[n] + (((new_j_mean[n] - old_j_mean[n]) / 2) * (2 - time));
+ }
+ }
+
+
+
+ void output_data()
+ {
+ int n;
+
+ // Qw (m3) value at timestep cycle (current
+ // Qw_newvol+=temptotal*((cycle-previous)*output_file_save_interval); // replaced by line below MJ 25/01/05
+ Qw_newvol+=temptotal*((cycle-previous)*60); // 60 secs per min
+ for(int nn=1;nn<=rfnum;nn++) Jw_newvol += (j_mean[nn]*DX*DX*nActualGridCells[nn]) * ((cycle-previous)*60);
+
+ //Catch all time steps that pass one or more hour marks
+ if ((new_cycle=output_file_save_interval))
+ {
+ while ((tx>previous)&&(cycle>=tx))
+ {
+ hours++;
+
+ // Step1: Calculate hourly total sediment Q (m3)
+ Qs_step = globalsediq-old_sediq;
+ Qs_over = Qs_step*((cycle-tx)/(cycle-tlastcalc));
+ Qs_hour = Qs_step-Qs_over+Qs_last;
+
+ // reset Qs_last and old_sediq for large time steps
+ if (cycle>=tx+output_file_save_interval)
+ {
+ Qs_last = 0;
+ old_sediq = globalsediq - Qs_over;
+ }
+
+ // reset Qs_last and old_sediq for small time steps
+ if (cycle=tx+output_file_save_interval)
+ {
+ Qg_last[n] = 0;
+ Qg_last2[n] = 0;
+ old_sum_grain[n] = sum_grain[n] - Qg_over[n];
+ old_sum_grain2[n] = sum_grain2[n] - Qg_over2[n];
+ }
+ // Reset Qg_last[n] and old_sum_grain[n] for small time steps
+ if (cycle=tx+output_file_save_interval)
+ {
+ Qw_lastvol = 0;
+ Qw_oldvol = Qw_newvol-Qw_overvol;
+
+ // same for Jw (j_mean contribution) MJ 14/03/05
+ Jw_lastvol = 0;
+ Jw_oldvol = Jw_newvol-Jw_overvol;
+ }
+
+ // reset Qw_lastvol and Qw_oldvol for small time steps
+ if (cycle -9999)
+ {
+ tomsedi += (init_elevs[x, y] - elev[x, y]) * DX * DX;
+ }
+ }
+ }
+ output = output + string.Format(" {0:F6}", tomsedi);
+ }
+ else
+ {
+ output = output + string.Format(" {0:F6}", sand_out);
+ sand_out = 0;
+ }
+ output = output + string.Format(" {0:F10}",Qs_hour);
+ for (n=1;n<=G_MAX-1;n++)
+ {
+ output = output + string.Format(" {0:F10}",Qg_hour[n]);
+ //output = output+" "+Qg_hour[n];
+ }
+
+ try
+ {
+ StreamWriter sw = File.AppendText(CATCH_FILE);
+ sw.WriteLine(output);
+ sw.Close();
+ }
+ catch (Exception)
+ {
+
+ }
+
+
+ }
+ tlastcalc = cycle;
+ }
+ }
+
+
+ int read_header()
+ {
+ string FILE_NAME;
+ int z;
+ string[] lineArray2;
+ int sp;
+
+ inputheader = new string[6];
+
+ FILE_NAME = this.openfiletextbox.Text;
+ if (!File.Exists(FILE_NAME))
+ {
+ MessageBox.Show("No such DEM data file..");
+ return 0;
+ }
+
+ try
+ {
+
+ //read headers
+ StreamReader sr = File.OpenText(FILE_NAME);
+ for(z = 1; z <= 6; z++)
+ {
+ inputheader[z-1] = sr.ReadLine();
+ }
+ sr.Close();
+
+ // get xmax, ymax and DX from input headers
+
+ lineArray2 = inputheader[0].Split(new char[]{' '});
+ sp = 1;
+ while (lineArray2[sp] == "") sp++;
+ xmax = int.Parse(lineArray2[sp]);
+
+ lineArray2 = inputheader[1].Split(new char[]{' '});
+ sp = 1;
+ while (lineArray2[sp] == "") sp++;
+ ymax = int.Parse(lineArray2[sp]);
+
+ lineArray2 = inputheader[2].Split(new char[] { ' ' });
+ sp = 1;
+ while (lineArray2[sp] == "") sp++;
+ xll = double.Parse(lineArray2[sp]);
+
+ lineArray2 = inputheader[3].Split(new char[] { ' ' });
+ sp = 1;
+ while (lineArray2[sp] == "") sp++;
+ yll = double.Parse(lineArray2[sp]);
+
+ lineArray2 = inputheader[4].Split(new char[]{' '});
+ sp = 1;
+ while (lineArray2[sp] == "") sp++;
+ DX = double.Parse(lineArray2[sp]);
+ root = (Math.Sqrt(Math.Pow(DX, 2) + Math.Pow(DX, 2))); // imp added 11/07
+
+ }
+ catch(Exception)
+ {
+ MessageBox.Show("Theres a problem with the header in the DEM file");
+ }
+
+ return 1;
+ }
+
+
+ void load_data()
+ {
+ int x,y=1,z,xcounter,x1=0,y1=0,n;
+ String input;
+ double tttt=0.00;
+
+ char[] delimiterChars = {' ',',','\t'};
+
+ // load dem
+
+ string FILE_NAME = this.openfiletextbox.Text;
+ if (!File.Exists(FILE_NAME))
+ {
+ MessageBox.Show("No such DEM data file..");
+ return;
+ }
+
+ StreamReader sr = File.OpenText(FILE_NAME);
+
+ //read headers
+ for(z=1;z<=6;z++)
+ {
+ input=sr.ReadLine();
+ }
+ y=1;
+
+ while ((input=sr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter=1;
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+
+ if(lineArray[x]!=""&&xcounter<=xmax)
+ {
+ tttt=double.Parse(lineArray[x]);
+ elev[xcounter,y]=tttt;
+ //if(xcounter==1)elev[xcounter,y]+=4;
+ init_elevs[xcounter,y]=elev[xcounter,y];
+ xcounter++;
+ }
+ }
+ y++;
+
+ }
+ sr.Close();
+
+ // load hydro coverage
+ ///////////////////////////////////////
+
+ try
+ {
+ FILE_NAME = this.hydroindexBox.Text;
+ if (FILE_NAME != "null")
+ {
+ sr = File.OpenText(FILE_NAME);
+
+ //read headers
+ for (z = 1; z <= 6; z++)
+ {
+ input = sr.ReadLine();
+ }
+ y = 1;
+
+ while ((input = sr.ReadLine()) != null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter = 1;
+ for (x = 0; x <= (lineArray.Length - 1); x++)
+ {
+
+ if (lineArray[x] != "" && xcounter <= xmax)
+ {
+ int xxxx = int.Parse(lineArray[x]);
+ if (xxxx == -9999) xxxx = 1;
+ rfarea[xcounter, y] = xxxx;
+ xcounter++;
+ }
+ }
+ y++;
+
+ }
+ sr.Close();
+ }
+ }
+ catch (Exception)
+ {
+
+ }
+
+ if(this.graindataloadbox.Text!="null")
+ {
+ FILE_NAME = this.graindataloadbox.Text;
+ if(FILE_NAME!="null")
+ {
+ StreamReader gr = File.OpenText(FILE_NAME);
+ y=1;
+ grain_array_tot=0;
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter=1;
+ grain_array_tot++;
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ if(xcounter==1)x1=int.Parse(lineArray[x]);
+ if(xcounter==2)y1=int.Parse(lineArray[x]);
+ if (x1 > xmax) x1 = xmax; // lines to prevent adding grain if clipping the grid and excellss on the grain grid is left
+ if (y1 > ymax) y1 = ymax; //
+
+ if (xcounter == 3) index[x1, y1] = grain_array_tot;// int.Parse(lineArray[x]);
+
+ for(n=0;n<=G_MAX;n++)
+ {
+ if(xcounter==4+n)
+ {
+ grain[grain_array_tot,n]=double.Parse(lineArray[x]);
+ }
+ }
+
+ for(z=0;z<=9;z++)
+ {
+ for(n=0;n<=(G_MAX-2);n++)
+ {
+ if(xcounter==(4+G_MAX+n+1)+((z)*9))
+ {
+ strata[grain_array_tot,z,n]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+
+ xcounter++;
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+
+
+ FILE_NAME = this.bedrockbox.Text;
+ if(FILE_NAME!="null")
+ {
+
+ StreamReader gr = File.OpenText(FILE_NAME);
+ //read headers
+ for(z=1;z<=6;z++)
+ {
+ input=gr.ReadLine();
+ }
+ y=1;
+
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter = 1;
+ for (x = 0; x <= (lineArray.Length - 1); x++)
+ {
+
+ if (lineArray[x] != "" && xcounter <= xmax)
+ {
+ tttt = double.Parse(lineArray[x]);
+ bedrock[xcounter, y] = tttt;
+ xcounter++;
+ }
+ }
+ y++;
+
+ }
+ gr.Close();
+ }
+
+ int inc1 = 1;
+
+ try
+ {
+
+
+ FILE_NAME = this.raindataloadbox.Text;
+ if (FILE_NAME != "null")
+ {
+
+
+ //int inc = 1;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input = gr.ReadLine()) != null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter = 1;
+ //MessageBox.Show(Convert.ToString(inc));
+ for (x = 0; x <= (lineArray.Length - 1); x++)
+ {
+ if (lineArray[x] != "" )
+ {
+ tttt = double.Parse(lineArray[x]);
+ hourly_rain_data[inc1, xcounter] = tttt;
+
+ xcounter++;
+ }
+ }
+ inc1++;
+ }
+
+ gr.Close();
+ }
+ }
+
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from the rain data file at line " + Convert.ToString(inc1) + ", CAESAR will continue to function but may not be correct");
+ //MessageBox.Show(" There was some type of error loading the input data from the rain data file CAESAR may continue to function but may not be correct");
+ }
+
+ try
+ {
+ //FILE_NAME = this.mvalueloadbox.Text;
+ //if (FILE_NAME != "null")
+ //{
+ // variable_m_value_flag = 1; // sets flag for variable M value to 1 (true)
+ // int inc = 1;
+ // StreamReader gr = File.OpenText(FILE_NAME);
+ // while ((input = gr.ReadLine()) != null)
+ // {
+ // hourly_m_value[inc] = double.Parse(input);
+ // inc++;
+ // }
+ // gr.Close();
+ //}
+ FILE_NAME = this.mvalueloadbox.Text;
+ if (FILE_NAME != "null")
+ {
+ variable_m_value_flag = 1; // sets flag for variable M value to 1 (true)
+ int inc = 1;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input = gr.ReadLine()) != null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter = 1;
+ //MessageBox.Show(Convert.ToString(inc));
+ for (x = 0; x <= (lineArray.Length - 1); x++)
+ {
+ if (lineArray[x] != "")
+ {
+ tttt = double.Parse(lineArray[x]);
+ hourly_m_value[inc, xcounter] = tttt;
+ xcounter++;
+ }
+ }
+ inc++;
+ }
+
+ gr.Close();
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the m value data from the m value data file CAESAR may continue to function but may not be correct");
+ }
+
+ if (checkBox3.Checked == true)
+ {
+ try
+ {
+ FILE_NAME = this.TidalFileName.Text;
+ if (FILE_NAME != "null")
+ {
+ int inc = 1;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input = gr.ReadLine()) != null)
+ {
+ stage_inputfile[inc] = double.Parse(input);
+ inc++;
+ }
+ gr.Close();
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the stage/tidal data file CAESAR may continue to function but may not be correct");
+ }
+ }
+
+ // load spatially variable mannings
+ ///////////////////////////////////////
+
+ if (SpatVarManningsCheckbox.Checked == true)
+ {
+ try
+ {
+ FILE_NAME = this.textBox19.Text;
+ if (FILE_NAME != "null")
+ {
+ sr = File.OpenText(FILE_NAME);
+
+ //read headers
+ for (z = 1; z <= 6; z++)
+ {
+ input = sr.ReadLine();
+ }
+ y = 1;
+
+ while ((input = sr.ReadLine()) != null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ xcounter = 1;
+ for (x = 0; x <= (lineArray.Length - 1); x++)
+ {
+
+ if (lineArray[x] != "" && xcounter <= xmax)
+ {
+ double xxxx = double.Parse(lineArray[x]);
+ if (xxxx == -9999) xxxx = 0.04; //failsafe to stop nodatas giving strange results.
+ spat_var_mannings [xcounter, y] = xxxx;
+ xcounter++;
+ }
+ }
+ y++;
+
+ }
+ sr.Close();
+ }
+ }
+ catch (Exception)
+ {
+
+ }
+ }
+
+ //try
+ //{
+ // //single mine input "supermine", up to nine grainsizes
+ // if (mine_checkBox.Checked)
+ // {
+ // //mine_inpoints[0, 0] = Convert.ToInt32(mineX_textBox.Text); //input x coordrinate
+ // //mine_inpoints[0, 1] = Convert.ToInt32(mineY_textBox.Text); //input y coordinate
+ // FILE_NAME = this.mine_input_textBox.Text;
+ // if (FILE_NAME != "null")
+ // {
+ // int lineinc = 1;//number of hours of contamination
+ // StreamReader gr = File.OpenText(FILE_NAME);
+ // while ((input = gr.ReadLine()) != null)
+ // {
+ // int inc = 1;//grainsizes 1-9, only two necessary now
+
+ // string[] lineArray;
+ // lineArray = input.Split(new char[] { ' ' });
+ // for (x = 1; x < (lineArray.Length); x++)
+ // {
+ // if (lineArray[x] != "")
+ // {
+ // //if (inc == 1) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize1
+ // //if (inc == 2) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize2
+ // //if (inc == 3) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize3
+ // //if (inc == 4) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize4
+ // //if (inc == 5) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize5
+ // //if (inc == 6) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize6
+ // //if (inc == 7) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize7
+ // //if (inc == 8) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize8
+ // //if (inc == 9) mineinput[lineinc, inc] = double.Parse(lineArray[x]);//grainsize9
+ // inc++;
+ // }
+ // }
+ // lineinc++;
+ // }
+ // gr.Close();
+ // }
+ // }
+ //}
+ //catch (Exception ex)
+ //{
+ // MessageBox.Show("There was some type of error loading the contaminant input CAESAR may continue to function but may not be correct");
+ //}
+ int tempx=0;
+
+ try
+ {
+ if(inbox1.Checked)
+ {
+ FILE_NAME = this.infile1.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[0,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+
+ }
+ }catch(Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from "+FILE_NAME+" at line "+Convert.ToString(tempx)+", CAESAR will continue to function but may not be correct");
+ }
+
+ try{
+ if(inbox2.Checked)
+ {
+ FILE_NAME = this.infile2.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[1,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+
+ try{
+ if(inbox3.Checked)
+ {
+ FILE_NAME = this.infile3.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[2,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+ try{
+ if(inbox4.Checked)
+ {
+ FILE_NAME = this.infile4.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[3,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+
+ try{
+ if(inbox5.Checked)
+ {
+ FILE_NAME = this.infile5.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[4,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+ try{
+
+ if(inbox6.Checked)
+ {
+ FILE_NAME = this.infile6.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[5,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+ try{
+ if(inbox7.Checked)
+ {
+ FILE_NAME = this.infile7.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[6,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from " + FILE_NAME + " at line " + Convert.ToString(tempx) + ", CAESAR will continue to function but may not be correct");
+ }
+
+ try{
+ if(inbox8.Checked)
+ {
+ FILE_NAME = this.infile8.Text;
+ if(FILE_NAME!="null")
+ {
+ input_type_flag=0;
+ StreamReader gr = File.OpenText(FILE_NAME);
+ while ((input=gr.ReadLine())!=null)
+ {
+ string[] lineArray;
+ lineArray = input.Split(delimiterChars);
+ for (x = 0; x<=(lineArray.Length-1); x++)
+ {
+ if(lineArray[x]!="")
+ {
+ tempx=int.Parse(lineArray[0]);
+ inputfile[7,tempx,x]=double.Parse(lineArray[x]);
+ }
+ }
+ }
+ gr.Close();
+ }
+ }
+ }
+ catch(Exception)
+ {
+ MessageBox.Show("There was some type of error loading the input data from "+FILE_NAME+" at line "+Convert.ToString(tempx)+", CAESAR will continue to function but may not be correct");
+ }
+
+
+ // code to try and draw in graphics from google maps etc...
+ //string latlng = "39.24382,9.143372";
+ //string path = "http://maps.googleapis.com/maps/api/staticmap?center=" + latlng +
+ // "&zoom=10&size=400x400&maptype=satellite&markers=color:blue%7Clabel:S%7C" +
+ // latlng + "&sensor=false";
+
+ //try
+ //{
+ // // bing maps instructions here: http://msdn.microsoft.com/en-us/library/ff701724.aspx
+ // // example line: http://dev.virtualearth.net/REST/v1/Imagery/Map/imagerySet?mapArea=mapArea&mapSize=mapSize&pushpin=pushpin&mapLayer=mapLayer&format=format&mapMetadata=mapMetadata&key=BingMapsKey
+
+ // point testPoint = new point(xll, yll);
+ // if (UTMgridcheckbox.Checked)
+ // {
+ // testPoint.UTMzone = System.Convert.ToInt32(UTMzonebox.Text);
+ // testPoint.south = System.Convert.ToBoolean(UTMsouthcheck.Checked);
+ // testPoint.transformUTMPoint();
+ // }
+ // else
+ // {
+ // testPoint.transformPoint();
+ // }
+ // yurcorner = yll + (System.Convert.ToDouble(ymax) * System.Convert.ToDouble(DX));
+ // xurcorner = xll + (System.Convert.ToDouble(xmax) * System.Convert.ToDouble(DX));
+ // point testPoint2 = new point(xurcorner, yurcorner);
+ // if (UTMgridcheckbox.Checked)
+ // {
+ // testPoint2.UTMzone = System.Convert.ToInt32(UTMzonebox.Text);
+ // testPoint2.south = System.Convert.ToBoolean(UTMsouthcheck.Checked);
+ // testPoint2.transformUTMPoint();
+ // }
+ // else
+ // {
+ // testPoint2.transformPoint();
+ // }
+
+ // string box = testPoint.ycoord + "," + testPoint.xcoord + "," + testPoint2.ycoord + "," + testPoint2.xcoord;
+ // //string box = "54.3397646119184,-2.30842643099455,54.4619251486287,-1.95376438512343";
+ // string path = "http://dev.virtualearth.net/REST/v1/Imagery/Map/Aerial?mapArea=" + box + "&mapSize=" + xmax + "," + ymax + "&key=AvaXZOU-oYf4A4vjryoLQEv06rQy9V3BBJkb7Bi4v8HaXoUTdDZevDbqtFEe9mi_";
+
+ // using (WebClient wc = new WebClient())
+ // {
+ // wc.DownloadFile(path, @"img.png");
+ // }
+ //}
+ //catch
+ //{
+ // MessageBox.Show("Time out trying to download background image: Check web connection");
+ //}
+
+
+ // MessageBox.Show(Convert.ToString(input_type_flag));
+ this.InfoStatusPanel.Text="Loaded: type = " + input_type_flag.ToString(); // MJ 02/02/05
+
+ }
+
+
+ void save_data(int typeflag, double tempcycle)
+ {
+ int x,y,z,inc, nn;
+
+ string FILENAME = "waterdepth.dat";
+
+ if(uniquefilecheck.Checked==false)tempcycle=0;
+
+ // turns file name into days from mins.
+
+
+
+ if(typeflag==1&&tempcycle==0) FILENAME = "waterdepth.txt";
+ if(typeflag==2&&tempcycle==0) FILENAME = "elevdiff.txt";
+ if(typeflag==3&&tempcycle==0) FILENAME = "elev.txt";
+ if(typeflag==4&&tempcycle==0) FILENAME = "grain.txt";
+ if (typeflag == 15 && tempcycle == 0) FILENAME = "d50top.txt";
+ if (typeflag == 16 && tempcycle == 0) FILENAME = "velocity.txt"; //
+ if (typeflag == 17 && tempcycle == 0) FILENAME = "velocity_vectors.txt"; //
+
+ if(typeflag==1&&tempcycle>0) FILENAME = "waterdepth"+Convert.ToString(Convert.ToInt64(tempcycle))+".txt";
+ if (typeflag == 2 && tempcycle > 0) FILENAME = "elevdiff" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+ if (typeflag == 3 && tempcycle > 0) FILENAME = "elev.dat" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+ if (typeflag == 4 && tempcycle > 0) FILENAME = "grain.dat" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+
+ if (typeflag == 15 && tempcycle > 0) FILENAME = "d50top" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+ if (typeflag == 16 && tempcycle > 0) FILENAME = "velocity" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+ if (typeflag == 17 && tempcycle > 0) FILENAME = "velocity_vectors" + Convert.ToString(Convert.ToInt64(tempcycle)) + ".txt";
+
+ if(typeflag>=1&&typeflag<4)
+ {
+
+ using (StreamWriter sw = new StreamWriter(FILENAME))
+ {
+ sw.Write("ncols "+xmax);
+ sw.Write("\n");
+ sw.Write("nrows "+ymax);
+ sw.Write("\n");
+
+ for (nn=2; nn<=5; nn++)
+ {
+ sw.Write(inputheader[nn]);sw.Write("\n");
+ }
+
+ for(y=1;y<=ymax;y++)
+ {
+ for(x=1;x<=xmax;x++)
+ {
+ if(typeflag==1)
+ {
+ //sw.Write(area[x, y]); sw.Write(" ");
+ if (water_depth[x, y] > 0)
+ {
+ //sw.Write(vel_dir[x,y,0]);
+ sw.Write(water_depth[x,y]);
+
+ sw.Write(" ");
+ }
+ else
+ {
+ sw.Write("-9999.0");
+ sw.Write(" ");
+ }
+ }
+
+ if(typeflag==2)
+ {
+ sw.Write(init_elevs[x,y]-elev[x,y]);
+ sw.Write(" ");
+ }
+ if(typeflag==3)
+ {
+ sw.Write(elev[x,y]);
+ sw.Write(" ");
+ }
+ }
+ sw.Write("\n");
+ }
+
+
+ }
+
+ }
+
+ if(typeflag==4)
+ {
+
+ using (StreamWriter sw = new StreamWriter(FILENAME))
+ {
+ for (y=1;y<=ymax;y++)
+ {
+ for(x=1;x<=xmax;x++)
+ {
+
+
+ if(index[x,y]!=-9999)
+ {
+ sw.Write(x);sw.Write(" ");sw.Write(y);sw.Write(" ");sw.Write(index[x,y]);sw.Write(" ");
+ for(inc=0;inc<=G_MAX;inc++)
+ {
+ sw.Write(grain[index[x,y],inc]);sw.Write(" ");
+ }
+
+ for(z=0;z<=9;z++)
+ {
+ for(inc=0;inc<=(G_MAX-2);inc++)
+ {
+ sw.Write(strata[index[x,y],z,inc]);sw.Write(" ");
+ }
+ }
+ sw.Write("\n");
+ }
+ }
+ }
+ }
+ }
+
+
+ if(typeflag==15)
+ {
+
+ using (StreamWriter sw = new StreamWriter(FILENAME))
+ {
+ for (nn=0; nn<=5; nn++)
+ {
+ sw.Write(inputheader[nn]);sw.Write("\n");
+ }
+
+ for(y=1;y<=ymax;y++)
+ {
+ for(x=1;x<=xmax;x++)
+ {
+ if(index[x,y] == -9999)
+ {
+ sw.Write("-9999.0");
+ sw.Write(" ");
+ }
+ else
+ {
+ sw.Write(d50(index[x,y]));
+ sw.Write(" ");
+ }
+ }
+ sw.Write("\n");
+ }
+
+ }
+ }
+
+ if(typeflag==16) // Write velocity to a file
+ {
+
+ using (StreamWriter sw = new StreamWriter(FILENAME))
+ {
+ for (nn=0; nn<=5; nn++)
+ {
+ sw.Write(inputheader[nn]);sw.Write("\n");
+ }
+
+ for(y=1;y<=ymax;y++)
+ {
+ for(x=1;x<=xmax;x++)
+ {
+ if(water_depth[x,y] Write soil_saturation to a file
+ {
+
+ using (StreamWriter sw = new StreamWriter(FILENAME))
+ {
+ //for (nn=0; nn<=5; nn++)
+ //{
+ // sw.Write(inputheader[nn]);sw.Write("\n");
+ //}
+
+ sw.Write("x,y,rot,vel");
+ sw.Write("\n");
+
+ for (y = 1; y <= ymax; y++)
+ {
+ for (x = 1; x <= xmax; x++)
+ {
+ if (water_depth[x, y] > water_depth_erosion_threshold)
+ {
+ sw.Write((xll + (x * DX)) + (DX / 2)); sw.Write(","); sw.Write(((yll + ((ymax - y) * DX)))); sw.Write(","); sw.Write(calc_max_flow_direction_degrees(x, y)); sw.Write(","); sw.Write(Vel[x, y]);
+ sw.Write("\n");
+ }
+
+ }
+
+ }
+
+ }
+ }
+
+
+ }
+
+
+ private void initialise()
+ {
+
+ this.InfoStatusPanel.Text="Initialising.."; // MJ 14/01/05
+
+ if (overrideheaderBox.Checked == true)
+ {
+ // input xmax, ymax and DX from text boxes
+ xmax=int.Parse(xtextbox.Text);
+ ymax=int.Parse(ytextbox.Text);
+ DX=double.Parse(dxbox.Text); // now in read_header() MJ 24/05/05
+ }
+
+
+ save_interval2 = int.Parse(googAnimationSaveInterval.Text);
+ save_time2 = save_interval2;
+
+ in_out_difference=double.Parse(initscansbox.Text);
+ ERODEFACTOR=double.Parse(erodefactorbox.Text);
+ root=(Math.Sqrt(Math.Pow(DX,2)+Math.Pow(DX,2)));
+ LIMIT=int.Parse(limitbox.Text);
+ MIN_Q=double.Parse(minqbox.Text);
+ CREEP_RATE=double.Parse(creepratebox.Text);
+ SOIL_RATE = double.Parse(soil_ratebox.Text);
+ bed_proportion=double.Parse(lateralratebox.Text);
+
+ cycle=double.Parse(textBox1.Text)*60;
+
+ maxcycle=int.Parse(cyclemaxbox.Text);
+ failureangle=double.Parse(slopebox.Text);
+
+ saveinterval=double.Parse(saveintervalbox.Text);
+ //M=double.Parse(mvaluebox.Text);
+ grow_grass_time=double.Parse(grasstextbox.Text);
+ output_file_save_interval=int.Parse(outputfilesaveintervalbox.Text);
+ tx=output_file_save_interval;
+ min_time_step=double.Parse(mintimestepbox.Text);
+ active=double.Parse(activebox.Text);
+ k_evap=double.Parse(k_evapBox.Text); // added MJ 15/03/05
+ vegTauCrit=double.Parse(vegTauCritBox.Text); // added MJ 10/05/05
+ max_time_step = int.Parse(max_time_step_Box.Text);
+ water_depth_erosion_threshold = double.Parse(Q2box.Text);
+ max_vel = double.Parse(max_vel_box.Text);
+ courant_number = double.Parse(courantbox.Text);
+ hflow_threshold = double.Parse(textBox4.Text);
+ lateral_cross_channel_smoothing = double.Parse(textBox7.Text);
+ froude_limit = double.Parse(textBox8.Text);
+ mannings = double.Parse(textBox9.Text);
+
+ rfnum = int.Parse(rfnumBox.Text);
+
+ if (googleAnimationCheckbox.Checked)
+ {
+ startDate = googleBeginDate.Text;
+ googleTime = System.DateTime.Parse(googleBeginDate.Text);
+ }
+ d1=double.Parse(g1box.Text);
+ d2=double.Parse(g2box.Text);
+ d3=double.Parse(g3box.Text);
+ d4=double.Parse(g4box.Text);
+ d5=double.Parse(g5box.Text);
+ d6=double.Parse(g6box.Text);
+ d7=double.Parse(g7box.Text);
+ d8=double.Parse(g8box.Text);
+ d9=double.Parse(g9box.Text);
+
+ dprop = new double[11];
+
+ dprop[1] = double.Parse(gp1box.Text);
+ dprop[2] = double.Parse(gp2box.Text);
+ dprop[3] = double.Parse(gp3box.Text);
+ dprop[4] = double.Parse(gp4box.Text);
+ dprop[5] = double.Parse(gp5box.Text);
+ dprop[6] = double.Parse(gp6box.Text);
+ dprop[7] = double.Parse(gp7box.Text);
+ dprop[8] = double.Parse(gp8box.Text);
+ dprop[9] = double.Parse(gp9box.Text);
+
+
+ G_MAX=10;
+ if (dprop[9] == 0) G_MAX = 9;
+ if (dprop[8] == 0) G_MAX = 8;
+ if (dprop[7] == 0) G_MAX = 7;
+ if (dprop[6] == 0) G_MAX = 6;
+ if (dprop[5] == 0) G_MAX = 5;
+ if (dprop[4] == 0) G_MAX = 4;
+ if (dprop[3] == 0) G_MAX = 3;
+ if (dprop[2] == 0) G_MAX = 2;
+ if (checkBox8.Checked == true) G_MAX = 10;
+
+
+ // new array to deal with suspended sediment MJ 09/05/05
+ isSuspended = new bool[10+1];
+ isSuspended[1] = suspGS1box.Checked;
+ isSuspended[2] = false;
+ isSuspended[3] = false;
+ isSuspended[4] = false;
+ isSuspended[5] = false;
+ isSuspended[6] = false;
+ isSuspended[7] = false;
+ isSuspended[8] = false;
+ isSuspended[9] = false;
+
+ // new array to deal with suspended sediment MJ 09/05/05
+ fallVelocity = new double[10+1];
+ fallVelocity[1] = double.Parse(fallGS1box.Text);
+ fallVelocity[2] = double.Parse(fallGS2box.Text);
+ fallVelocity[3] = double.Parse(fallGS3box.Text);
+ fallVelocity[4] = double.Parse(fallGS4box.Text);
+ fallVelocity[5] = double.Parse(fallGS5box.Text);
+ fallVelocity[6] = double.Parse(fallGS6box.Text);
+ fallVelocity[7] = double.Parse(fallGS7box.Text);
+ fallVelocity[8] = double.Parse(fallGS8box.Text);
+ fallVelocity[9] = double.Parse(fallGS9box.Text);
+
+ input_time_step=int.Parse(input_time_step_box.Text);
+ stage_input_time_step = double.Parse(TidalInputStep.Text);
+ edgeslope =double.Parse(textBox2.Text);
+ lateral_constant=double.Parse(textBox3.Text);
+ veg_lat_restriction = double.Parse(veg_lat_box.Text);
+
+ bedrock_erosion_rate = double.Parse(bedrock_erosion_rate_box.Text);
+ bedrock_erosion_threshold = double.Parse(bedrock_erosion_threshold_box.Text);
+
+ inpoints=new int[10,2];
+ inputpointsarray = new bool[xmax + 2, ymax + 2];
+
+ // then intiailise the main arrays
+ if(inbox1.Checked)
+ {
+ number_of_points++;
+ inpoints[0,0]=int.Parse(xbox1.Text);
+ inpoints[0,1]=int.Parse(ybox1.Text);
+ inputpointsarray[int.Parse(xbox1.Text), int.Parse(ybox1.Text)] = true;
+ }
+
+ if(inbox2.Checked)
+ {
+ number_of_points++;
+ inpoints[1,0]=int.Parse(xbox2.Text);
+ inpoints[1,1]=int.Parse(ybox2.Text);
+ inputpointsarray[int.Parse(xbox2.Text), int.Parse(ybox2.Text)] = true;
+ }
+
+ if(inbox3.Checked)
+ {
+ number_of_points++;
+ inpoints[2,0]=int.Parse(xbox3.Text);
+ inpoints[2,1]=int.Parse(ybox3.Text);
+ inputpointsarray[int.Parse(xbox3.Text), int.Parse(ybox3.Text)] = true;
+ }
+
+ if(inbox4.Checked)
+ {
+ number_of_points++;
+ inpoints[3,0]=int.Parse(xbox4.Text);
+ inpoints[3,1]=int.Parse(ybox4.Text);
+ inputpointsarray[int.Parse(xbox4.Text), int.Parse(ybox4.Text)] = true;
+ }
+
+ if(inbox5.Checked)
+ {
+ number_of_points++;
+ inpoints[4,0]=int.Parse(xbox5.Text);
+ inpoints[4,1]=int.Parse(ybox5.Text);
+ inputpointsarray[int.Parse(xbox5.Text), int.Parse(ybox5.Text)] = true;
+ }
+
+ if(inbox6.Checked)
+ {
+ number_of_points++;
+ inpoints[5,0]=int.Parse(xbox6.Text);
+ inpoints[5,1]=int.Parse(ybox6.Text);
+ inputpointsarray[int.Parse(xbox6.Text), int.Parse(ybox6.Text)] = true;
+ }
+
+ if(inbox7.Checked)
+ {
+ number_of_points++;
+ inpoints[6,0]=int.Parse(xbox7.Text);
+ inpoints[6,1]=int.Parse(ybox7.Text);
+ inputpointsarray[int.Parse(xbox7.Text), int.Parse(ybox7.Text)] = true;
+ }
+
+ if(inbox8.Checked)
+ {
+ number_of_points++;
+ inpoints[7,0]=int.Parse(xbox8.Text);
+ inpoints[7,1]=int.Parse(ybox8.Text);
+ inputpointsarray[int.Parse(xbox8.Text), int.Parse(ybox8.Text)] = true;
+ }
+
+ inputfile = new double[number_of_points,(int)((maxcycle*60)/input_time_step)+10,16];
+ stage_inputfile = new double[(int)((maxcycle * 60) / stage_input_time_step) + 10];
+
+ elev = new double[xmax+2,ymax+2];
+ water_depth = new double[xmax+2,ymax+2];
+
+ old_j_mean_store = new double[(int)((maxcycle*60)/input_time_step)+10];
+
+ qx = new double[xmax + 2, ymax + 2];
+ qy = new double[xmax + 2, ymax + 2];
+
+ qxs = new double[xmax + 2, ymax + 2];
+ qys = new double[xmax + 2, ymax + 2];
+
+
+ // temp arrays that control how much sediment goes up,. righ left down and into suspended sediment.
+ sr = new Double[xmax + 2, ymax + 2, 10];
+ sl = new Double[xmax + 2, ymax + 2, 10];
+ su = new Double[xmax + 2, ymax + 2, 10];
+ sd = new Double[xmax + 2, ymax + 2, 10];
+ ss = new Double[xmax + 2, ymax + 2];
+
+ erodetot = new Double[xmax + 2, ymax + 2];
+ erodetot3 = new Double[xmax + 2, ymax + 2];
+ temp_elev = new Double[xmax + 2, ymax + 2];
+
+
+ Vel = new double[xmax + 2, ymax + 2];
+ area = new double[xmax+2,ymax+2];
+ index = new int[xmax+2,ymax+2];
+ elev_diff = new double[xmax + 2, ymax + 2];
+
+ bedrock = new double[xmax+2,ymax+2];
+ tempcreep = new double[xmax+2,ymax+2];
+ init_elevs = new double[xmax+2,ymax+2];
+ vel_dir= new double[xmax+2,ymax+2,9];
+
+ strata=new double[((xmax+2)*(ymax+2))/LIMIT,10,G_MAX+1];
+ grain=new double[((2+xmax)*(ymax+2))/LIMIT,G_MAX+1];
+
+ cross_scan=new int[xmax+2,ymax+2];
+ down_scan=new int[ymax+2,xmax+2];
+ // time step for rain data
+ rain_data_time_step = double.Parse(raintimestepbox.Text);
+ mfiletimestep = double.Parse(mfiletimestepbox.Text);
+
+ // line to stop max time step being greater than rain time step
+ if (rain_data_time_step < 1) rain_data_time_step = 1;
+ if (max_time_step / 60 > rain_data_time_step) max_time_step = (int)rain_data_time_step * 60;
+
+ hourly_rain_data = new double[(int)(maxcycle * (60 / rain_data_time_step)) + 100, rfnum+1];
+ hourly_m_value = new double[(int)(maxcycle * (60 / mfiletimestep)) + 10, rfnum + 1];
+ climate_data=new double[10001,3];
+
+ temp_grain=new double[G_MAX+1];
+ veg=new Double[xmax+1,ymax+1,4]; // 0 is elevation, 1 is level of veg cover (ranging from 0 to 1)
+ edge=new double[xmax+1,ymax+1]; // TJC 27/1/05
+ edge2=new double[xmax+1,ymax+1]; // TJC 27/4/06
+
+ Tau = new double[xmax+2,ymax+2];
+
+ catchment_input_x_coord = new int[xmax * ymax];
+ catchment_input_y_coord = new int[xmax * ymax];
+
+ //dune things
+ dune_mult = (int)(DX)/int.Parse(dune_grid_size_box.Text);
+ if (dune_mult < 1) dune_mult = 1;
+ if (DuneBox.Checked == false) dune_mult = 1; // needed in order to stop it tripping out the memory
+
+ area_depth = new double[xmax + 2, ymax + 2];
+ sand = new double[xmax + 2, ymax + 2];
+ elev2 = new double[(xmax * dune_mult) + 2, (ymax*dune_mult) + 2];
+ sand2 = new double[(xmax * dune_mult) + 2, (ymax * dune_mult) + 2];
+
+
+ dischargeinput=new double[1000,5];
+
+ hydrograph=new double[(maxcycle-((int)(cycle/60)))+1000,2];
+
+
+ // MJ arrays 08/02/05
+
+ Vsusptot = new double[xmax+2,ymax+2];
+
+ // JOE arrays
+ slopeAnalysis = new double[xmax+2,ymax+2]; //
+ aspect = new double[xmax+2,ymax+2]; //
+ hillshade = new double[xmax+2,ymax+2]; //
+
+ //Gez arrays
+ sum_grain = new double[G_MAX+1];
+ sum_grain2 = new double[G_MAX + 1];
+ old_sum_grain = new double[G_MAX+1];
+ old_sum_grain2 = new double[G_MAX + 1];
+ Qg_step = new double[G_MAX+1];
+ Qg_hour = new double[G_MAX+1];
+ Qg_over = new double[G_MAX+1];
+ Qg_last = new double[G_MAX+1];
+ Qg_step2 = new double[G_MAX + 1];
+ Qg_hour2 = new double[G_MAX + 1];
+ Qg_over2 = new double[G_MAX + 1];
+ Qg_last2 = new double[G_MAX + 1];
+
+ CATCH_FILE = TimeseriesOutBox.Text; // MJ 18/01/05
+ //CATCH_FILE2 = tracerOutputtextBox.Text;
+
+ // siberia data
+ Beta1 = double.Parse(Beta1Box.Text);
+ Beta3 = double.Parse(Beta3Box.Text);
+ m1 = double.Parse(m1Box.Text);
+ m3 = double.Parse(m3Box.Text);
+ n1 = double.Parse(n1Box.Text);
+
+ // sediment tpt law
+ if (einsteinbox.Checked == true) einstein = 1;
+ if (wilcockbox.Checked == true) wilcock = 1;
+ if (meyerbox.Checked == true) meyer = 1;
+
+ div_inputs = int.Parse(div_inputs_box.Text);
+ recirculate_proportion = double.Parse(propremaining.Text);
+
+ graphics_scale = (int)(1500 / xmax); // auto scales the graphics to be roughly 1000 pixels wide.
+ // Create a drawing surface with the same dimensions DEM * graphics scale
+ if (graphics_scale < 1) graphics_scale = 1; // catch to prevent too long DEMS causign error..
+ m_objDrawingSurface = new Bitmap(xmax * graphics_scale,
+ ymax * graphics_scale, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
+
+ // tidal/stagevariables
+ fromx = int.Parse(TidalXmin.Text);
+ tox = int.Parse(TidalXmax.Text);
+ fromy = int.Parse(TidalYmin.Text);
+ toy = int.Parse(TidalYmax.Text);
+
+ // soil generation variables
+ P1 = double.Parse(textBox11.Text);
+ b1 = double.Parse(textBox12.Text);
+ k1 = double.Parse(textBox13.Text);
+ c1 = double.Parse(textBox14.Text);
+ c2 = double.Parse(textBox15.Text);
+ k2 = double.Parse(textBox16.Text);
+ c3 = double.Parse(textBox17.Text);
+ c4 = double.Parse(textBox18.Text);
+
+ // disributed hydro model arrays
+ j = new Double[rfnum + 1]; //0.000000001; //start of hydrological model paramneters
+ jo = new Double[rfnum + 1];//0.000000001;
+ j_mean = new Double[rfnum + 1];
+ old_j_mean = new Double[rfnum + 1];
+ new_j_mean = new Double[rfnum + 1];
+ rfarea = new int [xmax + 2, ymax + 2];
+ nActualGridCells = new int[rfnum + 1];
+ catchment_input_counter = new int[rfnum + 1];
+ M = new Double[rfnum + 1];
+
+ // spat var mannings
+ spat_var_mannings = new Double[xmax + 1, ymax + 1];
+
+ }
+
+
+ void sort_active(int x,int y)
+ {
+ int xyindex;
+ double total;
+ double amount;
+ double coeff;
+ int n,z;
+
+
+ if (index[x,y] == -9999) addGS(x,y); // should not be necessary
+ xyindex = index[x,y];
+
+ total = 0.0;
+ for (n=0;n<=G_MAX;n++)
+ {
+
+ total += grain[xyindex,n];
+
+ }
+
+ if (total > (active*1.5)) // depositing - create new strata layer and remove bottom one..
+ {
+ // start from bottom
+ // remove bottom active layer
+ // then move all from layer above into one below, up to the top layer
+ for(z=9;z>=1;z--)
+ {
+ for(n=0;n<=G_MAX-2;n++)
+ {
+
+ strata[xyindex,z,n]=strata[xyindex,z-1,n];
+
+ }
+ }
+
+ // then remove strata thickness from grain - and add to top strata layer
+ coeff = active / total;
+ for (n=1;n<=(G_MAX-1);n++)
+ {
+ if ((grain[xyindex,n] > 0.0))
+ {
+
+ amount = coeff * (grain[xyindex,n]);
+ strata[xyindex,0,n-1] = amount;
+ grain[xyindex,n] -= amount;
+
+ }
+ }
+ }
+
+ if (total < (active/4)) // eroding - eat into existing strata layer & create new one at bottom
+ {
+ // Start at top
+ // Add top strata to grain
+ for (n=1;n<=(G_MAX-1);n++)
+ {
+ grain[xyindex,n] += strata[xyindex,0,n-1];
+ }
+
+ // then from top down add lower strata into upper
+ for(z=0;z<=8;z++)
+ {
+ for(n=0;n<=G_MAX-2;n++)
+ {
+ strata[xyindex,z,n] = strata[xyindex,z+1,n];
+ }
+ }
+
+ // add new layer at the bottom
+ amount = active;
+ z = 9;
+ for (n = 1; n <= G_MAX - 1; n++)
+ {
+ strata[xyindex, z, n - 1] = amount * dprop[n]; // 0.0;
+
+ }
+ }
+
+ }
+
+
+ //double layer_depth(int index1, int t)
+ //{
+
+ // double total=0;
+
+ // total+=(grain[index1,t,0]);
+
+ // return (total);
+ //}
+
+ //double active_layer_depth(int index1)
+ //{
+ // int n;
+ // double active_thickness = 0;
+
+ // for (n = 1; n <= G_MAX; n++)
+ // {
+ // active_thickness += (grain[index1, n, 0]);
+ // }
+ // return(active_thickness);
+ //}
+
+
+ double sand_fraction(int index1)
+ {
+
+ int n;
+ double active_thickness=0;
+ double sand_total=0;
+ for(n=1;n<=G_MAX;n++)
+ {
+ active_thickness+=(grain[index1,n]);
+ }
+
+ for(n=1;n<=2;n++) // number of sand fractions...
+ {
+ sand_total+=(grain[index1,n]);
+ }
+
+ if(active_thickness<0.0001)
+ {
+ return(0.0);
+ }
+ else
+ {
+ return(sand_total/active_thickness);
+ }
+
+ }
+
+
+ double d50(int index1)
+ {
+ int z,n,i;
+ double active_thickness=0;
+ double Dfifty=0,max=0,min=0;
+ double[] cum_tot;
+ cum_tot = new double[20];
+
+ for(n=1;n<=G_MAX;n++)
+ {
+ for(z=0;z<=(0);z++)
+ {
+ active_thickness+=(grain[index1, n ]);
+ cum_tot[n]+=active_thickness;
+ }
+ }
+
+
+ i=1;
+ while(cum_tot[i]<(active_thickness*0.5)&&i<=G_MAX-1)
+ {
+ i++;
+ }
+
+ if(i==1){min=Math.Log(d1);max=Math.Log(d1);}
+ if(i==2){min=Math.Log(d1);max=Math.Log(d2);}
+ if(i==3){min=Math.Log(d2);max=Math.Log(d3);}
+ if(i==4){min=Math.Log(d3);max=Math.Log(d4);}
+ if(i==5){min=Math.Log(d4);max=Math.Log(d5);}
+ if(i==6){min=Math.Log(d5);max=Math.Log(d6);}
+ if(i==7){min=Math.Log(d6);max=Math.Log(d7);}
+ if(i==8){min=Math.Log(d7);max=Math.Log(d8);}
+ if(i==9){min=Math.Log(d8);max=Math.Log(d9);}
+ //if(i==9){min=Math.Log(d8);max=Math.Log(d9);}
+
+ Dfifty = Math.Exp(max - ((max - min) * ((cum_tot[i] - (active_thickness * 0.5)) / (cum_tot[i] - cum_tot[i - 1]))));
+ if(active_thickness<0.0000001)Dfifty=0;
+ return Dfifty;
+
+ }
+
+
+ double max_bed_slope2(int x, int y)
+ {
+
+ double slope = 0;
+ int slopetot = 0;
+ double slopemax = 0;
+
+ if (elev[x, y] > elev[x, y - 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x, y - 1]) / DX, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x + 1, y - 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x + 1, y - 1]) / root, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x + 1, y])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x + 1, y]) / DX, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x + 1, y + 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x + 1, y + 1]) / root, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x, y + 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x, y + 1]) / DX, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x - 1, y + 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x - 1, y + 1]) / root, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x - 1, y])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x - 1, y]) / DX, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ if (elev[x, y] > elev[x - 1, y - 1])
+ {
+ slope = Math.Pow((elev[x, y] - elev[x - 1, y - 1]) / root, 1);
+ if (slope > slopemax) slopemax = slope;
+ slopetot++;
+ }
+ //if (slope > 0) slope = (slope / slopetot);
+
+
+ //return(slopemax);
+ //if(slopemax<0.001)slopemax=0.001;
+ //if (slopemax > 0.01) slopemax = 0.01;
+ return (slopemax);
+ }
+
+
+
+ void addGS(int x,int y)
+ {
+ // needs lock statement to stop two being added at the same time...
+ lock (this)
+ {
+
+ int n, q;
+ grain_array_tot++;
+ index[x, y] = grain_array_tot;
+
+ grain[grain_array_tot, 0] = 0;
+ for (n = 1; n <= G_MAX - 1;n++ )
+ {
+ grain[grain_array_tot, n] = active * dprop[n];
+ }
+ grain[grain_array_tot, G_MAX] = 0;
+
+
+ for (n = 0; n <= 9; n++)
+ {
+ for (int n2 = 0; n2 <= G_MAX - 2;n2++ )
+ {
+ strata[grain_array_tot, n, n2] = (active) * dprop[n2+1];
+ }
+
+
+ if (elev[x, y] - (active * (n + 1)) < (bedrock[x, y] - active))
+ {
+ for (q = 0; q <= (G_MAX - 2); q++)
+ {
+ strata[grain_array_tot, n, q] = 0;
+ }
+ }
+ }
+
+
+ sort_active(x, y);
+
+ }
+
+ }
+
+ // calc roughtness on Srickler relationship
+ double strickler(int x, int y)
+ {
+ double temp=0;
+ double temp_d50=1;
+
+ if (index[x,y] != -9999)temp_d50=d50(index[x,y]);
+ temp =0.034*Math.Pow(temp_d50,0.167);
+ //Console.WriteLine(Convert.ToString(strickler(x,y)));
+ temp+=0.012;
+ return temp;
+
+ }
+
+
+ ////Calculate roughness - Added JMW 20051122
+ ////Based on Baptist, 2005
+ //double chezy(int x, int y)
+ //{
+ // double Cr;
+ // double Cb;
+ // double temp_d50=30;
+
+ // double temp_depth=water_depth[x,y];
+
+ // if(temp_depth<=0)temp_depth=0.1;
+
+
+ // // just to save it when there is no grain file
+ // if (index[x,y] != -9999)temp_d50=d50(index[x,y]);
+
+
+
+ // // Grain roughness (strickler formulation)
+ // Cb = (26.4*Math.Pow(temp_depth/temp_d50,0.167));
+ // Cr=Cb;
+
+ // // veg influencing roughness is commented out at the moment...
+ // //if (veg[x,y,1]>0.01)// if there is any veg..
+ // //{
+ // // // Applying vegetation
+ // // if (veg[x,y,3] < temp_depth)
+ // // {
+ // // Cr = (Math.Pow(1/(1/(Cb*Cb) + veg[x,y,2]*veg[x,y,3]/(2*g)),0.5)
+ // // + Math.Pow(g,0.5)/kappa*Math.Log(temp_depth/veg[x,y,3]));
+ // // }
+ // // else
+ // // {
+ // // Cr = (Math.Pow(1/(1/(Cb*Cb) + veg[x,y,2]*temp_depth/(2*g)),0.5));
+ // // }
+ // //}
+
+ // return Cr;
+ //}
+
+
+ //double chezytomanning(double chezyc, double depth)
+ //{
+ // return (Math.Pow(depth,0.167))/chezyc;
+ //}
+
+
+ //double calc_manning(int x, int y)
+ //{
+ // double temp_depth = water_depth[x, y];
+ // if (temp_depth <= 0) temp_depth = 0.1;
+ // return chezytomanning(chezy(x, y), temp_depth) + 0.012;
+ // return 0.03 + (veg[x, y, 2] * 0.03);
+ // if (veg[x, y, 1] > 0.5)
+ // {
+ // return 0.05;
+ // }
+ // else
+ // {
+ // return 0.03;
+ // }
+ //}
+
+
+ void grow_grass(double amount3)
+ {
+
+ int x, y;
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ //first check if veg is at 0.. not sure if this is needed now..
+ if (veg[x, y, 0] == 0)
+ {
+ veg[x, y, 0] = elev[x, y];
+ }
+
+ // first check if under water or not..
+ if(water_depth[x,y]1)veg[x,y,1]=1;
+ }
+
+ // check if veg below elev! if so raise to elev
+ if (veg[x, y, 0] < elev[x, y]) // raises the veg level if it gets buried.. but only by a certain amount (0.001m day...)
+ {
+ veg[x, y, 0] += 0.001; // this is an arbitrary amount..
+ if (veg[x, y, 0] > elev[x, y]) veg[x, y, 0] = elev[x, y];
+ }
+
+ // check if veg above elev! if so lower to elev
+ if (veg[x, y, 0] > elev[x, y])
+ {
+ veg[x, y, 0] -= 0.001; // this is an arbitrary amount..
+ if (veg[x, y, 0] < elev[x, y]) veg[x, y, 0] = elev[x, y];
+ }
+
+ // trying to see now, if veg is above elev - so if lateral erosion happens - more than 0.1m the veg gets wiped..
+
+ if (veg[x, y, 0] - elev[x, y] > 0.1)
+ {
+ veg[x, y, 1] = 0;
+ veg[x, y, 0] = elev[x, y];
+ }
+
+
+ // now see if veg under water - if so let it die back a bit..
+ if(water_depth[x,y] > water_depth_erosion_threshold&&veg[x,y,1]>0)
+ {
+ veg[x, y, 1] -= (amount3 / 2);
+ if (veg[x, y, 1] < 0)
+ {
+ veg[x, y, 1] = 0;
+ veg[x, y, 0] = elev[x, y]; // resets elev if veg amt is 0
+ }
+ }
+
+ // also if it is under sediment - then dies back a bit too...
+ if (veg[x, y, 0] < elev[x, y])
+ {
+ veg[x, y, 1] -= (amount3 / 2);
+ if (veg[x, y, 1] < 0)
+ {
+ veg[x, y, 1] = 0;
+ veg[x, y, 0] = elev[x, y]; // resets elev if veg amt is 0
+ }
+
+ }
+
+ // but if it is under sediment, has died back to nearly 0 (0.05) then it resets the elevation
+ // to the surface elev.
+ if (veg[x, y, 0] < elev[x, y]&&veg[x,y,1]<0.05)
+ {
+ veg[x, y, 0] = elev[x, y];
+ }
+
+
+ }
+ }
+
+
+ }
+
+
+ void creep(double time)
+ {
+
+ /** creep rate is 10*-2 * slope per year, so inputs time jump in years*/
+ /** very important differnece here is that slide_GS() is called only if
+ BOTH cells are not -9999 therfore if both have grainsize then do additions.
+ this is to stop the progressive spread of selected cells upslope */
+
+
+
+ int x,y;
+ double temp;
+
+
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ tempcreep[x,y]=0;
+ }
+ }
+
+
+ for(x=2;xbedrock[x,y])
+ {
+ if(elev[x,y-1] -9999)
+ {
+ temp=((elev[x,y]-elev[x,y-1])/ DX)*CREEP_RATE*time/ DX;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x+1,y-1])/ root)*CREEP_RATE*time/ root;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x+1,y])/ DX)*CREEP_RATE*time/ DX;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x+1,y+1])/ root)*CREEP_RATE*time/ root;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x,y+1])/ DX)*CREEP_RATE*time/ DX;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x-1,y+1])/ root)*CREEP_RATE*time/ root;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x-1,y])/ DX)*CREEP_RATE*time/ DX;
+ if((elev[x,y]-temp) -9999)
+ {
+ temp=((elev[x,y]-elev[x-1,y-1])/ root)*CREEP_RATE*time/ root;
+ if((elev[x,y]-temp) bedrock[x, y])
+ {
+ //SibQ = Math.Pow(area[x, y] * DX * DX, m3);
+ //SibQsf = DX * Beta3 * Beta1 * Math.Pow((SibQ), m1) * Math.Pow(max_bed_slope2(x, y), n1) * time;
+
+ SibQ = Beta3 * Math.Pow(area[x, y] * DX * DX, m3);
+ SibQsf = Beta1 * Math.Pow((SibQ / DX), m1) * Math.Pow(max_bed_slope2(x, y), n1) * time;
+ double max_slope = max_bed_slope2(x, y);
+ if (max_slope == 0) max_slope = 10; // catch line to stop erosion if there is no slope
+ //if (max_slope > 0) max_slope *= 0.99;
+
+ if ((elev[x, y]-elev[x, y - 1] )/ DX >= max_slope && elev[x, y - 1] > -9999)
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x, y - 1);
+ }
+ }
+ if ((elev[x, y] - elev[x + 1, y - 1]) / root >= max_slope && (elev[x + 1, y - 1] > -9999 || x == xmax))
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y - 1);
+ }
+
+ }
+ if ((elev[x, y] - elev[x + 1, y]) / DX >= max_slope && (elev[x + 1, y] > -9999 || x == xmax))
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y);
+ }
+ }
+ if ((elev[x, y] - elev[x + 1, y + 1]) / root >= max_slope && (elev[x + 1, y + 1] > -9999 || x == xmax))
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y + 1);
+ }
+ }
+ if ((elev[x, y] - elev[x, y + 1]) / DX >= max_slope && elev[x, y + 1] > -9999 )
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x, y + 1);
+ }
+ }
+ if ((elev[x, y] - elev[x - 1, y + 1]) / root >= max_slope && elev[x - 1, y + 1] > -9999 )
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y + 1);
+ }
+ }
+ if ((elev[x, y] - elev[x - 1, y]) / DX >= max_slope && elev[x - 1, y] > -9999 )
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y);
+ }
+ }
+ if ((elev[x, y] - elev[x - 1, y - 1]) / root >= max_slope && elev[x - 1, y - 1] > -9999 )
+ {
+ temp = SibQsf;
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y - 1);
+ }
+ }
+
+ }
+ }
+ }
+
+ for (x = 2; x < xmax; x++)
+ {
+ for (y = 2; y < ymax; y++)
+ {
+ elev[x, y] += tempcreep[x, y];
+ }
+ }
+
+ }
+
+
+ void soilerosion(double time)
+ {
+
+ /** creep rate is 10*-2 * slope per year, so inputs time jump in years*/
+ /** very important differnece here is that slide_GS() is called only if
+ BOTH cells are not -9999 therfore if both have grainsize then do additions.
+ this is to stop the progressive spread of selected cells upslope */
+
+
+
+ int x, y;
+ double temp;
+
+
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ tempcreep[x, y] = 0;
+ }
+ }
+
+
+ for (x = 2; x < xmax; x++)
+ {
+ for (y = 2; y < ymax; y++)
+ {
+ if (elev[x, y] > bedrock[x, y])
+ {
+ if (elev[x, y - 1] < elev[x, y] && elev[x, y - 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x, y - 1]) / DX) * SOIL_RATE * time / DX * Math.Pow(area[x,y]*DX*DX,0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x, y - 1);
+ }
+ }
+ if (elev[x + 1, y - 1] < elev[x, y] && elev[x + 1, y - 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x + 1, y - 1]) / root) * SOIL_RATE * time / root * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y - 1);
+ }
+
+ }
+ if (elev[x + 1, y] < elev[x, y] && elev[x + 1, y] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x + 1, y]) / DX) * SOIL_RATE * time / DX * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y);
+ }
+ }
+ if (elev[x + 1, y + 1] < elev[x, y] && elev[x + 1, y + 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x + 1, y + 1]) / root) * SOIL_RATE * time / root * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x + 1, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x + 1, y + 1);
+ }
+ }
+ if (elev[x, y + 1] < elev[x, y] && elev[x, y + 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x, y + 1]) / DX) * SOIL_RATE * time / DX * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x, y + 1);
+ }
+ }
+ if (elev[x - 1, y + 1] < elev[x, y] && elev[x - 1, y + 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x - 1, y + 1]) / root) * SOIL_RATE * time / root * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y + 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y + 1);
+ }
+ }
+ if (elev[x - 1, y] < elev[x, y] && elev[x - 1, y] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x - 1, y]) / DX) * SOIL_RATE * time / DX * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y);
+ }
+ }
+ if (elev[x - 1, y - 1] < elev[x, y] && elev[x - 1, y - 1] > -9999)
+ {
+ temp = ((elev[x, y] - elev[x - 1, y - 1]) / root) * SOIL_RATE * time / root * Math.Pow(area[x, y] * DX * DX, 0.5);
+ if ((elev[x, y] - temp) < bedrock[x, y]) temp = elev[x, y] - bedrock[x, y];
+ if (temp < 0) temp = 0;
+ tempcreep[x, y] -= temp;
+ tempcreep[x - 1, y - 1] += temp;
+ if (index[x, y] != -9999)
+ {
+ slide_GS(x, y, temp, x - 1, y - 1);
+ }
+ }
+ }
+ }
+ }
+
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ elev[x, y] += tempcreep[x, y];
+ }
+ }
+
+ }
+
+
+ void get_area()
+ {
+ int x,y;
+
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ area_depth[x,y]=1;
+ area[x, y] = 0;
+ if (elev[x, y] == -9999)
+ {
+ area_depth[x, y] = 0.0;
+ }
+
+ }
+ }
+ get_area4();
+
+ }
+
+
+ void get_area4()
+ {
+
+ // new routine for determining drainage area 4/10/2010
+ // instead of using sweeps this sorts all the elevations then works frmo the
+ // highest to lowest - calculating drainage area - D-infinity basically.
+
+ int x, y, n, x2,y2, dir;
+
+ // zero load of arrays
+ double [] tempvalues,tempvalues2, xkey, ykey;
+ tempvalues = new Double [(xmax+2) *(ymax+2)];
+ tempvalues2 = new Double[(xmax+2) * (ymax+2)];
+ xkey = new Double [(xmax+2)*(ymax+2)];
+ ykey = new Double[(xmax+2) * (ymax+2)];
+
+ // then createst temp array based on elevs then also one for x values.
+ int inc = 1;
+ for (y = 1; y <= ymax; y++)
+ {
+ for (x = 1; x <= xmax; x++)
+ {
+ tempvalues[inc] = elev[x, y];
+ xkey[inc] = x;
+ inc++;
+ }
+ }
+ // then sorts according to elevations - but also sorts the key (xkey) according to these too..
+ Array.Sort(tempvalues, xkey);
+
+ // now does the same for y values
+ inc = 1;
+ for (y = 1; y <= ymax; y++)
+ {
+ for (x = 1; x <= xmax; x++)
+ {
+ tempvalues2[inc] = elev[x, y];
+ ykey[inc] = y;
+ inc++;
+ }
+ }
+
+ Array.Sort(tempvalues2, ykey);
+
+
+ // then works through the list of x and y co-ordinates from highest to lowest...
+ for (n = (xmax * ymax); n >= 1; n--)
+ {
+ x = (int)(xkey[n]);
+ //this.InfoStatusPanel.Text = Convert.ToString(x);
+ y = (int)(ykey[n]);
+ //this.InfoStatusPanel.Text = Convert.ToString(y);
+
+ if (area_depth[x, y] > 0)
+ {
+ // update area if area_depth is higher
+ if (area_depth[x, y] > area[x, y]) area[x, y] = area_depth[x, y];
+
+ double difftot = 0;
+
+ // work out sum of +ve slopes in all 8 directions
+ for (dir = 1; dir <= 8; dir++)//was 1 to 8 +=2
+ {
+
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+ if (x2 < 1) x2 = 1; if (y2 < 1) y2 = 1; if (x2 > xmax) x2 = xmax;if(y2>ymax)y2=ymax;
+
+ // swap comment lines below for drainage area from D8 or Dinfinity
+ if (Math.IEEERemainder(dir, 2) != 0)
+ {
+ if (elev[x2, y2] < elev[x, y]) difftot += elev[x, y] - elev[x2, y2];
+ }
+ else
+ {
+ if (elev[x2, y2] < elev[x, y]) difftot += (elev[x, y] - elev[x2, y2]) / 1.414;
+ }
+ //if(elev[x,y]-elev[x2,y2]>difftot)difftot=elev[x,y]-elev[x2,y2];
+ }
+ if (difftot > 0)
+ {
+ // then distribute to all 8...
+ for (dir = 1; dir <= 8; dir++)//was 1 to 8 +=2
+ {
+
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+ if (x2 < 1) x2 = 1; if (y2 < 1) y2 = 1; if (x2 > xmax) x2 = xmax; if (y2 > ymax) y2 = ymax;
+
+ // swap comment lines below for drainage area from D8 or Dinfinity
+
+ if (Math.IEEERemainder(dir, 2) != 0)
+ {
+ if (elev[x2, y2] < elev[x, y]) area_depth[x2, y2] += area_depth[x, y] * ((elev[x, y] - elev[x2, y2]) / difftot);
+ }
+ else
+ {
+ if (elev[x2, y2] < elev[x, y]) area_depth[x2, y2] += area_depth[x, y] * (((elev[x, y] - elev[x2, y2])/1.414) / difftot);
+ }
+
+ //if (elev[x, y] - elev[x2, y2] == difftot) area_depth[x2, y2] += area_depth[x, y];
+ }
+
+ }
+ // finally zero the area depth...
+ area_depth[x, y] = 0;
+ }
+ }
+
+ }
+
+
+ void init_route(int flag, double reach_input_amount, double catchment_input_amount)
+ {
+ int x,y,inc;
+
+ double w = water_depth_erosion_threshold;
+
+
+ /*******************************/
+
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ cross_scan[x,y]=0;
+ down_scan[y,x]=0;
+ //if(water_depth[x,y]==-9999)water_depth[x,y]=0;
+ }
+ }
+
+
+
+ for(x=1;x<=xmax;x++)
+ {
+ inc=1;
+ for(y=1;y<=ymax;y++)
+ {
+ if (water_depth[x, y] > 0
+ || water_depth[x - 1, y] > 0
+ || water_depth[x + 1, y] > 0
+ || water_depth[x, y - 1] > 0
+ || water_depth[x, y + 1] > 0)
+ {
+ cross_scan[x,inc]=y;
+ inc++;
+ }
+ //discharge[x,y]=0;
+ }
+ }
+
+ for(y=1;y<=ymax;y++)
+ {
+ inc=1;
+ for(x=xmax;x>=1;x--)
+ {
+ if(water_depth[x,y]>0
+ ||water_depth[x-1,y]>0
+ ||water_depth[x+1,y]>0
+ ||water_depth[x,y-1]>0
+ ||water_depth[x,y+1]>0)
+ {
+ down_scan[y,inc]=x;
+ inc++;
+ }
+ //if(input_type_flag==1)discharge[x,y]=0;
+ }
+ }
+
+
+ this.InfoStatusPanel.Text="Running"; // MJ 14/01/05
+
+ }
+
+ //double Fi(int index1, int t)
+ //{
+ // int n;
+ // double active_thickness = 0;
+ // double total = 0;
+
+ // // part to deal with tracers is now hard coded in order to speed things up - with
+ // // an if statement at the start.. saves un-necessary looping
+
+
+ // for (n = 1; n <= G_MAX; n++)
+ // {
+ // active_thickness += (grain[index1, n]);
+ // }
+
+
+ // total += (grain[index1, t]);
+
+ // if (active_thickness < 0.0001)
+ // {
+ // return (0.0);
+ // }
+ // else
+ // {
+ // return (total / active_thickness);
+ // }
+ //}
+
+ private void calc_J(double cycle)
+ {
+ for (int n = 1; n <= rfnum; n++)
+ {
+ double local_rain_fall_rate; /** in m/second **/
+ double local_time_step = 60; /** in secs */
+
+
+ old_j_mean[n] = new_j_mean[n];
+ jo[n] = j[n];
+
+ /* Get The M Value From File If One Is Specified */
+ if (variable_m_value_flag == 1)
+ {
+ M[n] = hourly_m_value[1 + (int)(cycle / mfiletimestep), n];
+ }
+
+ local_rain_fall_rate = 0;
+ if (hourly_rain_data[(int)(cycle / rain_data_time_step), n] > 0)
+ {
+ local_rain_fall_rate = rain_factor * ((hourly_rain_data[(int)(cycle / rain_data_time_step), n] / 1000) / 3600); /** divide by 1000 to make m/hr, then by 3600 for m/sec */
+ }
+
+ if (local_rain_fall_rate == 0)
+ {
+ j[n] = jo[n] / (1 + ((jo[n] * local_time_step) / M[n]));
+ new_j_mean[n] = M[n] / local_time_step * Math.Log(1 + ((jo[n] * local_time_step) / M[n]));
+ }
+
+ if (local_rain_fall_rate > 0)
+ {
+ j[n] = local_rain_fall_rate / (((local_rain_fall_rate - jo[n]) / jo[n]) * Math.Exp((0 - local_rain_fall_rate) * local_time_step / M[n]) + 1);
+ new_j_mean[n] = (M[n] / local_time_step) * Math.Log(((local_rain_fall_rate - jo[n]) + jo[n] * Math.Exp((local_rain_fall_rate * local_time_step) / M[n])) / local_rain_fall_rate);
+ }
+ if (new_j_mean[n] < 0) new_j_mean[n] = 0;
+ /**printf("new J mean = %f\n",(new_j_mean*1000));*/
+ }
+
+ }
+
+ double calc_max_flow_direction_degrees(int x, int y)
+ {
+ double deg = 0;
+ if (water_depth[x, y] > water_depth_erosion_threshold)
+ {
+ double xplus = vel_dir[x, y, 3];
+ double xminus = vel_dir[x, y, 7];
+ double yplus = vel_dir[x, y, 5];
+ double yminus = vel_dir[x, y, 1];
+ if (xplus < 0) xplus = 0;
+ if (xminus < 0) xminus = 0;
+ if (yplus < 0) yplus = 0;
+ if (yminus < 0) yminus = 0;
+ double xbalance = xplus - xminus;
+ double ybalance = yminus - yplus;
+
+ //working out max_flow for 12-3pm
+
+ if (xbalance > 0 && ybalance < 0)
+ {
+
+ deg = (Math.Atan(xbalance / Math.Abs(ybalance)) * (180 / 3.142));
+
+ }
+
+ // for 3pm to 6pm
+ if (xbalance > 0 && ybalance > 0)
+ {
+ deg = 90 + (Math.Atan(ybalance / xbalance) * (180 / 3.142));
+ }
+
+ // for 6 - 9
+ if (xbalance < 0 && ybalance > 0)
+ {
+ deg = 180 + (Math.Atan(Math.Abs(xbalance) / Math.Abs(ybalance)) * (180 / 3.142));
+ }
+
+ // for 9-12
+ if (xbalance < 0 && ybalance < 0)
+ {
+ deg = 270 + (Math.Atan(Math.Abs(ybalance) / Math.Abs(xbalance)) * (180 / 3.142));
+ }
+
+ if (xbalance > 0 && ybalance == 0) deg = 90;
+ if (xbalance < 0 && ybalance == 0) deg = 270;
+ if (ybalance > 0 && xbalance == 0) deg = 180;
+ if (ybalance < 0 && xbalance == 0) deg = 0;
+
+ return (deg);
+
+ }
+ else
+ {
+ return -9999.0;
+ }
+
+
+ }
+
+ void qroute()
+ {
+ double local_time_factor = time_factor;
+ if (local_time_factor > (courant_number * (DX / Math.Sqrt(gravity * (maxdepth))))) local_time_factor = courant_number * (DX / Math.Sqrt(gravity * (maxdepth)));
+
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax+1, options, delegate(int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+ if (elev[x, y] > -9999) // to stop moving water in to -9999's on elev
+ {
+ // add spatial mannings here
+ double temp_mannings = mannings;
+ if (SpatVarManningsCheckbox.Checked == true) temp_mannings = spat_var_mannings[x, y];
+
+ // routing in x direction
+ if ((water_depth[x, y] > 0 || water_depth[x - 1, y] > 0) && elev[x - 1, y] > -9999) // need to check water and not -9999 on elev
+ {
+ double hflow = Math.Max(elev[x, y] + water_depth[x, y], elev[x - 1, y] + water_depth[x - 1, y]) -
+ Math.Max(elev[x - 1, y], elev[x, y]);
+
+ if (hflow > hflow_threshold)
+ {
+ double tempslope = (((elev[x - 1, y] + water_depth[x - 1, y])) -
+ (elev[x, y] + water_depth[x, y])) / DX;
+
+ if (x == xmax) tempslope = edgeslope;
+ if (x <= 2) tempslope = 0 - edgeslope;
+
+ //double oldqx = qx[x, y];
+ qx[x, y] = ((qx[x, y] - (gravity * hflow * local_time_factor * tempslope)) /
+ (1 + gravity * hflow * local_time_factor * (temp_mannings * temp_mannings) * Math.Abs(qx[x, y]) /
+ Math.Pow(hflow, (10 / 3))));
+ //if (oldqx != 0) qx[x, y] = (oldqx + qx[x, y]) / 2;
+
+ // need to have these lines to stop too much water moving from one cellt o another - resulting in -ve discharges
+ // whihc causes a large instability to develop - only in steep catchments really
+ if (qx[x, y] > 0 && (qx[x, y] / hflow)/Math.Sqrt(gravity*hflow) > froude_limit ) qx[x, y] = hflow * (Math.Sqrt(gravity*hflow) * froude_limit );
+ if (qx[x, y] < 0 && Math.Abs(qx[x, y] / hflow) / Math.Sqrt(gravity * hflow) > froude_limit ) qx[x, y] = 0 - (hflow * (Math.Sqrt(gravity * hflow) * froude_limit ));
+
+ if (qx[x, y] > 0 && (qx[x, y] * local_time_factor / DX) > (water_depth[x, y] / 4)) qx[x, y] = ((water_depth[x, y] * DX) / 5) / local_time_factor;
+ if (qx[x, y] < 0 && Math.Abs(qx[x, y] * local_time_factor / DX) > (water_depth[x - 1, y] / 4)) qx[x, y] = 0 - ((water_depth[x - 1, y] * DX) / 5) / local_time_factor;
+
+ if (isSuspended[1])
+ {
+
+ if (qx[x, y] > 0) qxs[x, y] = qx[x, y] * (Vsusptot[x, y] / water_depth[x, y]);
+ if (qx[x, y] < 0) qxs[x, y] = qx[x, y] * (Vsusptot[x - 1, y] / water_depth[x - 1, y]);
+
+ if (qxs[x, y] > 0 && qxs[x, y] * local_time_factor > (Vsusptot[x, y] * DX) / 4) qxs[x, y] = ((Vsusptot[x, y] * DX) / 5) / local_time_factor;
+ if (qxs[x, y] < 0 && Math.Abs(qxs[x, y] * local_time_factor) > (Vsusptot[x - 1, y] * DX) / 4) qxs[x, y] = 0 - ((Vsusptot[x - 1, y] * DX) / 5) / local_time_factor;
+ }
+
+ // calc velocity now
+ if (qx[x, y] > 0) vel_dir[x, y, 7] = qx[x, y] / hflow;
+ if (qx[x, y] < 0) vel_dir[x - 1, y, 3] = (0- qx[x, y]) / hflow;
+
+ }
+ else
+ {
+ qx[x, y] = 0;
+ qxs[x, y] = 0;
+ }
+ }
+
+ //routing in the y direction
+ if ((water_depth[x, y] > 0 || water_depth[x, y - 1] > 0) && elev[x, y - 1] > -9999)
+ {
+ double hflow = Math.Max(elev[x, y] + water_depth[x, y], elev[x, y - 1] + water_depth[x, y - 1]) -
+ Math.Max(elev[x, y], elev[x, y - 1]);
+
+ if (hflow > hflow_threshold)
+ {
+ double tempslope = (((elev[x, y - 1] + water_depth[x, y - 1])) -
+ (elev[x, y] + water_depth[x, y])) / DX;
+ if (y == ymax) tempslope = edgeslope;
+ if (y <= 2 ) tempslope = 0 - edgeslope;
+
+ //double oldqy = qy[x, y];
+ qy[x, y] = ((qy[x, y] - (gravity * hflow * local_time_factor * tempslope)) /
+ (1 + gravity * hflow * local_time_factor * (temp_mannings * temp_mannings) * Math.Abs(qy[x, y]) /
+ Math.Pow(hflow, (10 / 3))));
+ //if (oldqy != 0) qy[x, y] = (oldqy + qy[x, y]) / 2;
+
+ // need to have these lines to stop too much water moving from one cellt o another - resulting in -ve discharges
+ // whihc causes a large instability to develop - only in steep catchments really
+ if (qy[x, y] > 0 && (qy[x, y] / hflow) / Math.Sqrt(gravity * hflow) > froude_limit ) qy[x, y] = hflow * (Math.Sqrt(gravity * hflow) * froude_limit );
+ if (qy[x, y] < 0 && Math.Abs(qy[x, y] / hflow) / Math.Sqrt(gravity * hflow) > froude_limit ) qy[x, y] = 0 - (hflow * (Math.Sqrt(gravity * hflow) * froude_limit));
+
+ if (qy[x, y] > 0 && (qy[x, y] * local_time_factor / DX) > (water_depth[x, y] / 4)) qy[x, y] = ((water_depth[x, y] * DX) / 5) / local_time_factor;
+ if (qy[x, y] < 0 && Math.Abs(qy[x, y] * local_time_factor / DX) > (water_depth[x, y - 1] / 4)) qy[x, y] = 0 - ((water_depth[x, y - 1] * DX) / 5) / local_time_factor;
+
+
+ if (isSuspended[1])
+ {
+
+ if (qy[x, y] > 0) qys[x, y] = qy[x, y] * (Vsusptot[x, y] / water_depth[x, y]);
+ if (qy[x, y] < 0) qys[x, y] = qy[x, y] * (Vsusptot[x, y - 1] / water_depth[x, y - 1]);
+
+ if (qys[x, y] > 0 && qys[x, y] * local_time_factor > (Vsusptot[x, y] * DX) / 4) qys[x, y] = ((Vsusptot[x, y] * DX) / 5) / local_time_factor;
+ if (qys[x, y] < 0 && Math.Abs(qys[x, y] * local_time_factor) > (Vsusptot[x, y - 1] * DX) / 4) qys[x, y] = 0 - ((Vsusptot[x, y - 1] * DX) / 5) / local_time_factor;
+
+ }
+
+ // calc velocity now
+ if (qy[x, y] > 0) vel_dir[x, y, 1] = qy[x, y] / hflow;
+ if (qy[x, y] < 0) vel_dir[x, y - 1, 5] = (0-qy[x, y]) / hflow;
+ }
+ else
+ {
+ qy[x, y] = 0;
+ qys[x, y] = 0;
+ }
+ }
+
+ }
+ }
+ });
+
+
+ }
+
+ void depth_update()
+ {
+ double local_time_factor = time_factor;
+ if (local_time_factor > (courant_number * (DX / Math.Sqrt(gravity * (maxdepth))))) local_time_factor = courant_number * (DX / Math.Sqrt(gravity * (maxdepth)));
+ double [] tempmaxdepth2;
+ tempmaxdepth2 = new Double[ymax + 2];
+
+ maxdepth = 0;
+
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax+1, options, delegate(int y)
+ {
+ int inc = 1;
+ double tempmaxdepth = 0;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+ // update water depths
+ water_depth[x,y] += local_time_factor * (qx[x + 1, y] - qx[x, y] + qy[x, y + 1] - qy[x, y]) / DX;
+ // now update SS concs
+ if (isSuspended[1])
+ {
+ Vsusptot[x, y] += local_time_factor * (qxs[x + 1, y] - qxs[x, y] + qys[x, y + 1] - qys[x, y]) / DX;
+ }
+
+ if (water_depth[x, y] > 0)
+ {
+ // line to remove any water depth on nodata cells (that shouldnt get there!)
+ if (elev[x, y] == -9999) water_depth[x, y] = 0;
+ // calc max flow depth for time step calc
+ if (water_depth[x, y] > tempmaxdepth) tempmaxdepth = water_depth[x, y];
+ }
+ }
+ tempmaxdepth2[y] = tempmaxdepth;
+ });
+ // reduction
+ for (int y = 1; y <= ymax; y++) if (tempmaxdepth2[y] > maxdepth) maxdepth = tempmaxdepth2[y];
+ }
+
+
+ void scan_area()
+ {
+ double tempW = 0;// water_depth_erosion_threshold;
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax+1, options, delegate(int y)
+ {
+ int inc = 1;
+
+ for (int x = 1; x <= xmax; x++)
+ {
+ // zero scan bit..
+ down_scan[y, x] = 0;
+ // and work out scanned area.
+ if (water_depth[x, y] > tempW
+ || water_depth[x - 1, y] > tempW
+ //|| water_depth[x - 1, y - 1] > tempW
+ //|| water_depth[x - 1, y + 1] > tempW
+ //|| water_depth[x + 1, y - 1] > tempW
+ //|| water_depth[x + 1, y + 1] > tempW
+ || water_depth[x, y - 1] > tempW
+ || water_depth[x + 1, y] > tempW
+ || water_depth[x, y + 1] > tempW)
+ {
+ down_scan[y, inc] = x;
+ inc++;
+ }
+ }
+ });
+
+
+
+ Parallel.For(1, xmax + 1, options, delegate (int x)
+ {
+
+ int inc = 1;
+ for (int y = 1; y <= ymax; y++)
+ {
+ cross_scan[x, y] = 0;
+ if (water_depth[x, y] > tempW
+ || water_depth[x - 1, y] > tempW
+ || water_depth[x + 1, y] > tempW
+ || water_depth[x, y - 1] > tempW
+ || water_depth[x, y + 1] > tempW)
+ {
+ cross_scan[x, inc] = y;
+ inc++;
+ }
+ //discharge[x,y]=0;
+ }
+
+ });
+
+
+ }
+
+ private void zero_values()
+ {
+ int x,y,z,n;
+
+ for(y=0;y<=ymax;y++)
+ {
+ for(x=0;x<=xmax;x++)
+ {
+ Vel[x, y] = 0;
+ area[x,y]=0;
+ elev[x,y]=0;
+ bedrock[x,y]=-9999;
+ init_elevs[x,y]=elev[x,y];
+ water_depth[x,y]=0;
+ index[x,y]=-9999;
+ inputpointsarray[x, y] = false;
+ veg[x, y, 0] = 0;// elevation
+ veg[x, y, 1] = 0; // density
+ veg[x,y,2]=0; // jw density
+ veg[x,y,3]=0; // height
+
+ edge[x,y]=0;
+ edge2[x,y]=0;
+
+
+ sand[x, y] = 0;
+
+ qx[x, y] = 0;
+ qy[x, y] = 0;
+
+ qxs[x, y] = 0;
+ qys[x, y] = 0;
+
+
+ for(n=0;n<=8;n++)vel_dir[x,y,n]=0;
+
+ Vsusptot[x, y] = 0;
+
+ rfarea[x, y] = 1;
+
+ if (SpatVarManningsCheckbox.Checked == true) spat_var_mannings[x, y] = mannings;
+
+ }
+ }
+
+ for(x=1;x<((xmax*ymax)/LIMIT);x++)
+ {
+ for(y=0;y<=G_MAX;y++)
+ {
+ grain[x,y]=0;
+ }
+ for(z=0;z<=9;z++)
+ {
+ for(y=0;y<=G_MAX-2;y++)
+ {
+
+ strata[x,z,y]=0;
+ }
+ }
+ catchment_input_x_coord[x]=0;
+ catchment_input_y_coord[x]=0;
+ }
+
+ for (x = 1; x <= rfnum; x++)
+ {
+ j[x] = 0.000000001;
+ jo[x] = 0.000000001;
+ j_mean[x] = 0;
+ old_j_mean[x] = 0;
+ new_j_mean[x] = 0;
+ M[x] = double.Parse(mvaluebox.Text);
+ }
+ }
+
+ void dune1(double time) // does dune things from top to bottom
+ {
+ int dune_recirculate = 0;
+ int x, y, n, prob, counter1 = 1, ytemp, ytemp2,x2,y2;
+ int t, checkup = int.Parse(upstream_check_box.Text);
+ int flag = 1;
+
+ double maxslabdepth = double.Parse(slab_depth_box.Text);
+ int dep_probability= int.Parse(depo_prob_box.Text);
+ int downstream_offset = int.Parse(offset_box.Text);
+ double number_slabs_per_col = double.Parse(init_depth_box.Text);
+ double angle = double.Parse(shadow_angle_box.Text);
+
+ double fractiondune = double.Parse(fraction_dune.Text);
+ double slabdepth = maxslabdepth;
+
+ double factor = Math.Tan((angle * (3.141592654 / 180))) * (DX/dune_mult);
+ Random xr = new Random();
+
+ double [,] oldelev;
+ oldelev = new double[xmax + 2, ymax + 2];
+
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ // subtract eleev from sand so splitting into sand and elev for dune part...
+ oldelev[x, y] = elev[x, y];
+
+
+ double sandsum = 0;
+ double sand_diff = 0;
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ // this next line is needed to remove all sand from the far LH and RH cells
+ if (x == xmax) sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] = 0;
+ if (x == 1) sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] = 0;
+
+ if (sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] > 0)
+ {
+ sandsum += sand2[(x * dune_mult) - x2, (y * dune_mult) - y2];
+ }
+
+ }
+ }
+
+ // if water then transfer sand back to elev.
+ if (water_depth[x, y] >= water_depth_erosion_threshold) sand[x, y] = 0;
+
+
+ // then check and see if sand is less than sand2 - meaning there has been addition of dune sand to flucial sand
+ if (sand[x, y] < (sandsum / (dune_mult * dune_mult)))
+ {
+ sand_diff = (sandsum / (dune_mult * dune_mult)) - sand[x, y];
+
+
+ //if waterdepth >0 then sand > elev and grain (at a rate)
+ //then also reduce sand 2 by same amount transferred.
+
+
+
+ double tempsandvol = sand_diff;// amount to be removed from sand2...
+
+ // now has to reduce sand vol..
+ double sand2tot = 0;
+ int sand2num = 0;
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ if (sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] > 0)
+ {
+ sand2tot += sand2[(x * dune_mult) - x2, (y * dune_mult) - y2];
+ sand2num++;
+ }
+
+ }
+ }
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ if (sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] > 0)
+ {
+ sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] -= (tempsandvol * dune_mult * dune_mult) *
+ (sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] / sand2tot);
+
+ }
+
+ }
+ }
+ }
+
+ elev[x, y] -= sand[x, y];
+
+ // check to add to sand from grain (if no water)
+ // if so then update sand and sand2 (and elev if subtracting from grain and
+ // adding to sand
+
+ if (water_depth[x, y] < water_depth_erosion_threshold)
+ {
+ if (elev[x, y] - init_elevs[x, y] > 0)
+ {
+ double tempslabdepth = elev[x, y] - init_elevs[x, y];
+ //if (tempslabdepth < slabdepth) tempslabdepth = 0;
+ if (tempslabdepth > slabdepth) tempslabdepth = slabdepth;
+ sand[x, y] += tempslabdepth;
+ elev[x, y] -= tempslabdepth;
+
+ // now also update sand2 values... averaged across cell.
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] += tempslabdepth;
+ }
+ }
+
+ }
+
+ }
+
+ //update elev2 from elev
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ elev2[(x * dune_mult) - x2, (y * dune_mult) - y2] = elev[x, y];
+ }
+ }
+
+ }
+ }
+
+ /////////////////////////////////////////////////////////////
+ // adding sand part
+ /////////////////////////////////////////////////////////////
+
+ //if (Math.IEEERemainder((int)(cycle / 60000), 2) == 0)
+ //if (Math.IEEERemainder((int)(cycle), 2) == 0)
+
+ for (x = 50; x < (xmax) * dune_mult * fractiondune; x++)
+ {
+ //if(Math.IEEERemainder(Math.Abs(x/50)-1,3)==0)sand2[x, 1] = initial_sand_depth;
+ sand2[xr.Next(50, (xmax * dune_mult)), 1] += number_slabs_per_col;
+
+ }
+
+ /////////////////////////////////////////////////////////////
+ // end of adding sand code ///
+ /////////////////////////////////////////////////////////////
+
+
+ // check everywhere for sand landslides
+ for (x = 1; x <= xmax*dune_mult; x++)
+ {
+ for (y = 1; y <= ymax*dune_mult; y++)
+ {
+ slide_4(x, y);
+ }
+ }
+
+
+ for (n = 1; n <= fractiondune * (xmax * dune_mult) * (ymax * dune_mult); n++)
+ {
+
+ // creating random x and y co-ords to check...
+ x = xr.Next(1, (xmax*dune_mult) + 1);
+ y = xr.Next(1, (ymax*dune_mult) + 1);
+ prob = 100;
+ counter1 = 0;
+ flag = 1;
+
+ //if (sand2[x, y] >= slabdepth)
+ if (sand2[x, y] >= slabdepth && water_depth[Math.Abs(x / dune_mult), Math.Abs(y / dune_mult)] < water_depth_erosion_threshold)
+ {
+ // to see if should be entrained or not...
+ for (t = 1; t <= checkup; t++)
+ {
+ ytemp = y - t;
+ if(dune_recirculate==1 && ytemp < 1) ytemp = (ymax * dune_mult) + ytemp;
+ if (dune_recirculate == 0 && ytemp < 1) ytemp = 1;
+ if (((sand2[x, ytemp] + elev2[x, ytemp]) - (sand2[x, y] + elev2[x, y])) > (factor * (t)))
+ {
+ flag = 0;
+ t = checkup;
+ }
+
+ }
+
+
+ // now having decided it can be eroded, now see if it can be moved
+ if (flag == 1)
+ {
+ // while random number greater than prob then move on one if poss..
+ while (prob > dep_probability)
+ {
+ counter1++; // shift down one cell...
+ prob = xr.Next(1, 100); // new random number
+
+ //// try moving left and right??
+ //if (xr.Next(1, 100) > 70) x++;
+ //if (xr.Next(1, 100) > 70) x--;
+ //if (x < 1) x = (xmax * dune_mult);
+ //if (x > (xmax * dune_mult)) x = 1;
+
+
+ // now adding in the downsrtream offset if needed done by ensuring prob is 100
+ if (counter1 < downstream_offset) prob = 100; // break;
+
+ // change comments on below lines if you want water to stop sand movement or not
+ //if (water_depth[Math.Abs(x/dune_mult),Math.Abs((y)/dune_mult)] >= water_depth_erosion_threshold) prob = 0;
+ if (water_depth[Math.Abs(x / dune_mult), Math.Abs((y + Math.Abs(counter1 / dune_mult)) / dune_mult)] >= water_depth_erosion_threshold) prob = 0;
+
+ // seeing if in shadow or not...
+ for (t = 1; t < checkup; t++)
+ {
+ ytemp = (y + counter1) - t;
+ ytemp2 = (y + counter1);
+ if (dune_recirculate == 0 && ytemp < 1) ytemp = 1;
+ if (dune_recirculate == 1 && ytemp < 1) ytemp = (ymax * dune_mult) + ytemp;
+ if (dune_recirculate == 1)
+ {
+ if (ytemp > (ymax * dune_mult)) ytemp = 0 + (ytemp - (ymax * dune_mult));
+ if (ytemp2 > (ymax * dune_mult)) ytemp2 = 0 + (ytemp2 - (ymax * dune_mult));
+ }
+ if (((sand2[x, ytemp] + elev2[x, ytemp]) - (sand2[x, ytemp2] + elev2[x, ytemp2])) > (factor * t))
+ {
+ t = checkup;
+ prob = 0;
+ }
+
+ }
+ //if (elev[x, ytemp - 1] - elev[x, y] > factor) break;
+ }
+
+ double tempmax = sand2[x, y];
+ if (tempmax < 0) tempmax = 0;
+
+
+
+ // now erode sand if there is enough there in the sand layer
+ if (slabdepth < tempmax) tempmax = slabdepth;
+ if (tempmax < 0) tempmax = 0;
+ sand2[x, y] -= tempmax;
+ // do landslides for just that cell and ones around.
+ slide_4(x, y);
+
+ ytemp = y + counter1;
+
+ if (dune_recirculate == 1)
+ {
+ if (ytemp > (ymax * dune_mult))
+ {
+ ytemp = ytemp - (ymax * dune_mult);
+ sand_out += (tempmax * (DX / dune_mult) * (DX / dune_mult));
+ }
+ }
+
+ // now deposit sand
+
+ if (ytemp <= ymax * dune_mult)
+ {
+ sand2[x, ytemp] += tempmax;
+
+ // do landslides for just that cell and ones around.
+ slide_4(x, ytemp);
+ }
+ if(ytemp > (ymax*dune_mult))sand_out+=(tempmax*(DX/dune_mult)*(DX/dune_mult));
+
+ }
+ }
+
+ }
+
+
+
+
+ // now do landslides everywhere 5 times... just to make sure..
+ for (t = 1; t <= 5; t++)
+ {
+ for (x = 1; x <= xmax*dune_mult; x++)
+ {
+ for (y = 1; y <= ymax*dune_mult; y++)
+ {
+ if(sand2[x,y]>0)slide_4(x, y);
+ }
+ }
+ }
+
+ // sand = mean sand2
+
+ for (x = 1; x <= (xmax); x++)
+ {
+ for (y = 1; y <= (ymax); y++)
+ {
+
+ double sandsum = 0;
+ for (x2 = 0; x2 < dune_mult; x2++)
+ {
+ for (y2 = 0; y2 < dune_mult; y2++)
+ {
+ // this next line is needed to remove all sand from the far LH and RH cells
+ if (x == xmax) sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] = 0;
+ if (x == 1) sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] = 0;
+
+ if (sand2[(x * dune_mult) - x2, (y * dune_mult) - y2] > 0)
+ {
+ sandsum += sand2[(x * dune_mult) - x2, (y * dune_mult) - y2];
+ }
+
+ }
+ }
+
+
+ sand[x,y] = sandsum/(dune_mult*dune_mult);
+
+ double newelev = elev[x, y] + sand[x, y];
+ elev[x, y] = oldelev[x, y];
+ elev_diff[x, y] = oldelev[x, y] - newelev;
+
+ }
+
+ }
+
+
+
+ }
+
+ void calc_hillshade() //
+ {
+ //Local variables
+ int x, y;
+
+ double slopemax;
+ double slope;
+ int slopetot;
+ double local_Illumination;
+
+ // Initialize Hillshade Paramaters
+ double azimuth = 315 * (3.141592654/180); // Default of 315 degrees converted to radians
+ double altitude = 45 * (3.141592654/180); // Default of 45 degrees converted to radians
+
+
+
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ if(elev[x,y] != -9999)
+ {
+ slopemax=0.0;
+ slope=0.0;
+ slopetot=0;
+
+ // Do slope analysis and Aspect Calculation first
+ if(elev[x,y] > elev[x,y-1] && elev[x,y-1] != -9999) // North 0
+ {
+ slope = Math.Pow((elev[x,y]-elev[x,y-1])/ root,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 0 * (3.141592654/180);
+ }
+
+ }
+ if(elev[x,y] > elev[x+1,y-1] && elev[x+1,y-1] != -9999) // Northeast 45
+ {
+ slope = Math.Pow((elev[x,y]-elev[x+1,y-1])/ DX,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 45 * (3.141592654/180);
+ }
+ }
+ if(elev[x,y] > elev[x+1,y] && elev[x+1,y] != -9999) // East 90
+ {
+ slope = Math.Pow((elev[x,y]-elev[x+1,y])/ root,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 90 * (3.141592654/180);
+ }
+ }
+ if(elev[x,y] > elev[x+1,y+1] && elev[x+1,y+1] != -9999) // SouthEast 135
+ {
+ slope = Math.Pow((elev[x,y]-elev[x+1,y+1])/ root,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 135 * (3.141592654/180);
+ }
+
+ }
+ if(elev[x,y] > elev[x,y+1] && elev[x,y+1] != -9999) // South 180
+ {
+ slope = Math.Pow((elev[x,y]-elev[x,y+1])/ DX,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 180 * (3.141592654/180);
+ }
+ }
+ if(elev[x,y] > elev[x-1,y+1] && elev[x-1,y+1] != -9999) // SouthWest 225
+ {
+ slope = Math.Pow((elev[x,y]-elev[x-1,y+1])/ root,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 225 * (3.141592654/180);
+ }
+ }
+ if(elev[x,y] > elev[x-1,y] && elev[x-1,y] != -9999) // West 270
+ {
+ slope = Math.Pow((elev[x,y]-elev[x-1,y])/ root,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 270;
+ }
+ }
+ if(elev[x,y] > elev[x-1,y-1] && elev[x-1,y-1] != -9999) // Northwest 315
+ {
+ slope = Math.Pow((elev[x,y]-elev[x-1,y-1])/ DX,1);
+ if(slope > slopemax)
+ {
+ slopemax=slope;
+ slopetot++;
+ aspect[x,y] = 315 * (3.141592654/180);
+ }
+ }
+
+ if (slope > 0) slopeAnalysis[x,y] = slopemax;// Tom's: (slope/slopetot); ?
+
+ // Convert slope to radians
+ slopeAnalysis[x,y] = System.Math.Atan(slopeAnalysis[x,y]);
+
+
+ // Do Hillshade Calculation
+ local_Illumination = 255 * ((System.Math.Cos(azimuth)
+ * System.Math.Sin(slopeAnalysis[x,y])
+ * System.Math.Cos(aspect[x,y] - azimuth))
+ + (System.Math.Sin(altitude)
+ * System.Math.Cos(slopeAnalysis[x,y])));
+
+ hillshade[x,y] = System.Math.Abs(local_Illumination);
+ }
+ }
+ }
+
+ } // End calc_hillshade()
+
+ void Color_HSVtoRGB() //
+ {
+ // Convert HSV to RGB.
+ // Made this a seperate function as it is called multiple times in drawwater().
+
+ if (sat == 0)
+ {
+ // If sat is 0, all colors are the same.
+ // This is some flavor of gray.
+ red = val;
+ green = val;
+ blue = val;
+ }
+ else
+ {
+ double pFactor;
+ double qFactor;
+ double tFactor;
+
+ double fractionalSector;
+ int sectorNumber;
+ double sectorPos;
+
+ // The color wheel consists of six 60 degree sectors.
+ // Figure out which sector you are in.
+ sectorPos = hue / 60;
+ sectorNumber = (int)(Math.Floor(sectorPos));
+
+ // get the fractional part of the sector.
+ // That is, how many degrees into the sector are you?
+ fractionalSector = sectorPos - sectorNumber;
+
+ // Calculate values for the three axes
+ // of the color.
+ pFactor = val * (1 - sat);
+ qFactor = val * (1 - (sat * fractionalSector));
+ tFactor = val * (1 - (sat * (1 - fractionalSector)));
+
+ // Assign the fractional colors to r, g, and b based on the sector the angle is in.
+ switch (sectorNumber)
+ {
+ case 0:
+ red = val;
+ green = tFactor;
+ blue = pFactor;
+ break;
+ case 1:
+ red = qFactor;
+ green = val;
+ blue = pFactor;
+ break;
+ case 2:
+ red = pFactor;
+ green = val;
+ blue = tFactor;
+ break;
+ case 3:
+ red = pFactor;
+ green = qFactor;
+ blue = val;
+ break;
+ case 4:
+ red = tFactor;
+ green = pFactor;
+ blue = val;
+ break;
+ case 5:
+ red = val;
+ green = pFactor;
+ blue = qFactor;
+ break;
+ }
+ }
+ }
+
+ void drawwater(System.Drawing.Graphics graphics)//
+ {
+ Graphics objGraphics;
+ objGraphics = Graphics.FromImage(m_objDrawingSurface);
+ objGraphics.Clear(SystemColors.Control);
+
+ int x, y, z, tot;
+ int redcol = 0, greencol = 0, bluecol = 0, alphacol = 255;
+ int t=0;
+ double tot_max, tomsedi = 0;
+
+
+ // load background image....
+ //try
+ //{
+ // Image tom1 = Image.FromFile(@"img.png");
+ // objGraphics.DrawImage(tom1, 0, 0, xmax * graphics_scale, ymax * graphics_scale);
+ //}
+ //catch
+ //{
+ //}
+
+
+ // Set Graphics Display Size
+ if (xmax <= 0) xmax = 1;
+
+ //set scaling of graphics - so X bmp pixels to every model pixel.
+ t = graphics_scale;
+
+ // These loop through the entire grid
+ // DEM
+ if (menuItem30.Checked == true)
+ {
+ double zDEM;
+ double zCalc, zMin = 100000.0, zMax = -9990.0, zRange, hsMin = 0, hsMax = 255, hsRange, hs;
+ double valMin = 0.0;
+ double valMax = 1.0;
+
+
+
+ calc_hillshade(); // Call up routine
+
+ // First, find max, min and range of DEM and Hillshade
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ zCalc = elev[x,y];
+ if(zCalc != -9999)
+ {
+ if (zCalc < zMin) zMin = zCalc;
+ if (zCalc > zMax) zMax = zCalc;
+ hs = hillshade[x,y];
+ if (hs < hsMin) hsMin = hs;
+ if (hs > hsMax) hsMax = hs;
+ }
+ }
+ }
+ zRange = zMax - zMin;
+ hsRange = hsMax - hsMin;
+
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ if (elev[x,y] > -9999.0)
+ {
+ // HILLSHADE: Draw first underneath
+
+ // set gray scale intensity
+ hue = 360.0; // hue doesn't matter for gray shade
+ sat = 0.0; // ensures gray shade
+ valMin = 0.0;
+ valMax = 1.0;
+ val = ((hillshade[x,y]/255) * (valMax - valMin)) + valMin; // uses maximum contrast
+// val = (((hillshade[x,y] - hsMin)/(zRange)) * (valMax - valMin)) + valMin; // lower contrast
+
+ Color_HSVtoRGB(); // Call up color conversion
+ redcol = System.Convert.ToInt32(red*255);
+ greencol = System.Convert.ToInt32(green*255);
+ bluecol = System.Convert.ToInt32(blue*255);
+ alphacol = 255;
+
+ SolidBrush brush2 = new SolidBrush(Color.FromArgb(alphacol,redcol,greencol,bluecol));
+ objGraphics.FillRectangle(brush2,(x-1)*t,(y-1)*t,t,t);
+
+
+ // DEM
+ zDEM = (elev[x,y]);
+ // Sets hue based on desired color range (in decimal degrees; max 360)
+ double hueMin = 30.0;
+ double hueMax = 85.0;
+// hue = (((zDEM - zMin)/(zRange)) * (hueMax - hueMin)) + hueMin; // Forward
+ hue = hueMax -(((zDEM - zMin)/(zRange)) * (hueMax - hueMin)); // Reverse
+
+ // Set saturation based on desired range
+ double satMin = 0.50;
+ double satMax = 0.95;
+ sat = (((zDEM - zMin)/(zRange)) * (satMax - satMin)) + satMin;
+// sat = 0; // Use for grey-scale DEM only!
+
+ // Set value based on desired range
+ valMin = 0.40;
+ valMax = 0.80;
+ val = (((zDEM - zMin)/(zRange)) * (valMax - valMin)) + valMin;
+// val = valMax - (((zDEM - zMin)/(zRange)) * (valMax - valMin));
+
+ Color_HSVtoRGB(); // Call up color conversion
+ redcol = System.Convert.ToInt32(red*255);
+ greencol = System.Convert.ToInt32(green*255);
+ bluecol = System.Convert.ToInt32(blue*255);
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ alphacol = 125;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(alphacol,redcol,greencol,bluecol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ } // Close of Entire Grid Mask
+ } // Close of Column Loop
+ } // Close of Row Loop
+
+ } // Close of DEM check box (menuitem34)
+
+
+ // Find Ranges for those in Active Area
+ // Water Depth Range:
+ double wdCalc, wdMin = 100000.0, wdMax =-10.0, wdRange;
+
+ // Find Water Depth Ranges
+ for(x=1;x0)
+ {
+ if(wdCalcwdMax)wdMax=wdCalc;
+ }
+ }
+ }
+ wdRange = wdMax - wdMin;
+
+
+
+ // All these loop through just the 'Active Area'
+ for(x=1;x<=xmax;x++)
+ {
+ for(y=1;y<=ymax;y++)
+ {
+ if (1>0) // Index masks out so only 'active cells' shown was if(index[x,y]>-9999)
+ {
+ // Water Depth
+ if(menuItem3.Checked==true&&water_depth[x,y]>water_depth_erosion_threshold)//MIN_Q)//||discharge[x,y]>0)
+ {
+
+ z=0;
+ if (comboBox1.Text == "water depth")
+ {
+ z = (int)(water_depth[x, y] * (256 / wdRange));
+ }
+ else
+ {
+ z = (int)(water_depth[x, y] * 128);
+ }
+
+ if(z<0)z=0;
+ if(z>254)z=254;
+
+ greencol=255-z;
+ redcol=z;
+ bluecol = 255;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ alphacol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(alphacol,redcol,greencol,bluecol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+
+ // DoD Erosion/ Depostion
+ if(menuItem4.Checked==true)
+ {
+ tomsedi+=(init_elevs[x,y]-elev[x,y]);
+ tomsedi-=(Vsusptot[x,y]);
+ if(init_elevs[x,y]-elev[x,y]>=0.001) //eroding
+ {
+ if (comboBox1.Text == "erosion/dep")
+ {
+ z = (int)((init_elevs[x, y] - elev[x, y]) * 256 * contrastMultiplier);
+ }
+ else
+ {
+ z = (int)((init_elevs[x, y] - elev[x, y]) * 64);
+ }
+ if(z<0)z=0;
+ if(z>254)z=254;
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+ // red green blue
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(255,greencol,greencol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+
+ if(init_elevs[x,y]-elev[x,y]<=-0.001) //depositing
+ {
+ z=(int)((elev[x,y]-init_elevs[x,y])*64);
+ if(z<0)z=0;
+ if(z>254)z=254;
+ greencol=z;
+ redcol=255-z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,255,redcol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+
+ // if(init_elevs[x,y]-elev[x,y]>0.0001&&init_elevs[x,y]-elev[x,y]<0.1)graphics.DrawRectangle(Pens.Yellow,x*t,y*t,t,t);
+ // if(init_elevs[x,y]-elev[x,y]>0.1&&init_elevs[x,y]-elev[x,y]<0.2)graphics.DrawRectangle(Pens.Orange,x*t,y*t,t,t);
+ // if(init_elevs[x,y]-elev[x,y]>0.2&&init_elevs[x,y]-elev[x,y]<10)graphics.DrawRectangle(Pens.Red,x*t,y*t,t,t);
+ // if(init_elevs[x,y]-elev[x,y]<-0.0001&&init_elevs[x,y]-elev[x,y]>-0.1)graphics.DrawRectangle(Pens.LightGreen,x*t,y*t,t,t);
+ // if(init_elevs[x,y]-elev[x,y]<-0.1&&init_elevs[x,y]-elev[x,y]>-0.2)graphics.DrawRectangle(Pens.Green,x*t,y*t,t,t);
+ // if(init_elevs[x,y]-elev[x,y]<-0.2&&init_elevs[x,y]-elev[x,y]>-10)graphics.DrawRectangle(Pens.DarkGreen,x*t,y*t,t,t);
+
+
+ }
+
+ if(menuItem5.Checked==true)
+ {
+ //if(water_depth[x,y]>water_depth_erosion_threshold)//if(index[x,y]!=-9999)
+ {
+ z=(int)(veg[x,y,1]*256);
+
+ //z = rfarea[x, y] * 120;
+ //z = (int)(rfarea[x, y] * 12.6);
+
+ //z = (int)(Vsusptot[x, y] * 20050);
+ //z = (int)(discharge[x,y] * 50.6);
+ //z = (int)(edge2[x,y] * 1000);
+ //z = (int)(Math.Abs(mean_bed_slope (x, y)) * 50 * 256);
+
+ if (z < 0) z = 0;
+ if (z > 254) z = 254;
+ greencol = z;
+ redcol = 255 - z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol, 255, redcol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+ }
+
+
+ // now to draw second teir
+
+
+ if(menuItem7.Checked==true&&edge[x,y]>-9999)
+ {
+
+ if(edge[x,y]>=0) //Outside
+ {
+ z=0;
+ z=(int)((edge[x,y])*20000);
+
+ if(z<0)z=0;
+// z=(int)((2.131*Math.Pow(edge[x,y],-1.0794))*DX);
+// z=254-z;
+ if(z>254)z=254;
+ if(z<0)z=0;
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+ // red green blue
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(255,greencol,greencol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+
+ if(edge[x,y]<0) //inside
+ {
+ z=(int)((0-edge[x,y])*50);
+ if(z<0)z=0;
+ if(z>254)z=254;
+// z=(int)((2.131*Math.Pow(edge[x,y],-1.0794))*DX);
+// z=254+z;
+// if(z>254)z=254;
+// if(z<0)z=0;
+ greencol=z;
+ redcol=255-z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,255,redcol));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+
+
+ }
+
+ if(menuItem8.Checked==true)
+
+
+ {
+
+ if(water_depth[x,y]>water_depth_erosion_threshold)
+ {
+ if (comboBox1.Text == "Bed sheer stress")
+ {
+ z = (int)(contrastMultiplier * 5 * Tau[x,y]);
+ }
+ else
+ {
+ z = (int)(5 * Tau[x,y]);
+ //z = (int)(Tau[x, y] * (4));
+ }
+
+ if(z<0)z=0;
+ if(z>254)z=254;
+ //if(z>100)z=254;
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,greencol,255));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+
+ }
+
+ // D50
+ if(menuItem9.Checked==true)
+ {
+ if(index[x,y]!=-9999)
+ {
+ if (comboBox1.Text == "grainsize")
+ {
+ tot_max = d50(index[x, y]) * 2000*contrastMultiplier;
+ }
+ else
+ {
+ tot_max = d50(index[x, y]) * 2000;
+ }
+ //Console.WriteLine((Convert.ToString(tot_max)));
+
+ tot=(int)tot_max;
+ if(tot>255)tot=255;
+ if(tot<0)tot=0;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(255-(tot*1),255-(tot*1),255-(tot*1)));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+ }
+
+
+
+ // area drained
+ if(menuItem26.Checked==true)
+ {
+ if(area[x,y]!=-9999)
+ {
+ z=(int)area[x,y];
+
+
+ if(z<0)z=0;
+ if(z>254)z=254;
+
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,greencol,255));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+ }
+
+ // Suspended Sediment Concentration
+ if(menuItem27.Checked==true)
+ {
+ if(index[x,y]!=-9999)
+ {
+ if (Vsusptot[x,y] > 0.0)
+ {
+ if (comboBox1.Text == "susp conc")
+ {
+ z = (int)(Vsusptot[x, y] * 25600*contrastMultiplier);
+ }
+ else
+ {
+ z = (int)(Vsusptot[x, y] * 25600);
+ }
+ if(z<0)z=0;
+ if(z>254)z=254;
+
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,greencol,255));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+ }
+ }
+
+ // Soil depth
+ if(menuItem28.Checked==true)
+ {
+ if(elev[x,y]>-9999)
+ {
+
+ if (comboBox1.Text == "soildepth")
+ {
+ z = (int)((elev[x, y]-bedrock[x,y]) * 2500 * contrastMultiplier);
+ }
+ else
+ {
+ z = (int)((elev[x, y] - bedrock[x, y]) * 2500);
+ }
+ if(z<0)z=0;
+ if(z>254)z=254;
+ greencol=255-z;
+ redcol=z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,greencol,255));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+
+ }
+ }
+
+ // Flow Velocity
+ if (menuItem31.Checked == true) //
+ {
+ if (index[x,y] != -9999)
+ {
+ if (water_depth[x,y]>water_depth_erosion_threshold)
+ {
+ z=0;
+ if (comboBox1.Text == "flow velocity")
+ {
+ z = (int)((Vel[x,y]) * 125 * contrastMultiplier);
+ }
+ else
+ {
+ z = (int)((Vel[x, y]) * 125);
+ }
+ //if(yyy>0.25)z=254;
+ if (z < 0) z = 0;
+ if (z > 254) z = 254;
+ greencol = 255-z;
+ redcol = z;
+ if (redcol < 0) redcol = 0; if (greencol < 0) greencol = 0; if (bluecol < 0) bluecol = 0;
+ if (redcol > 255) redcol = 255; if (greencol > 255) greencol = 255; if (bluecol > 255) bluecol = 255;
+
+ SolidBrush brush = new SolidBrush(Color.FromArgb(redcol,greencol,255));
+ objGraphics.FillRectangle(brush, (x-1) * t, (y-1) * t, t, t);
+ }
+ }
+ }
+
+
+ } // Close of nodata check for 'active' grid only
+ } // Close of Collumn Loop
+ } // Close of Row Loop
+
+
+ this.QsStatusPanel.Text=string.Format("Qs = {0:F8}",tomsedi*DX*DX);
+
+ objGraphics.Dispose();
+ zoomPanImageBox1.Image = m_objDrawingSurface;
+
+ } // Close of drawwater() //
+
+ double erode(double mult_factor)
+ {
+ double rho = 1000.0;
+ //double gravity = 9.8;
+ double tempbmax = 0;
+
+ double[] gtot2;
+
+ gtot2 = new Double[20];
+
+ for (int n = 0; n <= G_MAX; n++)
+ {
+ gtot2[n] = 0;
+ }
+
+ time_factor = time_factor * 1.5;
+ if (time_factor > max_time_step) time_factor = max_time_step;
+
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax, options, delegate (int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+ // zero vels.
+ Vel[x, y] = 0;
+ Tau[x, y] = 0;
+ erodetot[x, y] = 0;
+ erodetot3[x, y] = 0;
+ temp_elev[x, y] = 0;
+
+ for (int n = 0; n < G_MAX; n++)
+ {
+ sr[x, y, n] = 0;
+ sl[x, y, n] = 0;
+ su[x, y, n] = 0;
+ sd[x, y, n] = 0;
+ }
+ ss[x, y] = 0;
+
+
+ if (water_depth[x, y] > water_depth_erosion_threshold)
+ {
+ double veltot = 0;
+ double vel = 0;
+ double qtot = 0;
+ double tau = 0;
+ double velnum = 0;
+ double slopetot = 0;
+
+
+
+ // add spatial mannings here
+ double temp_mannings = mannings;
+ if (SpatVarManningsCheckbox.Checked == true) temp_mannings = spat_var_mannings[x, y];
+
+ // check to see if index for that cell...
+ if (index[x, y] == -9999) addGS(x, y);
+
+ // now tot up velocity directions, velocities and edge directions.
+ for (int p = 1; p <= 8; p += 2)
+ {
+ int x2 = x + deltaX[p];
+ int y2 = y + deltaY[p];
+ if (water_depth[x2, y2] > water_depth_erosion_threshold)
+ {
+
+ if (vel_dir[x, y, p] > 0)
+ {
+ vel = vel_dir[x, y, p];
+ if (vel > max_vel)
+ {
+ this.tempStatusPanel.Text = Convert.ToString(x) + " " + Convert.ToString(y) + " " + Convert.ToString(vel);
+ vel = max_vel; // if vel too high cut it
+ }
+
+ veltot += vel * vel;
+ velnum++;
+ qtot += (vel * vel);
+ //slopetot += ((elev[x, y] - elev[x2, y2]) / DX);
+ slopetot += ((elev[x, y] - elev[x2, y2]) / DX) * vel;
+ }
+ }
+ }
+
+ if (qtot > 0)
+ {
+ vel = (Math.Sqrt(qtot));
+ Vel[x, y] = vel;
+ if (vel < 0)
+ {
+ this.tempStatusPanel.Text = Convert.ToString(x) + " " + Convert.ToString(y) + " " + Convert.ToString(vel);
+ }
+ if (vel > max_vel) vel = max_vel; // if vel too high cut it
+ double ci = gravity * (temp_mannings * temp_mannings) * Math.Pow(water_depth[x, y], -0.33);
+ //tauvel = 1000 * ci * vel * vel;
+ if (slopetot > 0) slopetot = 0;
+ //tauvel = 1000 * ci * vel * vel * (1 + (1 * (slopetot)));
+ tau = 1000 * ci * vel * vel * (1 + (1 * (slopetot / vel)));
+ Tau[x, y] = tau;
+ }
+ }
+ }
+ });
+
+
+ int counter2 = 0;
+ do
+ {
+ counter2++;
+ tempbmax = 0;
+ double[] tempbmax2;
+ tempbmax2 = new Double[ymax + 2];
+
+ //var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax, options, delegate (int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+ // now do some erosion
+ if (Tau[x, y] > 0)
+ {
+ double d_50 = 0;
+ double Fs = 0;
+ double Di = 0;
+ double graintot = 0;
+ double tau = Tau[x, y];
+ double temp_tau_ri = 0;
+ double U_star = 0;
+ double U_star_cubed = 0;
+
+ double[] temp_dist, tempdir;
+ tempdir = new Double[11]; // array that holds velocity directions temp - so they dont have to be calculated again
+ temp_dist = new Double[11]; // array that holds amount to be removed from cell in each grainsize
+
+ if (wilcock == 1)
+ {
+ d_50 = d50(index[x, y]);
+ if (d_50 < d1) d_50 = d1;
+ Fs = sand_fraction(index[x, y]);
+ for (int n = 1; n <= G_MAX; n++) graintot += (grain[index[x, y], n]);
+ temp_tau_ri = (0.021 + (0.015 * Math.Exp(-20 * Fs))) * (rho * gravity * d_50);
+ U_star = Math.Pow(tau / rho, 0.5);
+ U_star_cubed = U_star * U_star * U_star;
+ }
+ //////
+ double temptot1 = 0;
+
+ for (int n = 1; n <= G_MAX - 1; n++)
+ {
+
+ switch (n)
+ {
+ case 1: Di = d1; break;
+ case 2: Di = d2; break;
+ case 3: Di = d3; break;
+ case 4: Di = d4; break;
+ case 5: Di = d5; break;
+ case 6: Di = d6; break;
+ case 7: Di = d7; break;
+ case 8: Di = d8; break;
+ case 9: Di = d9; break;
+ }
+
+ // Wilcock and Crowe/Curran
+
+
+ if (wilcock == 1)
+ {
+ Double tau_ri = 0, Wi_star;
+ tau_ri = temp_tau_ri * Math.Pow((Di / d_50), (0.67 / (1 + Math.Exp(1.5 - (Di / d_50)))));
+ double Fi = grain[index[x, y], n] / graintot;
+
+ if ((tau / tau_ri) < 1.35)
+ {
+ Wi_star = 0.002 * Math.Pow(tau / tau_ri, 7.5);
+ }
+ else
+ {
+ Wi_star = 14 * Math.Pow(1 - (0.894 / Math.Pow(tau / tau_ri, 0.5)), 4.5);
+ }
+ //maybe should divide by DX as well..
+ temp_dist[n] = mult_factor * time_factor *
+ ((Fi * (U_star_cubed)) / ((2.65 - 1) * gravity)) * Wi_star / DX;
+ }
+ // Einstein sed tpt eqtn
+ if (einstein == 1)
+ {
+ // maybe should divide by DX as well..
+ temp_dist[n] = mult_factor * time_factor * (40 * Math.Pow((1 / (((2650 - 1000) * Di) / (tau / gravity))), 3))
+ / Math.Sqrt(1000 / ((2650 - 1000) * gravity * (Di * Di * Di))) / DX;
+ }
+
+ // Meyer-Peter_Muller set tpt eqtn https://en.m.wikipedia.org/wiki/Sediment_transport#Meyer-Peter_M.C3.BCller_and_derivatives
+ // here using Wiberg and Dungan 89 modification https://dx.doi.org/10.1061%2F%28ASCE%290733-9429%281989%29115%3A1%28101%29
+ if (meyer == 1)
+ {
+ double TauStar = tau / ((2650 - 1000) * gravity * Di);
+ if (TauStar > 0.047)
+ {
+ temp_dist[n] = mult_factor * time_factor * 9.64 * Math.Pow(TauStar, 0.166) * Math.Pow((TauStar - 0.047), 1.5);
+ }
+
+ }
+
+
+
+ //if (temp_dist[n] < 0.0000000000001) temp_dist[n] = 0;
+
+ // first check to see that theres not too little sediment in a cell to be entrained
+ if (temp_dist[n] > grain[index[x, y], n]) temp_dist[n] = grain[index[x, y], n];
+ // then check to see if this would make SS levels too high.. and if so reduce
+ if (isSuspended[n] && n == 1)
+ {
+ if ((temp_dist[n] + Vsusptot[x, y]) / water_depth[x, y] > Csuspmax)
+ {
+ //work out max amount of sediment that can be there (waterdepth * csuspmax) then subtract whats already there
+ // (Vsusptot) to leave what can be entrained. Check if < 0 after.
+ temp_dist[n] = (water_depth[x, y] * Csuspmax) - Vsusptot[x, y];
+ }
+ }
+ if (temp_dist[n] < 0) temp_dist[n] = 0;
+
+ // nwo placed here speeding up reduction of erode repeats.
+ temptot1 += temp_dist[n];
+
+ }
+
+
+ //check if this makes it below bedrock
+ if (elev[x, y] - temptot1 <= bedrock[x, y])
+ {
+ // now remove from proportion that can be eroded..
+ // we can do this as we have the prop (in temptot) that is there to be eroded.
+ double elevdiff = elev[x, y] - bedrock[x, y];
+ double temptot3 = temptot1;
+ temptot1 = 0;
+ for (int n = 1; n <= G_MAX - 1; n++)
+ {
+ if (elev[x, y] <= bedrock[x, y])
+ {
+ temp_dist[n] = 0;
+ }
+ else
+ {
+ temp_dist[n] = elevdiff * (temp_dist[n] / temptot3);
+ if (temp_dist[n] < 0) temp_dist[n] = 0;
+ }
+ temptot1 += temp_dist[n];
+ }
+
+ // here insert bedrock erosion routine?
+ if (tau > bedrock_erosion_threshold)
+ {
+ double amount = 0; // amount is amount of erosion into the bedrock.
+ amount = Math.Pow(bedrock_erosion_rate * tau, 1.5) * time_factor * mult_factor * 0.000000317; // las value to turn it into erosion per year (number of years per second)
+ bedrock[x, y] -= amount;
+ // now add amount of bedrock eroded into sediment proportions.
+ for (int n2 = 1; n2 <= G_MAX - 1; n2++)
+ {
+ grain[index[x, y], n2] += amount * dprop[n2];
+ }
+ }
+ }
+
+
+ // veg components
+ // here to erode the veg layer..
+ if (veg[x, y, 1] > 0 && tau > vegTauCrit)
+ {
+ // now to remove from veg layer..
+ veg[x, y, 1] -= mult_factor * time_factor * Math.Pow(tau - vegTauCrit, 0.5) * 0.00001;
+ if (veg[x, y, 1] < 0) veg[x, y, 1] = 0;
+ }
+
+ //// now to determine if movement should be restricted due to veg... (old method)
+ if (radioButton1.Checked && veg[x, y, 1] > 0.25)
+ {
+ // now checks if this removed from the cell would put it below the veg layer..
+ if (elev[x, y] - temptot1 <= veg[x, y, 0])
+ {
+ // now remove from proportion that can be eroded..
+ // we can do this as we have the prop (in temptot) that is there to be eroded.
+ double elevdiff = 0;
+ elevdiff = elev[x, y] - veg[x, y, 0];
+ if (elevdiff < 0) elevdiff = 0;
+ double temptot3 = temptot1;
+ temptot1 = 0;
+ for (int n = 1; n <= G_MAX - 1; n++)
+ {
+ temp_dist[n] = elevdiff * (temp_dist[n] / temptot3);
+ if (elev[x, y] <= veg[x, y, 0]) temp_dist[n] = 0;
+ temptot1 += temp_dist[n];
+ }
+ //temptot1 -= elevdiff;
+ if (temptot1 < 0) temptot1 = 0;
+
+ }
+ //tempStatusPanel.Text = Convert.ToString(1);
+ }
+
+ //// now to determine if movement should be restricted due to veg... (new method)
+ if (radioButton2.Checked && veg[x, y, 1] > 0.1)
+ {
+ temptot1 = 0;
+ for (int n = 1; n <= G_MAX - 1; n++)
+ {
+ temp_dist[n] *= 1 - (veg[x, y, 1] * (1 - veg_lat_restriction));
+ temptot1 += temp_dist[n];
+ }
+ //temptot1 -= elevdiff;
+ if (temptot1 < 0) temptot1 = 0;
+
+ //tempStatusPanel.Text = Convert.ToString(2);
+ }
+
+ if (temptot1 > tempbmax2[y]) tempbmax2[y] = temptot1;
+ //tempStatusPanel.Text = Convert.ToString(temptot1);
+
+ // now work out what portion of bedload has to go where...
+ // only allow actual transfer of sediment if there is flow in a direction - i.e. some sedeiment transport
+
+ // wonder if this part could be separately parallelised?
+ if (temptot1 > 0)
+ {
+ double temptot2 = 0;
+ double veltot = 0;
+ for (int p = 1; p <= 8; p += 2)
+ {
+ int x2 = x + deltaX[p];
+ int y2 = y + deltaY[p];
+ if (water_depth[x2, y2] > water_depth_erosion_threshold)
+ {
+ if (edge[x, y] > edge[x2, y2])
+ {
+ temptot2 += (edge[x, y] - edge[x2, y2]);
+ }
+
+ if (vel_dir[x, y, p] > 0)
+ {
+ // first work out velocities in each direction (for sedi distribution)
+ double vel = vel_dir[x, y, p];
+ tempdir[p] = vel * vel;
+ veltot += tempdir[p];
+ }
+ }
+ }
+
+
+ for (int p = 1; p <= 8; p += 2)
+ {
+ int x2 = x + deltaX[p];
+ int y2 = y + deltaY[p];
+
+
+
+ if (water_depth[x2, y2] > water_depth_erosion_threshold)
+ {
+ if (index[x2, y2] == -9999) addGS(x2, y2);
+ double factor = 0;
+
+ // vel slope
+ if (vel_dir[x, y, p] > 0)
+ {
+ factor += 0.75 * tempdir[p] / veltot;
+ }
+ // now for lateral gradient.
+ if (edge[x, y] > edge[x2, y2])
+ {
+ factor += 0.25 * ((edge[x, y] - edge[x2, y2]) / temptot2);
+ }
+
+ // now loop through grainsizes
+ for (int n = 1; n <= G_MAX - 1; n++)
+ {
+ if (temp_dist[n] > 0)
+ {
+ if (n == 1 && isSuspended[n])
+ {
+ // put amount entrained by ss in to ss[,]
+ ss[x, y] = temp_dist[n];
+ }
+ else
+ {
+ switch (p)
+ {
+ case 1: su[x, y, n] = temp_dist[n] * factor; break;
+ case 3: sr[x, y, n] = temp_dist[n] * factor; break;
+ case 5: sd[x, y, n] = temp_dist[n] * factor; break;
+ case 7: sl[x, y, n] = temp_dist[n] * factor; break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ });
+
+ // we have to do a reduction on tempbmax.
+ for (int y = 1; y <= ymax; y++) if (tempbmax2[y] > tempbmax) tempbmax = tempbmax2[y];
+
+ if (tempbmax > ERODEFACTOR)
+ {
+ time_factor *= (ERODEFACTOR / tempbmax) * 0.5;
+ }
+ } while(tempbmax > ERODEFACTOR);
+
+ //tempStatusPanel.Text = Convert.ToString(counter2);
+
+ //
+ // new temp erode array.
+
+
+ var options1 = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(2, ymax, options1, delegate(int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+
+ if (water_depth[x, y] > water_depth_erosion_threshold && x < xmax && x > 1)
+ {
+
+ if (index[x, y] == -9999) addGS(x, y);
+ for (int n = 1; n <= G_MAX-1; n++)
+ {
+ if (n == 1 && isSuspended[n])
+ {
+ // updating entrainment of SS
+ Vsusptot[x, y] += ss[x, y];
+ grain[index[x, y], n] -= ss[x, y];
+ erodetot[x, y] -= ss[x, y];
+
+ // this next part is unusual. You have to stop susp sed deposition on the input cells, otherwies
+ // it drops sediment out, but cannot entrain as ss levels in input are too high leading to
+ // little mountains of sediment. This means a new array in order to check whether a cell is an
+ // input point or not..
+ if (!inputpointsarray[x, y])
+ {
+ // now calc ss to be dropped
+ double coeff = (fallVelocity[n] * time_factor * mult_factor) / water_depth[x, y];
+ if (coeff > 1) coeff = 1;
+ double Vpdrop = coeff * Vsusptot[x, y];
+ if (Vpdrop > 0.001) Vpdrop = 0.001; //only allow 1mm to be deposited per iteration
+ grain[index[x, y], n] += Vpdrop;
+ erodetot[x, y] += Vpdrop;
+ Vsusptot[x, y] -= Vpdrop;
+ //if (Vsusptot[x, y] < 0) Vsusptot[x, y] = 0; NOT this line.
+ }
+ }
+ else
+ {
+ //else update grain and elevations for bedload.
+ double val1 = (su[x, y, n] + sr[x, y, n] + sd[x, y, n] + sl[x, y, n]);
+ double val2 = (su[x, y + 1, n] + sd[x, y - 1, n] + sl[x + 1, y, n] + sr[x - 1, y, n]);
+ grain[index[x, y], n] += val2 - val1;
+ erodetot[x, y] += val2 - val1;
+ erodetot3[x, y] += val1;
+ }
+ }
+
+ temp_elev[x, y] += erodetot[x, y];
+ if (erodetot[x, y] != 0) sort_active(x, y);
+
+ //
+ // test lateral code...
+ //
+
+ if (erodetot3[x,y] > 0)
+ {
+
+ if (elev[x - 1, y] > elev[x, y] && x > 2)
+ {
+ double amt = 0;
+
+ if (water_depth[x - 1, y] < water_depth_erosion_threshold)
+ amt = mult_factor * lateral_constant * Tau[x, y] * edge[x - 1, y] * time_factor /DX;
+ else amt = bed_proportion * erodetot3[x, y] * (elev[x - 1, y] - elev[x, y]) / DX * 0.1;
+
+ if (amt > 0)
+ {
+ amt *= 1 - (veg[x - 1, y, 1] * (1 - veg_lat_restriction));
+ if ((elev[x - 1, y] - amt) < bedrock[x - 1, y] || x - 1 == 1) amt = 0;
+ if (amt > ERODEFACTOR * 0.1) amt = ERODEFACTOR * 0.1;
+ //if (amt > erodetot2 / 2) amt = erodetot2 / 2;
+ temp_elev[x, y] += amt;
+ temp_elev[x - 1, y] -= amt;
+ slide_GS(x - 1, y, amt, x, y);
+ }
+ }
+ if (elev[x + 1, y] > elev[x, y] && x < xmax-1)
+ {
+ double amt = 0;
+ if (water_depth[x + 1, y] < water_depth_erosion_threshold)
+ amt = mult_factor * lateral_constant * Tau[x, y] * edge[x + 1, y] * time_factor / DX;
+ else amt = bed_proportion * erodetot3[x, y] * (elev[x + 1, y] - elev[x, y]) / DX * 0.1;
+
+ if (amt > 0)
+ {
+ amt *= 1 - (veg[x + 1, y, 1] * (1 - veg_lat_restriction));
+ if ((elev[x + 1, y] - amt) < bedrock[x + 1, y] || x + 1 == xmax) amt = 0;
+ if (amt > ERODEFACTOR * 0.1) amt = ERODEFACTOR * 0.1;
+ //if (amt > erodetot2 /2) amt = erodetot2 /2;
+ temp_elev[x, y] += amt;
+ temp_elev[x + 1, y] -= amt;
+ slide_GS(x + 1, y, amt, x, y);
+ }
+ }
+
+
+ }
+ }
+ }
+ });
+
+ Parallel.For(2, xmax, options1, delegate (int x)
+ {
+ int inc = 1;
+ while (cross_scan[x, inc] > 0)
+ {
+ int y = cross_scan[x, inc];
+ inc++;
+
+ {
+
+ if (erodetot3[x, y] > 0)
+ {
+ if (elev[x, y - 1] > elev[x, y])
+ {
+ double amt = 0;
+ if (water_depth[x, y - 1] < water_depth_erosion_threshold)
+ amt = mult_factor * lateral_constant * Tau[x, y] * edge[x, y - 1] * time_factor / DX;
+ else amt = bed_proportion * erodetot3[x, y] * (elev[x, y - 1] - elev[x, y]) / DX * 0.1;
+
+ if (amt > 0)
+ {
+ amt *= 1 - (veg[x, y - 1, 1] * (1 - veg_lat_restriction));
+ if ((elev[x, y - 1] - amt) < bedrock[x, y - 1] || y - 1 == 1) amt = 0;
+ if (amt > ERODEFACTOR * 0.1) amt = ERODEFACTOR * 0.1;
+ //if (amt > erodetot2 / 2) amt = erodetot2 / 2;
+ temp_elev[x, y] += amt;
+ temp_elev[x, y - 1] -= amt;
+ slide_GS(x, y - 1, amt, x, y);
+ }
+ }
+ if (elev[x, y + 1] > elev[x, y])
+ {
+ double amt = 0;
+ if (water_depth[x, y + 1] < water_depth_erosion_threshold)
+ amt = amt = mult_factor * lateral_constant * Tau[x, y] * edge[x, y + 1] * time_factor / DX;
+ else amt = bed_proportion * erodetot3[x, y] * (elev[x, y + 1] - elev[x, y]) / DX * 0.1;
+
+ if (amt > 0)
+ {
+ amt *= 1 - (veg[x, y + 1, 1] * (1 - veg_lat_restriction));
+ if ((elev[x, y + 1] - amt) < bedrock[x, y + 1] || y + 1 == ymax) amt = 0;
+ if (amt > ERODEFACTOR * 0.1) amt = ERODEFACTOR * 0.1;
+ //if (amt > erodetot2 / 2) amt = erodetot2 / 2;
+ temp_elev[x, y] += amt;
+ temp_elev[x, y + 1] -= amt;
+ slide_GS(x, y + 1, amt, x, y);
+ }
+ }
+
+
+ }
+ }
+ }
+ });
+
+ Parallel.For(2, ymax, options, delegate (int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ inc++;
+
+ if(x>1 && x< xmax) elev[x, y] += temp_elev[x, y];
+
+ }
+ });
+
+
+ // now calculate sediment outputs from all four edges...
+ for (int y = 2; y < ymax; y++)
+ {
+ if (water_depth[xmax, y] > water_depth_erosion_threshold || Vsusptot[xmax, y] > 0)
+ {
+ for (int n = 1; n <= G_MAX-1; n++)
+ {
+ if (isSuspended[n])
+ {
+ gtot2[n] += Vsusptot[xmax, y];
+ Vsusptot[xmax, y] = 0;
+ }
+ else
+ {
+ gtot2[n] += sr[xmax - 1, y, n];
+ }
+ }
+ }
+ if (water_depth[1, y] > water_depth_erosion_threshold || Vsusptot[1, y] > 0)
+ {
+ for (int n = 1; n <= G_MAX-1; n++)
+ {
+ if (isSuspended[n])
+ {
+ gtot2[n] += Vsusptot[1, y];
+ Vsusptot[1, y] = 0;
+ }
+ else
+ {
+ gtot2[n] += sl[2, y, n];
+ }
+ }
+ }
+ }
+
+ for (int x = 2; x < xmax; x++)
+ {
+ if (water_depth[x, ymax] > water_depth_erosion_threshold || Vsusptot[x, ymax] > 0)
+ {
+ for (int n = 1; n <= G_MAX-1; n++)
+ {
+ if (isSuspended[n])
+ {
+ gtot2[n] += Vsusptot[x, ymax];
+ Vsusptot[x, ymax] = 0;
+ }
+ else
+ {
+ gtot2[n] += sd[x, ymax - 1, n];
+ }
+ }
+ }
+ if (water_depth[x, 1] > water_depth_erosion_threshold || Vsusptot[x, 1] > 0)
+ {
+ for (int n = 1; n <= G_MAX-1; n++)
+ {
+ if (isSuspended[n])
+ {
+ gtot2[n] += Vsusptot[x, 1];
+ Vsusptot[x, 1] = 0;
+ }
+ else
+ {
+ gtot2[n] += su[x, 2, n];
+ }
+ }
+ }
+ }
+
+ /// now update files for outputing sediment and re-circulating...
+ ///
+
+ sediQ = 0;
+ for (int n = 1; n <= G_MAX; n++)
+ {
+ if (temp_grain[n] < 0) temp_grain[n] = 0;
+ if (recirculatebox.Checked == true && reach_mode_box.Checked == true)
+ temp_grain[n] += gtot2[n] * recirculate_proportion; // important to divide input by time factor, so it can be reduced if re-circulating too much...
+ sediQ += gtot2[n] * DX * DX;
+ globalsediq += gtot2[n] * DX * DX;
+ sum_grain[n] += gtot2[n] * DX * DX; // Gez
+ }
+
+ return tempbmax;
+
+ }
+
+ void slide_3()
+ {
+ int x,y,inc;
+ double wet_factor;
+ double factor=Math.Tan((failureangle*(3.141592654/180)))*DX;
+ double diff=0;
+
+ for(y=2;y0)
+ {
+ x=down_scan[y,inc];
+ if(x==xmax)x=xmax-1;
+ if(x==1)x=2;
+
+ inc++;
+ /** check to see if under water **/
+ wet_factor=factor;
+ //if(water_depth[x,y]>0.01)wet_factor=factor/2;
+ if(elev[x,y]<=(bedrock[x,y]+active))wet_factor=10000;
+
+ /** chexk landslides in channel slowly */
+
+ if(((elev[x,y]-elev[x+1,y+1])/1.41)>wet_factor&&elev[x+1,y+1]> -9999)
+ {
+ diff=((elev[x,y]-elev[x+1,y+1])/1.41)-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x+1,y+1]+=diff;
+ slide_GS(x,y,diff,x+1,y+1);
+ }
+ if((elev[x,y]-elev[x,y+1])>wet_factor&&elev[x,y+1]> -9999)
+ {
+ diff=(elev[x,y]-elev[x,y+1])-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x,y+1]+=diff;
+ slide_GS(x,y,diff,x,y+1);
+ }
+ if(((elev[x,y]-elev[x-1,y+1])/1.41)>wet_factor&&elev[x-1,y+1]> -9999)
+ {
+ diff=((elev[x,y]-elev[x-1,y+1])/1.41)-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x-1,y+1]+=diff;
+ slide_GS(x,y,diff,x-1,y+1);
+ }
+ if((elev[x,y]-elev[x-1,y])>wet_factor&&elev[x-1,y]> -9999)
+ {
+ diff=(elev[x,y]-elev[x-1,y])-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x-1,y]+=diff;
+ slide_GS(x,y,diff,x-1,y);
+ }
+
+ if(((elev[x,y]-elev[x-1,y-1])/1.41)>wet_factor&&elev[x-1,y-1]> -9999)
+ {
+ diff=((elev[x,y]-elev[x-1,y-1])/1.41)-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x-1,y-1]+=diff;
+ slide_GS(x,y,diff,x-1,y-1);
+ }
+ if((elev[x,y]-elev[x,y-1])>wet_factor&&elev[x,y-1]> -9999)
+ {
+ diff=(elev[x,y]-elev[x,y-1])-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x,y-1]+=diff;
+ slide_GS(x,y,diff,x,y-1);
+ }
+ if(((elev[x,y]-elev[x+1,y-1])/1.41)>wet_factor&&elev[x+1,y-1]> -9999)
+ {
+ diff=((elev[x,y]-elev[x+1,y-1])/1.41)-wet_factor;
+ if((elev[x,y]-diff)<(bedrock[x,y]+active))diff=(elev[x,y]-(bedrock[x,y]+active));
+ elev[x,y]-=diff;
+ elev[x+1,y-1]+=diff;
+ slide_GS(x,y,diff,x+1,y-1);
+ }
+
+ if ((elev[x, y] - elev[x + 1, y]) > wet_factor && elev[x + 1, y] > -9999)
+ {
+ diff = (elev[x, y] - elev[x + 1, y]) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ elev[x, y] -= diff;
+ elev[x + 1, y] += diff;
+ slide_GS(x, y, diff, x + 1, y);
+ }
+
+ }
+ }
+
+ }
+
+ void slide_5()
+ {
+ int x, y, inc=0;
+ double wet_factor;
+ double factor = Math.Tan((failureangle * (3.141592654 / 180))) * DX;
+ //if(landslidesBox.Checked == true) factor = DX * ((-265000 * j_mean) + 1.38);
+ double diff = 0;
+ double total = 0;
+
+ if (DuneBox.Checked == true)
+ {
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ elev[x, y] -= sand[x, y];
+ }
+ }
+ }
+
+
+
+ do
+ {
+ total = 0;
+ inc++;
+ for (y = 2; y < ymax; y++)
+ {
+ for (x = 2; x < xmax; x++)
+ {
+
+ wet_factor = factor;
+ //if(water_depth[x,y]>0.01)wet_factor=factor/2;
+ if (elev[x, y] <= (bedrock[x, y] + active)) wet_factor = 10 * DX;
+
+ /** chexk landslides in channel slowly */
+
+ if (((elev[x, y] - elev[x + 1, y + 1]) / 1.41) > wet_factor && elev[x + 1, y + 1]> -9999)
+ {
+ diff = ((elev[x, y] - elev[x + 1, y + 1]) / 1.41) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x + 1, y + 1] += diff;
+ total += diff;
+ }
+ if ((elev[x, y] - elev[x, y + 1]) > wet_factor && elev[x, y + 1]> -9999)
+ {
+ diff = (elev[x, y] - elev[x, y + 1]) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x, y + 1] += diff;
+ total += diff;
+ }
+ if (((elev[x, y] - elev[x - 1, y + 1]) / 1.41) > wet_factor && elev[x - 1, y + 1]> -9999)
+ {
+ diff = ((elev[x, y] - elev[x - 1, y + 1]) / 1.41) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x - 1, y + 1] += diff;
+ total += diff;
+ }
+ if ((elev[x, y] - elev[x - 1, y]) > wet_factor && elev[x - 1, y]> -9999)
+ {
+ diff = (elev[x, y] - elev[x - 1, y]) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x - 1, y] += diff;
+ total += diff;
+ }
+
+ if (((elev[x, y] - elev[x - 1, y - 1]) / 1.41) > wet_factor && elev[x - 1, y - 1]> -9999)
+ {
+ diff = ((elev[x, y] - elev[x - 1, y - 1]) / 1.41) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x - 1, y - 1] += diff;
+ total += diff;
+ }
+ if ((elev[x, y] - elev[x, y - 1]) > wet_factor && elev[x, y - 1]> -9999)
+ {
+ diff = (elev[x, y] - elev[x, y - 1]) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x, y - 1] += diff;
+ total += diff;
+ }
+ if (((elev[x, y] - elev[x + 1, y - 1]) / 1.41) > wet_factor && elev[x + 1, y - 1]> -9999)
+ {
+ diff = ((elev[x, y] - elev[x + 1, y - 1]) / 1.41) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x + 1, y - 1] += diff;
+ total += diff;
+ }
+
+
+
+ if ((elev[x, y] - elev[x + 1, y]) > wet_factor && elev[x + 1, y]> -9999)
+ {
+ diff = (elev[x, y] - elev[x + 1, y]) - wet_factor;
+ if ((elev[x, y] - diff) < (bedrock[x, y] + active)) diff = (elev[x, y] - (bedrock[x, y] + active));
+ if (diff > ERODEFACTOR) diff = ERODEFACTOR;
+ elev[x, y] -= diff;
+ elev[x + 1, y] += diff;
+ total += diff;
+ }
+
+ }
+ }
+ } while (total > 0&&inc<200);
+
+ if (DuneBox.Checked == true)
+ {
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ elev[x, y] += sand[x, y];
+ }
+ }
+ }
+
+ }
+
+ void slide_4(int x, int y) // landslides from sand dunes...
+ {
+ double wet_factor;
+ double factor = Math.Tan((double.Parse(textBox10.Text) * (3.141592654 / 180))) * (DX/dune_mult);
+ double diff = 0;
+
+ wet_factor = factor;
+
+
+
+ if ((((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y + 1] + sand2[x + 1, y + 1])) / 1.41) > wet_factor && (elev2[x + 1, y + 1] + sand2[x + 1, y + 1]) > 0)
+ {
+ diff = (((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y + 1] + sand2[x + 1, y + 1])) / 1.41) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x + 1, y + 1] += diff;
+ }
+ if (((elev2[x, y] + sand2[x, y]) - (elev2[x, y + 1] + sand2[x, y + 1])) > wet_factor && (elev2[x, y + 1] + sand2[x, y + 1]) > 0)
+ {
+ diff = ((elev2[x, y] + sand2[x, y]) - (elev2[x, y + 1] + sand2[x, y + 1])) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x, y + 1] += diff;
+ }
+ if ((((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y + 1] + sand2[x - 1, y + 1])) / 1.41) > wet_factor && (elev2[x - 1, y + 1] + sand2[x - 1, y + 1]) > 0)
+ {
+ diff = (((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y + 1] + sand2[x - 1, y + 1])) / 1.41) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ // if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x - 1, y + 1] += diff;
+ }
+ if (((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y] + sand2[x - 1, y])) > wet_factor && (elev2[x - 1, y] + sand2[x - 1, y]) > 0)
+ {
+ diff = ((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y] + sand2[x - 1, y])) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x - 1, y] += diff;
+ }
+
+ if ((((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y - 1] + sand2[x - 1, y - 1])) / 1.41) > wet_factor && (elev2[x - 1, y - 1] + sand2[x - 1, y - 1]) > 0)
+ {
+ diff = (((elev2[x, y] + sand2[x, y]) - (elev2[x - 1, y - 1] + sand2[x - 1, y - 1])) / 1.41) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x - 1, y - 1] += diff;
+
+
+ }
+ if (((elev2[x, y] + sand2[x, y]) - (elev2[x, y - 1] + sand2[x, y - 1])) > wet_factor && (elev2[x, y - 1] + sand2[x, y - 1]) > 0)
+ {
+ diff = ((elev2[x, y] + sand2[x, y]) - (elev2[x, y - 1] + sand2[x, y - 1])) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x, y - 1] += diff;
+
+
+ }
+ if ((((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y - 1] + sand2[x + 1, y - 1])) / 1.41) > wet_factor && (elev2[x + 1, y - 1] + sand2[x + 1, y - 1]) > 0)
+ {
+ diff = (((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y - 1] + sand2[x + 1, y - 1])) / 1.41) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x + 1, y - 1] += diff;
+
+ }
+
+
+ if (((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y] + sand2[x + 1, y])) > wet_factor && (elev2[x + 1, y] + sand2[x + 1, y]) > 0)
+ {
+ diff = ((elev2[x, y] + sand2[x, y]) - (elev2[x + 1, y] + sand2[x + 1, y])) - wet_factor;
+ if (diff > sand2[x, y]) diff = sand2[x, y];
+ //if (((elev2[x, y] + sand2[x, y]) - diff) < (bedrock[x, y] + active)) diff = ((elev2[x, y] + sand2[x, y]) - (bedrock[x, y] + active));
+ sand2[x, y] -= diff;
+ sand2[x + 1, y] += diff;
+
+ }
+
+
+ }
+
+ void slide_GS(int x,int y,double amount,int x2,int y2)
+ {
+
+ /** Ok, heres how it works, x and y are ones material moved from,
+ x2 and y2 are ones material moved to...
+ amd amount is the amount shifted. */
+
+ int n;
+ double total = 0;
+
+ // do only for cells where both have grainsize..
+
+ if (index[x, y] != -9999 && index[x2, y2] != -9999)
+ {
+ for (n = 1; n <= (G_MAX - 1); n++)
+ {
+ if (grain[index[x, y], n] > 0) total += grain[index[x, y], n];
+ }
+
+ if (amount > total)
+ {
+ for (n = 1; n <= G_MAX - 1; n++)
+ {
+ grain[index[x2, y2], n] += (amount - total) * dprop[n];
+ }
+
+ amount = total;
+ }
+
+ if (total > 0)
+ {
+ for (n = 1; n <= (G_MAX - 1); n++)
+ {
+ double transferamt = amount * (grain[index[x, y], n] / total);
+ grain[index[x2, y2], n] += transferamt;
+ grain[index[x, y], n] -= transferamt;
+ if (grain[index[x, y], n] < 0) grain[index[x, y], n] = 0;
+ }
+
+ }
+
+ /* then to set active layer to correct depth before erosion, */
+ sort_active(x, y);
+ sort_active(x2, y2);
+ return;
+ }
+
+ //now do for cells where only recieving cells have grainsize
+ // just adds amount to reviving cells of normal..
+ if (index[x, y] == -9999 && index[x2, y2] != -9999)
+ {
+ for (n = 1; n <= G_MAX - 1; n++)
+ {
+ grain[index[x2, y2], n] += (amount) * dprop[n];
+ }
+
+ /* then to set active layer to correct depth before erosion, */
+ sort_active(x2, y2);
+ return;
+ }
+
+ // now for cells whre dontaing cell has grainsize
+ if (index[x, y] != -9999 && index[x2, y2] == -9999)
+ {
+
+ addGS(x2, y2); // add grainsize array for recieving cell..
+
+ if (amount > active)
+ {
+
+ for (n = 1; n <= G_MAX - 1; n++)
+ {
+ grain[index[x2, y2], n] += (amount - active) * dprop[n];
+ }
+
+ amount = active;
+ }
+
+
+ for (n = 1; n <= (G_MAX - 1); n++)
+ {
+ if (grain[index[x, y], n] > 0) total += grain[index[x, y], n];
+ }
+
+ for (n = 1; n <= (G_MAX - 1); n++)
+ {
+ if (total > 0)
+ {
+ grain[index[x2, y2], n] += amount * (grain[index[x, y], n] / total);
+ if (grain[index[x, y], n] > 0.0001) grain[index[x, y], n] -= amount * (grain[index[x, y], n] / total);
+ if (grain[index[x, y], n] < 0) grain[index[x, y], n] = 0;
+ }
+
+ }
+
+ /* then to set active layer to correct depth before erosion, */
+ sort_active(x, y);
+ sort_active(x2, y2);
+ return;
+ }
+ }
+
+ double mean_ws_elev(int x, int y)
+ {
+ double elevtot = 0;
+ int counter = 0;
+
+ for (int dir = 1; dir <= 8; dir++)
+ {
+ int x2, y2;
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+
+ if (water_depth[x2, y2] > water_depth_erosion_threshold)
+ {
+ elevtot += water_depth[x2, y2] + elev[x2, y2];
+ counter++;
+ }
+
+ }
+ if (counter > 0) {
+ elevtot /= counter;
+ return elevtot;
+ }
+
+ else return 0;
+ }
+
+ void lateral3()
+ {
+
+ double[,] edge_temp, edge_temp2, water_depth2;
+ int[,] upscale, upscale_edge;
+
+ edge_temp = new Double[xmax + 1, ymax + 1];
+ edge_temp2 = new Double[xmax + 1, ymax + 1];
+ water_depth2 = new Double[xmax + 1, ymax + 1];
+ upscale = new int[(xmax + 1) * 2, (ymax + 1) * 2];
+ upscale_edge = new int[(xmax + 1) * 2, (ymax + 1) * 2];
+
+
+ // first make water depth2 equal to water depth then remove single wet cells frmo water depth2 that have an undue influence..
+ double mft = 0.1;// water_depth_erosion_threshold;//MIN_Q;// vel_dir threshold
+
+ var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(1, ymax, options, delegate (int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+
+ edge_temp[x, y] = 0;
+ if (x == 1) x++;
+ if (x == xmax) x--;
+ inc++;
+
+ if (Tau[x, y] > mft)
+ {
+ water_depth2[x, y] = Tau[x, y];
+ int tempcounter = 0;
+ for (int dir = 1; dir <= 8; dir++)
+ {
+ int x2, y2;
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+ if (Tau[x2, y2] < mft) tempcounter++;
+ }
+ if (tempcounter > 6) water_depth2[x, y] = 0;
+ }
+ }
+ });
+
+ // first make water depth2 equal to water depth then remove single wet cells frmo water depth2 that have an undue influence..
+ //double mft = water_depth_erosion_threshold;//MIN_Q;// vel_dir threshold
+ //for (int y = 2; y < ymax; y++)
+ //{
+
+ // int inc = 1;
+ // while (down_scan[y, inc] > 0)
+ // {
+ // int x = down_scan[y, inc];
+
+ // edge_temp[x, y] = 0;
+ // if (x == 1) x++;
+ // if (x == xmax) x--;
+ // inc++;
+
+ // if (water_depth[x, y] > mft)
+ // {
+ // water_depth2[x, y] = water_depth[x, y];
+ // int tempcounter = 0;
+ // for (int dir = 1; dir <= 8; dir++)
+ // {
+ // int x2, y2;
+ // x2 = x + deltaX[dir];
+ // y2 = y + deltaY[dir];
+ // if (water_depth[x2, y2] < mft) tempcounter++;
+ // }
+ // if (tempcounter > 6) water_depth2[x, y] = 0;
+ // }
+ // }
+ //}
+
+
+ // first determine which cells are at the edge of the channel
+
+ //var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(2, ymax, options, delegate (int y)
+ {
+ Parallel.For(2, xmax, options, delegate (int x)
+ {
+ edge[x, y] = -9999;
+
+ if (water_depth2[x, y] < mft)
+ {
+ // if water depth < threshold then if its next to a wet cell then its an edge cell
+ if (water_depth2[x, y - 1] > mft ||
+ water_depth2[x - 1, y] > mft ||
+ water_depth2[x + 1, y] > mft ||
+ water_depth2[x, y + 1] > mft)
+ {
+ edge[x, y] = 0;
+ }
+
+ // unless its a dry cell surrounded by wet...
+ if (water_depth2[x, y - 1] > mft &&
+ water_depth2[x - 1, y] > mft &&
+ water_depth2[x + 1, y] > mft &&
+ water_depth2[x, y + 1] > mft)
+ {
+ edge[x, y] = -9999;
+ edge2[x, y] = -9999;
+ }
+
+ // then update upscaled grid..
+ upscale[(x * 2), (y * 2)] = 0; // if dry
+ upscale[(x * 2), (y * 2) - 1] = 0;
+ upscale[(x * 2) - 1, (y * 2)] = 0;
+ upscale[(x * 2) - 1, (y * 2) - 1] = 0;
+ }
+
+ // update upscaled grid with wet cells (if wet)
+ if (water_depth2[x, y] >= mft)
+ {
+ upscale[(x * 2), (y * 2)] = 1; // if wet
+ upscale[(x * 2), (y * 2) - 1] = 1;
+ upscale[(x * 2) - 1, (y * 2)] = 1;
+ upscale[(x * 2) - 1, (y * 2) - 1] = 1;
+ }
+ });
+ });
+
+
+
+ // now determine edge cells on the new grid..
+
+ Parallel.For(2, ymax*2, options, delegate (int y)
+ {
+ Parallel.For(2, xmax*2, options, delegate (int x)
+ {
+ upscale_edge[x, y] = 0;
+ if (upscale[x, y] == 0)
+ {
+ if (upscale[x, y - 1] == 1 ||
+ upscale[x - 1, y] == 1 ||
+ upscale[x + 1, y] == 1 ||
+ upscale[x, y + 1] == 1)
+ {
+ upscale[x, y] = 2;
+ }
+ }
+ });
+
+ });
+
+
+
+ // now tall up inside and outside on upscaled grid
+
+ Parallel.For(2, ymax * 2, options, delegate (int y)
+ {
+ Parallel.For(2, xmax * 2, options, delegate (int x)
+ {
+ if (upscale[x, y] == 2)
+ {
+ int wetcells = 0;
+ int drycells = 0;
+ int water = 0;
+ int edge_cell_counter = 1;
+
+ // sum up dry cells and edge cells -
+ // now manhattan neighbors
+ for (int dir = 1; dir <= 7; dir += 2)
+ {
+ int x2, y2;
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+
+ if (upscale[x2, y2] == 1) wetcells += 1;
+ if (upscale[x2, y2] == 0) drycells += 1;
+ if (upscale[x2, y2] == 2) edge_cell_counter += 1;
+ }
+
+ if (edge_cell_counter > 3) drycells += edge_cell_counter - 2;
+ //
+ water = wetcells - drycells;
+ upscale_edge[x, y] = water;
+ }
+ });
+
+ });
+
+
+ // now update normal edge array..
+
+ Parallel.For(1, ymax+1, options, delegate (int y)
+ {
+ Parallel.For(1, xmax+1, options, delegate (int x)
+ {
+ if (edge[x, y] == 0)
+ {
+ edge[x, y] = (double)(upscale_edge[(x * 2), (y * 2)] +
+ upscale_edge[(x * 2), (y * 2) - 1] +
+ upscale_edge[(x * 2) - 1, (y * 2)] +
+ upscale_edge[(x * 2) - 1, (y * 2) - 1]);
+ if (edge[x, y] > 2) edge[x, y] = 2; // important line to stop too great inside bends...
+ if (edge[x, y] < -2) edge[x, y] = -2;
+
+ }
+ });
+ });
+
+ //then apply a smoothing filter over the top of this. here its done X number of times -
+
+ double smoothing_times = double.Parse(avge_smoothbox.Text);
+ double downstream_shift = double.Parse(downstreamshiftbox.Text);
+
+ for (int n = 1; n <= smoothing_times+downstream_shift; n++)
+ {
+ //var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(2, ymax, options, delegate(int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+
+ edge_temp[x, y] = 0;
+ if (x == 1) x++;
+ if (x == xmax) x--;
+ if (y == 1) y++;
+ if (y == ymax) y--;
+ inc++;
+
+ if (edge[x, y] > -9999)
+ {
+ double mean = 0;
+ double num = 0;
+ double water_flag = 0;
+
+
+ // add in cell itself..
+ mean += edge[x, y];
+ num++;
+
+
+ for (int dir = 1; dir <= 8; dir++)
+ {
+ int x2, y2;
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+ if (water_depth2[x2, y2] > mft) water_flag++;
+
+ if ( n > smoothing_times && edge[x2, y2] > -9999 && water_depth2[x2, y2] < mft && mean_ws_elev(x2,y2)>mean_ws_elev(x,y))
+ {
+ //now to mean manhattan neighbours - only if they share a wet diagonal neighbour
+ if ((Math.Abs(deltaX[dir]) + Math.Abs(deltaY[dir])) != 2)
+ {
+ if (deltaX[dir] == 1 && deltaY[dir] == 0 &&
+ (water_depth2[x + 1, y - 1] > mft ||
+ water_depth2[x + 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 0 && deltaY[dir] == 1 &&
+ (water_depth2[x + 1, y + 1] > mft ||
+ water_depth2[x - 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == -1 && deltaY[dir] == 0 &&
+ (water_depth2[x - 1, y - 1] > mft ||
+ water_depth2[x - 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 0 && deltaY[dir] == -1 &&
+ (water_depth2[x - 1, y - 1] > mft ||
+ water_depth2[x + 1, y - 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ }
+ //now non manahttan neighbours, with concected by a dry cell checked..
+ else
+ {
+ if (deltaX[dir] == -1 && deltaY[dir] == -1 &&
+ (water_depth2[x, y - 1] < mft ||
+ water_depth2[x - 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 1 && deltaY[dir] == -1 &&
+ (water_depth2[x, y - 1] < mft ||
+ water_depth2[x + 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 1 && deltaY[dir] == 1 &&
+ (water_depth2[x + 1, y] < mft ||
+ water_depth2[x, y + 1] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == -1 && deltaY[dir] == 1 &&
+ (water_depth2[x, y + 1] < mft ||
+ water_depth2[x - 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ }
+ }
+
+ else if ( n <= smoothing_times && edge[x2, y2] > -9999 && water_depth2[x2, y2] < mft)
+ {
+ //now to mean manhattan neighbours - only if they share a wet diagonal neighbour
+ if ((Math.Abs(deltaX[dir]) + Math.Abs(deltaY[dir])) != 2)
+ {
+ if (deltaX[dir] == 1 && deltaY[dir] == 0 &&
+ (water_depth2[x + 1, y - 1] > mft ||
+ water_depth2[x + 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 0 && deltaY[dir] == 1 &&
+ (water_depth2[x + 1, y + 1] > mft ||
+ water_depth2[x - 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == -1 && deltaY[dir] == 0 &&
+ (water_depth2[x - 1, y - 1] > mft ||
+ water_depth2[x - 1, y + 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 0 && deltaY[dir] == -1 &&
+ (water_depth2[x - 1, y - 1] > mft ||
+ water_depth2[x + 1, y - 1] > mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ }
+ //now non manahttan neighbours, with concected by a dry cell checked..
+ else
+ {
+ if (deltaX[dir] == -1 && deltaY[dir] == -1 &&
+ (water_depth2[x, y - 1] < mft ||
+ water_depth2[x - 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 1 && deltaY[dir] == -1 &&
+ (water_depth2[x, y - 1] < mft ||
+ water_depth2[x + 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == 1 && deltaY[dir] == 1 &&
+ (water_depth2[x + 1, y] < mft ||
+ water_depth2[x, y + 1] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ if (deltaX[dir] == -1 && deltaY[dir] == 1 &&
+ (water_depth2[x, y + 1] < mft ||
+ water_depth2[x - 1, y] < mft))
+ {
+ mean += (edge[x + deltaX[dir], y + deltaY[dir]]);
+ num++;
+ }
+ }
+ }
+ }
+ if (mean != 0) edge_temp[x, y] = mean / num;
+
+ // removes too many cells - islands etc..
+
+ //if(num>5&&edge[x,y]>0)edge_temp[x,y]=0;
+ //if(num+water_flag>7&&edge[x,y]>0)edge_temp[x,y]=0;
+
+ //remove edge effects
+ if (x < 3 || x > (xmax - 3)) edge_temp[x, y] = 0;
+ if (y < 3 || y > (ymax - 3)) edge_temp[x, y] = 0;
+
+ }
+ }
+ });
+
+ Parallel.For(2, ymax, options, delegate (int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ //if (x == 1) x++;
+ //if (x == xmax) x--;
+ inc++;
+ if (edge[x, y] > -9999)
+ {
+ edge[x, y] = edge_temp[x, y];
+ }
+ }
+ });
+ }
+
+
+ // trial line to remove too high inside bends,,
+ Parallel.For(1, ymax + 1, options, delegate (int y)
+ {
+ Parallel.For(1, xmax + 1, options, delegate (int x)
+ {
+ if (edge[x, y] > -9999)
+ {
+ if (edge[x, y] > 0) edge[x, y] = 0;
+ //if (edge[x, y] < -0.25) edge[x, y] = -0.25;
+ edge[x, y] = 0 - edge[x, y];
+ edge[x, y] = 1 / ((2.131 * Math.Pow(edge[x, y], -1.0794)) * DX);
+ //if (edge[x, y] > (1 / (DX * 3))) edge[x, y] = 1 / (DX * 3);
+ //edge[x, y] = 1 / edge[x, y];
+
+ }
+ if (water_depth[x, y] > water_depth_erosion_threshold && edge[x, y] == -9999) edge[x, y] = 0;
+ });
+ });
+
+ //// now smooth across the channel..
+ double tempdiff = 0;
+ double counter = 0;
+ do
+ {
+ counter++;
+ //var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 4 };
+ Parallel.For(2, ymax, options, delegate(int y)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+
+ edge_temp[x, y] = 0;
+ if (x == 1) x++;
+ if (x == xmax) x--;
+ inc++;
+ if (water_depth2[x, y] > mft && edge[x, y] == -9999) edge[x, y] = 0;
+
+ if (edge[x, y] > -9999 && water_depth2[x, y] > mft)
+ {
+ double mean = 0;
+ int num = 0;
+ for (int dir = 1; dir <= 8; dir+=2)
+ {
+ int x2, y2;
+ x2 = x + deltaX[dir];
+ y2 = y + deltaY[dir];
+
+ if (water_depth2[x2, y2] > mft && edge[x2, y2] == -9999) edge[x2, y2] = 0;
+ if (edge[x2, y2] > -9999)
+ {
+ mean += (edge[x2, y2]);
+ num++;
+ }
+ }
+ edge_temp[x, y] = mean / num;
+ }
+ }
+ });
+
+ tempdiff = 0;
+ //Parallel.For(2, ymax, options, delegate (int y)
+ //{
+
+ // reduction needed here:
+ for (int y = 2; y < ymax; y++)
+ {
+ int inc = 1;
+ while (down_scan[y, inc] > 0)
+ {
+ int x = down_scan[y, inc];
+ if (x == 1) x++;
+ if (x == xmax) x--;
+ inc++;
+ if (edge[x, y] > -9999 && water_depth2[x, y] > mft)
+ {
+ if (Math.Abs(edge[x, y] - edge_temp[x, y]) > tempdiff) tempdiff = Math.Abs(edge[x, y] - edge_temp[x, y]);
+ edge[x, y] = edge_temp[x, y];
+ }
+ }
+ }
+ //});
+ } while (tempdiff > lateral_cross_channel_smoothing); //this makes it loop until the averaging across the stream stabilises
+ // so that the difference between the old and new values are < 0.0001
+ //tempStatusPanel.Text = Convert.ToString(counter);
+
+ }
+
+ private void Form1_Load(object sender, System.EventArgs e)
+ {
+
+ zoomPanImageBox1.Height = this.Height - 225;
+ zoomPanImageBox1.Width = this.Width - 20;
+ //googleToggle();
+
+ //HttpWebRequest req;
+ //HttpWebResponse res;
+ //try
+ //{
+ // req = (HttpWebRequest) WebRequest.Create("http://www.coulthard.org.uk/");
+ // res = (HttpWebResponse) req.GetResponse();
+ //}
+ //catch(Exception ex)
+ //{
+ // /// do nothing.
+ //}
+
+ //JMW <20040929 -start>
+ this.Text = basetext;
+ //DoingGraphics = false;
+ //JMW <20040929 - end>
+
+
+ // comment out all of the below to run normally. Leave uncommented in order to run in batch mode.
+ ////////////////////////
+ //////////////////////////
+
+
+
+ ///// first load up xml file from command line:
+ /////
+ //string temp_xml_name = " ";
+
+ //foreach (string arg in Environment.GetCommandLineArgs())
+ //{
+ // if (arg != "CAESAR.exe") temp_xml_name = arg;
+ //}
+
+ ///// then load up .xml file
+ /////
+
+ //XmlTextReader xreader;
+ //String dum;
+
+ //if (1 > 0)
+ //{
+
+ // xreader = new XmlTextReader(temp_xml_name);
+
+ // //Read the file
+ // if (xreader != null)
+ // {
+ // xreader.ReadStartElement("Parms");
+ // xreader.ReadStartElement("General-Parms");
+ // try
+ // {
+ // overrideheaderBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("headeroverride"));
+ // }
+ // catch
+ // { };
+ // xtextbox.Text = xreader.ReadElementString("x-coordinate");
+ // ytextbox.Text = xreader.ReadElementString("y-coordinate");
+ // initscansbox.Text = xreader.ReadElementString("initscans");
+ // erodefactorbox.Text = xreader.ReadElementString("maxerodelimit");
+ // dxbox.Text = xreader.ReadElementString("cellsize");
+ // limitbox.Text = xreader.ReadElementString("memorylimit");
+ // minqbox.Text = xreader.ReadElementString("minq");
+ // creepratebox.Text = xreader.ReadElementString("creeprate");
+ // lateralratebox.Text = xreader.ReadElementString("lateralerosionrate");
+ // itermaxbox.Text = xreader.ReadElementString("maxiter");
+ // textBox1.Text = xreader.ReadElementString("runstarttime");
+ // cyclemaxbox.Text = xreader.ReadElementString("maxrunduration");
+ // slopebox.Text = xreader.ReadElementString("slopefailurethreshold");
+ // smoothbox.Text = xreader.ReadElementString("wssmoothingradius");
+ // mvaluebox.Text = xreader.ReadElementString("mvalue");
+
+ // grasstextbox.Text = xreader.ReadElementString("growgrasstime");
+ // textBox2.Text = xreader.ReadElementString("initialq");
+ // try
+ // {
+ // checkBox3.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("wssmoothing"));
+ // }
+ // catch
+ // { };
+ // grassbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("grass-sediment"));
+
+ // try // MJ 24/01/05
+ // {
+ // textBox3.Text = xreader.ReadElementString("flowdistribution");
+ // mintimestepbox.Text = xreader.ReadElementString("mintimestep");
+ // }
+ // catch
+ // { };
+
+ // try // MJ 15/03/05
+ // {
+ // k_evapBox.Text = xreader.ReadElementString("evaporation");
+ // }
+ // catch
+ // { };
+
+ // try // MJ 10/05/05
+ // {
+ // vegTauCritBox.Text = xreader.ReadElementString("vegcritshear");
+ // }
+ // catch
+ // { };
+
+ // try
+ // {
+ // bedslope_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("bedslope"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("wsslope"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // veltaubox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("veltaubox"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // catchment_mode_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("catchment_mode"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // reach_mode_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("reach_mode"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // latbox1.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("lat1"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // latbox2.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("lat2"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("lat3"));
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // string dum_string = xreader.ReadElementString("cross_stream_grad");
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // max_vel_box.Text = xreader.ReadElementString("max_vel");
+ // }
+ // catch { };
+
+
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem12.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem13.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem14.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem15.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem16.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem17.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem18.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem19.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem20.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem21.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem22.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem23.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem24.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem25.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // try
+ // {
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem29.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem33.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("SaveOptions");
+ // dum = xreader.ReadElementString("Option");
+ // menuItem34.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g1box.Text = xreader.ReadElementString("gs");
+ // gp1box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS1box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS1box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g2box.Text = xreader.ReadElementString("gs");
+ // gp2box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS2box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS2box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g3box.Text = xreader.ReadElementString("gs");
+ // gp3box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS3box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS3box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g4box.Text = xreader.ReadElementString("gs");
+ // gp4box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS4box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS4box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g5box.Text = xreader.ReadElementString("gs");
+ // gp5box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS5box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS5box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g6box.Text = xreader.ReadElementString("gs");
+ // gp6box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS6box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS6box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g7box.Text = xreader.ReadElementString("gs");
+ // gp7box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS7box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS7box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Grain-Size");
+ // g8box.Text = xreader.ReadElementString("gs");
+ // gp8box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS8box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS8box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+
+ // try
+ // {
+ // xreader.ReadStartElement("Grain-Size");
+ // g9box.Text = xreader.ReadElementString("gs");
+ // gp9box.Text = xreader.ReadElementString("gp");
+ // try
+ // {
+ // suspGS9box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ // fallGS9box.Text = xreader.ReadElementString("fv");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+
+ // xreader.ReadStartElement("File-Parms");
+
+ // input_time_step_box.Text = xreader.ReadElementString("inputtimestep");
+ // saveintervalbox.Text = xreader.ReadElementString("saveinterval");
+ // outputfilesaveintervalbox.Text = xreader.ReadElementString("savetologfileinterval");
+ // tracerbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("tracerrun"));
+ // uniquefilecheck.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("uniquefilecheck"));
+
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // openfiletextbox.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // graindataloadbox.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // bedrockbox.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // raindataloadbox.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // tracerfile.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // tracerhydrofile.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Filenames");
+ // dum = xreader.ReadElementString("Desc");
+ // tracergrainbox.Text = xreader.ReadElementString("Name");
+ // xreader.ReadEndElement();
+ // try
+ // {
+
+ // xreader.ReadStartElement("Sources");
+ // inbox1.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox1.Text = xreader.ReadElementString("X");
+ // ybox1.Text = xreader.ReadElementString("Y");
+ // infile1.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox2.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox2.Text = xreader.ReadElementString("X");
+ // ybox2.Text = xreader.ReadElementString("Y");
+ // infile2.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox3.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox3.Text = xreader.ReadElementString("X");
+ // ybox3.Text = xreader.ReadElementString("Y");
+ // infile3.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox4.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox4.Text = xreader.ReadElementString("X");
+ // ybox4.Text = xreader.ReadElementString("Y");
+ // infile4.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox5.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox5.Text = xreader.ReadElementString("X");
+ // ybox5.Text = xreader.ReadElementString("Y");
+ // infile5.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox6.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox6.Text = xreader.ReadElementString("X");
+ // ybox6.Text = xreader.ReadElementString("Y");
+ // infile6.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox7.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox7.Text = xreader.ReadElementString("X");
+ // ybox7.Text = xreader.ReadElementString("Y");
+ // infile7.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // xreader.ReadStartElement("Sources");
+ // inbox8.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ // xbox8.Text = xreader.ReadElementString("X");
+ // ybox8.Text = xreader.ReadElementString("Y");
+ // infile8.Text = xreader.ReadElementString("Filename");
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+
+ // xreader.ReadEndElement();
+
+ // xreader.ReadStartElement("Description");
+ // DescBox.Text = xreader.ReadElementString("S");
+ // xreader.ReadEndElement();
+
+ // //JMW 2004-11-11
+ // try
+ // {
+ // xreader.ReadStartElement("OutputFile-Parms");
+ // checkBoxGenerateAVIFile.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("generateavifile"));
+ // textBoxAVIFile.Text = xreader.ReadElementString("avifile");
+ // try
+ // {
+ // saveintervalbox.Text = xreader.ReadElementString("avifreq");
+ // checkBoxGenerateTimeSeries.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("generatetimeseriesfile"));
+ // TimeseriesOutBox.Text = xreader.ReadElementString("timeseriesfile");
+ // outputfilesaveintervalbox.Text = xreader.ReadElementString("timeseriesfreq");
+ // checkBoxGenerateIterations.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("generateiterationsfile"));
+ // IterationOutbox.Text = xreader.ReadElementString("iterationsfile");
+ // }
+ // catch
+ // { };
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+
+ // try
+ // {
+ // xreader.ReadStartElement("Display");
+ // // have to have dumpvariable here as window not displayed yet...
+ // int dumpvarible = XmlConvert.ToInt16(xreader.ReadElementString("top"));
+ // dumpvarible = XmlConvert.ToInt16(xreader.ReadElementString("left"));
+ // dumpvarible = XmlConvert.ToInt16(xreader.ReadElementString("width"));
+ // dumpvarible = XmlConvert.ToInt16(xreader.ReadElementString("height"));
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+
+ // try
+ // {
+ // xreader.ReadStartElement("Lateral");
+ // bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("oldlat"));
+ // newlateral.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("newlat"));
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+ // try
+ // {
+ // xreader.ReadStartElement("Add_Ons");
+ // tracerOutcheckBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("tracer-out"));
+ // tracerOutputtextBox.Text = xreader.ReadElementString("tracer-out-filename");
+ // googleAnimationCheckbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("google_animation"));
+ // googleAnimationTextBox.Text = xreader.ReadElementString("google_animation_file_name");
+ // googleBeginDate.Text = xreader.ReadElementString("google_begin");
+ // googAnimationSaveInterval.Text = xreader.ReadElementString("google_interval");
+ // jmeaninputfilebox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("jMean"));
+ // avge_smoothbox.Text = xreader.ReadElementString("edge_smoothing");
+ // string dum_string = xreader.ReadElementString("displacement");
+ // propremaining.Text = xreader.ReadElementString("prop_remain");
+ // max_time_step_Box.Text = xreader.ReadElementString("max_time_step");
+ // mine_checkBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("contam_input"));
+ // mineX_textBox.Text = xreader.ReadElementString("mineX");
+ // mineY_textBox.Text = xreader.ReadElementString("mineY");
+ // mine_input_textBox.Text = xreader.ReadElementString("contam_input_file");
+ // soil_ratebox.Text = xreader.ReadElementString("soil_rate");
+ // SiberiaBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("siberia"));
+ // Beta1Box.Text = xreader.ReadElementString("beta1");
+ // Beta3Box.Text = xreader.ReadElementString("beta3");
+ // m1Box.Text = xreader.ReadElementString("m1");
+ // m3Box.Text = xreader.ReadElementString("m3");
+ // n1Box.Text = xreader.ReadElementString("n1");
+ // Q2box.Text = xreader.ReadElementString("W_depth_erosion_threshold");
+ // dum_string = xreader.ReadElementString("fexp");
+ // div_inputs_box.Text = xreader.ReadElementString("div_inputs");
+
+ // init_depth_box.Text = xreader.ReadElementString("initial_sand_depth");
+ // slab_depth_box.Text = xreader.ReadElementString("maxslabdepth");
+ // shadow_angle_box.Text = xreader.ReadElementString("angle");
+ // upstream_check_box.Text = xreader.ReadElementString("checkup");
+ // depo_prob_box.Text = xreader.ReadElementString("dep_probability");
+ // offset_box.Text = xreader.ReadElementString("downstream_offset");
+ // dune_time_box.Text = xreader.ReadElementString("dune_timestep");
+ // dune_grid_size_box.Text = xreader.ReadElementString("dune_gridsize");
+
+ // wilcockbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("wilcock"));
+ // einsteinbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("einstein"));
+ // DuneBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("dune"));
+
+ // UTMgridcheckbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("UTM"));
+ // UTMsouthcheck.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("South"));
+ // UTMzonebox.Text = xreader.ReadElementString("UTMzone");
+
+ // raintimestepbox.Text = xreader.ReadElementString("raindatatimestep");
+ // activebox.Text = xreader.ReadElementString("activelayerthickness");
+
+ // xreader.ReadEndElement();
+ // xreader.ReadEndElement();
+ // }
+ // catch
+ // { };
+
+ // xreader.Close();
+
+
+ // this.Text = basetext + " (" + Path.GetFileName(cfgname) + ")";
+ // button2.Enabled = true;
+ // start_button.Enabled = false;
+ // Panel1.Visible = false;
+ // tabControl1.Visible = true;
+
+ // }
+ //}
+
+ //////// then initialise
+
+ //int ok;
+ //ok = read_header();
+
+ //if (ok == 1)
+ //{
+ // initialise();
+ // zero_values();
+ // load_data();
+
+ // // nActualGridSize
+ // // moved from initialse() to here MJ 29/03/05
+ // int x, y;
+ // nActualGridCells = 0;
+ // for (x = 1; x <= xmax; x++)
+ // {
+ // for (y = 1; y <= ymax; y++)
+ // {
+ // if (elev[x, y] > -9999) nActualGridCells++;
+ // }
+ // }
+
+ // tabControl1.Visible = false;
+ // checkBox1.Checked = false;
+ // zoomPanImageBox1.Visible = true;// MJ 14/01/05
+ // Panel1.Visible = true; // MJ 14/01/05
+ // button2.Enabled = false; // MJ 17/01/05
+ // start_button.Enabled = true; // MJ 17/01/05
+ // groupBox2.Visible = true;
+ // groupBox3.Visible = true;
+ //}
+
+ //// then run program
+
+ //main_loop(this, null);
+
+ ////
+ //// end of batch mode section
+ ////
+ ////
+ }
+
+ void button1_Click(object sender, System.EventArgs e)
+ {
+ //close google earth animation kml and make kmz
+ if (googleAnimationCheckbox.Checked == true)
+ {
+ StreamWriter kmlsr = File.AppendText(KML_FILE_NAME);
+ kml = "\n"
+ + "\n";
+ kmlsr.WriteLine(kml);
+ kmlsr.Close();
+ }
+
+ if (menuItem25.Checked == true) save_data(1, 0); // save waterdepths
+ if (menuItem13.Checked == true) save_data(2, 0); // save elevdiff
+ if (menuItem12.Checked == true) save_data(3, 0); // save elevations
+ if (menuItem14.Checked == true) save_data(4, 0); // save grainsize
+ if (menuItem29.Checked == true) save_data(15, 0); // save d50 top layer
+ if (menuItem33.Checked == true) save_data(16, 0); // save velocity
+ if (menuItem34.Checked == true) save_data(17, 0); // save soil_saturation
+
+ this.Close();
+ }
+ private void button2_Click(object sender, System.EventArgs e)
+ {
+ int ok;
+ ok = read_header();
+ int nnn;
+ double temp = -9999;
+
+ if (ok == 1)
+ {
+ initialise();
+ zero_values();
+ load_data();
+
+ // nActualGridSize
+ // moved from initialse() to here MJ 29/03/05
+ int x, y;
+ //nActualGridCells = 0;
+ for (int ii = 1; ii <= rfnum; ii++) nActualGridCells[ii] = 0;
+
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ if (elev[x, y] > -9999) nActualGridCells[rfarea[x, y]]++;
+ }
+ }
+
+ tabControl1.Visible = false;
+ checkBox1.Checked = false;
+ zoomPanImageBox1.Visible = true;// MJ 14/01/05
+ Panel1.Visible = true; // MJ 14/01/05
+ button2.Enabled = false; // MJ 17/01/05
+ start_button.Enabled = true; // MJ 17/01/05
+ groupBox2.Visible = true;
+ groupBox3.Visible = true;
+ }
+
+ string message = "Variables check:";
+ if((xmax*ymax)>250000) message +="\n\nWarning, number of cells is greater than 250 000 - this may result in slow model operation";
+ if (MIN_Q < (DX / 120)) message += "\n\nWarning, Min_Q may be set too low - suitable value is normally cell size / 100";
+ if (MIN_Q > (DX / 80)) message += "\n\nWarning, Min_Q may be set too high - suitable value is normally cell size / 100";
+ if (reach_mode_box.Checked == true && inbox1.Checked == false) message += "\n\nWarning, model set to run in reach mode, but no point inputs selected (Hydrology tab)";
+ if (reach_mode_box.Checked == true && div_inputs < 0) message += "\n\nWarning, model set to run in reach mode, but divide inputs box (Hydrology tab) set to 0\nit must be 1 or greater";
+ if (max_time_step > 3600)
+ {
+ message += "\n\nMax time step (numerical tab) is set to greater than 3600 - if running in catchment mode\nthis must be smaller than 3600";
+
+ }
+ if (water_depth_erosion_threshold > 0.02)
+ {
+ message += "\n\nWarning, Min depth for erosion threshold (numerical tab) may be set too high";
+ message += "\nthis could result in erosion not happening in cells where water depths are low try a value of 0.02 or lower";
+ }
+ if (water_depth_erosion_threshold < 0.005)
+ {
+ message += "\n\nWarning, Min depth for erosion threshold (numerical tab) may be set too low";
+ message += "\nthis may lead to slow operation as the model tries to erode where very shallow depths ";
+ }
+ if (d1 > d2 || d2 > d3 || d3 > d4) message += "\n\nWarning, sediment sizes (sediment tab) must be entered in ASCENDING order of size";
+ //if (M > 0.1 || M < 0.001) message += "\n\nWarning, M value is unusually high or low. Typical values range from 0.005 to 0.02";
+
+ //check for -9999's on RH edge of DEM
+ for (nnn = 1; nnn <= ymax; nnn++)
+ {
+ if (elev[xmax, nnn] > temp) temp = elev[xmax, nnn];
+ }
+ if (temp < -10)
+ {
+ message += "\n\nDEM ERROR: CAESAR will not function properly, as the right hand column of the DEM is all nodata (-9999) values. This will prevent any water or sediment from leaving the Rh edge of the model/dem";
+ }
+ if (edgeslope > 0.01) message += "\nThe edge slope (slope at exit cells for hydraulic model) is probably set too high.. normal values are 0.01 to 0.001";
+ //if (bed_proportion > 0.05) message += "\nThe proportion of bedslope erosion is set high - please check";
+ //if (bed_proportion > 1) message += "\nProportion of bedlsope erosion is greater than 1 - this must be reduced or the model will not function correctly";
+ if (courant_number > 0.7) message += "\nThe courant number is set too high, numerical instabilities are highly likely, it is best set to < 0.5";
+ if (courant_number >= 0.4 && DX <= 25) message += "\nThe courant number may be set a little to high for this resolution - consider changing to below 0.4";
+ if (courant_number >= 0.3 && DX <= 10) message += "\nThe courant number may be set a little to high for this resolution - consider changing to below 0.3";
+ //if (min_time_step <= 0) message += "\nConsider using a minimum time step (e.g. 1 sec or greater) as low time steps can lead to excessive scour during the first few min of model operation";
+ if (in_out_difference != 0) message += "\n\nYou have set the input/output difference to be greater than zero, which means the model will speed up/run in steady state when the difference between water input and output is less than this value";
+
+ message += "\n\nAll other variables are OK";
+ MessageBox.Show(message);
+
+ //main_loop(this, null);
+
+ }
+ private void textBox2_TextChanged(object sender, System.EventArgs e)
+ {
+
+ }
+ private void contextMenu1_Popup(object sender, System.EventArgs e)
+ {
+
+ }
+ private void popComboBox1()
+ {
+ if (comboBox1.Items.Count == 1)
+ {
+ comboBox1.Text = "water depth";
+ comboBox1.Text = "erosion/dep";
+ comboBox1.Text = "Bed sheer stress";
+ comboBox1.Text = "grainsize";
+ comboBox1.Text = "tracer";
+ comboBox1.Text = "susp conc";
+ comboBox1.Text = "soil depth";
+ comboBox1.Text = "flow velocity";
+ }
+ }
+ private void menuItem3_Click(object sender, System.EventArgs e)
+ {
+ menuItem3.Checked=(!menuItem3.Checked);
+ if (menuItem3.Checked == true)
+ {
+ comboBox1.Items.Add("water depth");
+ }
+ else
+ {
+ comboBox1.Items.Remove("water depth");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+
+ }
+ private void menuItem4_Click(object sender, System.EventArgs e)
+ {
+ menuItem4.Checked=(!menuItem4.Checked);
+ if (menuItem4.Checked == true)
+ {
+ comboBox1.Items.Add("erosion/dep");
+ }
+ else
+ {
+ comboBox1.Items.Remove("erosion/dep");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem5_Click(object sender, System.EventArgs e)
+ {
+ menuItem5.Checked=(!menuItem5.Checked);
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem7_Click(object sender, System.EventArgs e)
+ {
+ menuItem7.Checked=(!menuItem7.Checked);
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem8_Click(object sender, System.EventArgs e)
+ {
+ menuItem8.Checked=(!menuItem8.Checked);
+ if (menuItem8.Checked == true)
+ {
+ comboBox1.Items.Add("Bed sheer stress");
+ }
+ else
+ {
+ comboBox1.Items.Remove("Bed sheer stress");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem9_Click(object sender, System.EventArgs e)
+ {
+ menuItem9.Checked=(!menuItem9.Checked);
+ if (menuItem9.Checked == true)
+ {
+ comboBox1.Items.Add("grainsize");
+ }
+ else
+ {
+ comboBox1.Items.Remove("grainsize");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem12_Click(object sender, System.EventArgs e)
+ {
+ menuItem12.Checked=(!menuItem12.Checked);
+ }
+ private void menuItem13_Click(object sender, System.EventArgs e)
+ {
+ menuItem13.Checked=(!menuItem13.Checked);
+ }
+ private void menuItem14_Click(object sender, System.EventArgs e)
+ {
+ menuItem14.Checked=(!menuItem14.Checked);
+ }
+ private void menuItem25_Click(object sender, System.EventArgs e)
+ {
+ menuItem25.Checked=(!menuItem25.Checked);
+ }
+ private void menuItem26_Click(object sender, System.EventArgs e)
+ {
+ menuItem26.Checked=(!menuItem26.Checked);
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem27_Click(object sender, System.EventArgs e)
+ {
+ menuItem27.Checked=(!menuItem27.Checked);
+ if (menuItem27.Checked == true)
+ {
+ comboBox1.Items.Add("susp conc");
+ }
+ else
+ {
+ comboBox1.Items.Remove("susp conc");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem28_Click(object sender, System.EventArgs e)
+ {
+ menuItem28.Checked=(!menuItem28.Checked);
+ if (menuItem28.Checked == true)
+ {
+ comboBox1.Items.Add("soil depth");
+ }
+ else
+ {
+ comboBox1.Items.Remove("soil depth");
+ }
+ popComboBox1();
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem29_Click(object sender, System.EventArgs e)
+ {
+ menuItem29.Checked=(!menuItem29.Checked);
+ }
+ private void menuItem30_Click(object sender, System.EventArgs e)
+ {
+ menuItem30.Checked=(!menuItem30.Checked);
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem31_Click(object sender, System.EventArgs e)
+ {
+ menuItem31.Checked=(!menuItem31.Checked);
+ if (menuItem31.Checked == true)
+ {
+ comboBox1.Items.Add("flow velocity");
+ }
+ else
+ {
+ comboBox1.Items.Remove("flow velocity");
+ }
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void menuItem33_Click(object sender, System.EventArgs e)
+ {
+ menuItem33.Checked=(!menuItem33.Checked);
+ }
+ private void menuItem34_Click(object sender, System.EventArgs e)
+ {
+ menuItem34.Checked=(!menuItem34.Checked);
+ }
+ private void button3_Click(object sender, System.EventArgs e)
+ {
+ grow_grass(1);
+ }
+ private void menuItemConfigFileOpen_Click(object sender, System.EventArgs e)
+ {
+ XmlTextReader xreader;
+ String dum;
+
+ OpenFileDialog openFileDialog1 = new OpenFileDialog();
+
+ openFileDialog1.InitialDirectory = workdir ;
+ openFileDialog1.Filter = "cfg files (*.xml)|*.xml|All files (*.*)|*.*" ;
+ openFileDialog1.FilterIndex = 1 ;
+ openFileDialog1.RestoreDirectory = false ;
+
+ if(openFileDialog1.ShowDialog() == DialogResult.OK)
+ {
+ cfgname = openFileDialog1.FileName;
+
+ xreader = new XmlTextReader(cfgname);
+
+ //Read the file
+ if (xreader != null)
+ {
+ xreader.ReadStartElement("Parms");
+ xreader.ReadStartElement("General-Parms");
+ try
+ {
+ overrideheaderBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("headeroverride"));
+ }
+ catch
+ {};
+ xtextbox.Text = xreader.ReadElementString("x-coordinate");
+ ytextbox.Text = xreader.ReadElementString("y-coordinate");
+ initscansbox.Text = xreader.ReadElementString("initscans");
+ erodefactorbox.Text = xreader.ReadElementString("maxerodelimit");
+ dxbox.Text = xreader.ReadElementString("cellsize");
+ limitbox.Text = xreader.ReadElementString("memorylimit");
+ minqbox.Text = xreader.ReadElementString("minq");
+ creepratebox.Text = xreader.ReadElementString("creeprate");
+ lateralratebox.Text = xreader.ReadElementString("lateralerosionrate");
+ itermaxbox.Text = xreader.ReadElementString("maxiter");
+ textBox1.Text = xreader.ReadElementString("runstarttime");
+ cyclemaxbox.Text = xreader.ReadElementString("maxrunduration");
+ slopebox.Text = xreader.ReadElementString("slopefailurethreshold");
+ smoothbox.Text = xreader.ReadElementString("wssmoothingradius");
+ mvaluebox.Text = xreader.ReadElementString("mvalue");
+
+ grasstextbox.Text = xreader.ReadElementString("growgrasstime");
+ textBox2.Text = xreader.ReadElementString("initialq");
+ try
+ {
+ bool dummy6 = XmlConvert.ToBoolean(xreader.ReadElementString("wssmoothing"));
+ }
+ catch
+ { };
+ flowonlybox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("grass-sediment"));
+
+ try // MJ 24/01/05
+ {
+ textBox3.Text = xreader.ReadElementString("flowdistribution");
+ mintimestepbox.Text = xreader.ReadElementString("mintimestep");
+ }
+ catch
+ {};
+
+ try // MJ 15/03/05
+ {
+ k_evapBox.Text = xreader.ReadElementString("evaporation");
+ }
+ catch
+ {};
+
+ try // MJ 10/05/05
+ {
+ vegTauCritBox.Text = xreader.ReadElementString("vegcritshear");
+ }
+ catch
+ {};
+
+ try
+ {
+ bedslope_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("bedslope"));
+ }
+ catch
+ {};
+ try
+ {
+ bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("wsslope"));
+ }
+ catch
+ {};
+ try
+ {
+ veltaubox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("veltaubox"));
+ }
+ catch
+ { };
+ try
+ {
+ catchment_mode_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("catchment_mode"));
+ }
+ catch
+ {};
+ try
+ {
+ reach_mode_box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("reach_mode"));
+ }
+ catch
+ {};
+ try
+ {
+ bool dum_bool2 = XmlConvert.ToBoolean(xreader.ReadElementString("lat1"));
+ }
+ catch
+ {};
+ try
+ {
+ bool dum_bool2 = XmlConvert.ToBoolean(xreader.ReadElementString("lat2"));
+ }
+ catch
+ {};
+ try
+ {
+ bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("lat3"));
+ }
+ catch
+ {};
+ try
+ {
+ string dum_string = xreader.ReadElementString("cross_stream_grad");
+ }
+ catch
+ {};
+ try
+ {
+ max_vel_box.Text = xreader.ReadElementString("max_vel");
+ }
+ catch { };
+
+
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem12.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem13.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem14.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ bool dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ dummy4 = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem25.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ try
+ {
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem29.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem33.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("SaveOptions");
+ dum = xreader.ReadElementString("Option");
+ menuItem34.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("Checked"));
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g1box.Text = xreader.ReadElementString("gs");
+ gp1box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS1box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS1box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g2box.Text = xreader.ReadElementString("gs");
+ gp2box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS2box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS2box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g3box.Text = xreader.ReadElementString("gs");
+ gp3box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS3box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS3box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g4box.Text = xreader.ReadElementString("gs");
+ gp4box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS4box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS4box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g5box.Text = xreader.ReadElementString("gs");
+ gp5box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS5box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS5box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g6box.Text = xreader.ReadElementString("gs");
+ gp6box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS6box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS6box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g7box.Text = xreader.ReadElementString("gs");
+ gp7box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS7box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS7box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Grain-Size");
+ g8box.Text = xreader.ReadElementString("gs");
+ gp8box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS8box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS8box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+
+ try
+ {
+ xreader.ReadStartElement("Grain-Size");
+ g9box.Text = xreader.ReadElementString("gs");
+ gp9box.Text = xreader.ReadElementString("gp");
+ try
+ {
+ suspGS9box.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("ss"));
+ fallGS9box.Text = xreader.ReadElementString("fv");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+
+ xreader.ReadStartElement("File-Parms");
+
+ input_time_step_box.Text = xreader.ReadElementString("inputtimestep");
+ saveintervalbox.Text = xreader.ReadElementString("saveinterval");
+ outputfilesaveintervalbox.Text = xreader.ReadElementString("savetologfileinterval");
+ tracerbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("tracerrun"));
+ uniquefilecheck.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("uniquefilecheck"));
+
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ openfiletextbox.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ graindataloadbox.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ bedrockbox.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ raindataloadbox.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ tracerfile.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ tracerhydrofile.Text = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Filenames");
+ dum = xreader.ReadElementString("Desc");
+ string dummystring4 = xreader.ReadElementString("Name");
+ xreader.ReadEndElement();
+ try{
+
+ xreader.ReadStartElement("Sources");
+ inbox1.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox1.Text = xreader.ReadElementString("X");
+ ybox1.Text = xreader.ReadElementString("Y");
+ infile1.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox2.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox2.Text = xreader.ReadElementString("X");
+ ybox2.Text = xreader.ReadElementString("Y");
+ infile2.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox3.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox3.Text = xreader.ReadElementString("X");
+ ybox3.Text = xreader.ReadElementString("Y");
+ infile3.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox4.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox4.Text = xreader.ReadElementString("X");
+ ybox4.Text = xreader.ReadElementString("Y");
+ infile4.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox5.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox5.Text = xreader.ReadElementString("X");
+ ybox5.Text = xreader.ReadElementString("Y");
+ infile5.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox6.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox6.Text = xreader.ReadElementString("X");
+ ybox6.Text = xreader.ReadElementString("Y");
+ infile6.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox7.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox7.Text = xreader.ReadElementString("X");
+ ybox7.Text = xreader.ReadElementString("Y");
+ infile7.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ xreader.ReadStartElement("Sources");
+ inbox8.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("input"));
+ xbox8.Text = xreader.ReadElementString("X");
+ ybox8.Text = xreader.ReadElementString("Y");
+ infile8.Text = xreader.ReadElementString("Filename");
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+
+ xreader.ReadEndElement();
+
+ xreader.ReadStartElement("Description");
+ DescBox.Text = xreader.ReadElementString("S");
+ xreader.ReadEndElement();
+
+ //JMW 2004-11-11
+ try
+ {
+ xreader.ReadStartElement("OutputFile-Parms");
+ try
+ {
+ bool a124 = XmlConvert.ToBoolean(xreader.ReadElementString("generateavifile"));
+ string a123 = xreader.ReadElementString("avifile");
+
+ }
+ catch { };
+ try
+ {
+ saveintervalbox.Text = xreader.ReadElementString("avifreq");
+ checkBoxGenerateTimeSeries.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("generatetimeseriesfile"));
+ TimeseriesOutBox.Text = xreader.ReadElementString("timeseriesfile");
+ outputfilesaveintervalbox.Text = xreader.ReadElementString("timeseriesfreq");
+ checkBoxGenerateIterations.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("generateiterationsfile"));
+ IterationOutbox.Text = xreader.ReadElementString("iterationsfile");
+ }
+ catch
+ {};
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+
+ try
+ {
+ xreader.ReadStartElement("Display");
+ Form1.ActiveForm.Top = XmlConvert.ToInt16(xreader.ReadElementString("top"));
+ Form1.ActiveForm.Left = XmlConvert.ToInt16(xreader.ReadElementString("left"));
+ Form1.ActiveForm.Width = XmlConvert.ToInt16(xreader.ReadElementString("width"));
+ Form1.ActiveForm.Height = XmlConvert.ToInt16(xreader.ReadElementString("height"));
+
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+
+ try
+ {
+ xreader.ReadStartElement("Lateral");
+ bool dum_bool = XmlConvert.ToBoolean(xreader.ReadElementString("oldlat"));
+ newlateral.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("newlat"));
+ xreader.ReadEndElement();
+ }
+ catch
+ {};
+ try
+ {
+ xreader.ReadStartElement("Add_Ons");
+ tracerOutcheckBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("tracer-out"));
+ tracerOutputtextBox.Text = xreader.ReadElementString("tracer-out-filename");
+ googleAnimationCheckbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("google_animation"));
+ googleAnimationTextBox.Text = xreader.ReadElementString("google_animation_file_name");
+ googleBeginDate.Text = xreader.ReadElementString("google_begin");
+ googAnimationSaveInterval.Text = xreader.ReadElementString("google_interval");
+ jmeaninputfilebox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("jMean"));
+ avge_smoothbox.Text = xreader.ReadElementString("edge_smoothing");
+ string dum_string = xreader.ReadElementString("displacement");
+ propremaining.Text = xreader.ReadElementString("prop_remain");
+ max_time_step_Box.Text = xreader.ReadElementString("max_time_step");
+ bool dummy1 = XmlConvert.ToBoolean(xreader.ReadElementString("contam_input"));
+ string dummystring1 = xreader.ReadElementString("mineX");
+ string dummystring2 = xreader.ReadElementString("mineY");
+ string dummystring3 = xreader.ReadElementString("contam_input_file");
+ soil_ratebox.Text = xreader.ReadElementString("soil_rate");
+ SiberiaBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("siberia"));
+ Beta1Box.Text = xreader.ReadElementString("beta1");
+ Beta3Box.Text = xreader.ReadElementString("beta3");
+ m1Box.Text = xreader.ReadElementString("m1");
+ m3Box.Text = xreader.ReadElementString("m3");
+ n1Box.Text = xreader.ReadElementString("n1");
+ Q2box.Text = xreader.ReadElementString("W_depth_erosion_threshold");
+ dum_string = xreader.ReadElementString("fexp");
+ div_inputs_box.Text = xreader.ReadElementString("div_inputs");
+
+ init_depth_box.Text = xreader.ReadElementString("initial_sand_depth");
+ slab_depth_box.Text = xreader.ReadElementString("maxslabdepth");
+ shadow_angle_box.Text = xreader.ReadElementString("angle");
+ upstream_check_box.Text = xreader.ReadElementString("checkup");
+ depo_prob_box.Text = xreader.ReadElementString("dep_probability");
+ offset_box.Text = xreader.ReadElementString("downstream_offset");
+ dune_time_box.Text = xreader.ReadElementString("dune_timestep");
+ dune_grid_size_box.Text = xreader.ReadElementString("dune_gridsize");
+
+ wilcockbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("wilcock"));
+ einsteinbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("einstein"));
+ DuneBox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("dune"));
+
+ UTMgridcheckbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("UTM"));
+ UTMsouthcheck.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("South"));
+ UTMzonebox.Text = xreader.ReadElementString("UTMzone");
+
+
+ raintimestepbox.Text = xreader.ReadElementString("raindatatimestep");
+ activebox.Text = xreader.ReadElementString("activelayerthickness");
+
+ // more add on's 21/5/2012
+ downstreamshiftbox.Text = xreader.ReadElementString("downstreamshift");
+ courantbox.Text = xreader.ReadElementString("courantnumber");
+ textBox4.Text = xreader.ReadElementString("hflow");
+ textBox7.Text = xreader.ReadElementString("lateralsmoothing");
+ textBox8.Text = xreader.ReadElementString("froude_limit");
+ textBox9.Text = xreader.ReadElementString("mannings");
+
+ checkBox3.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("TidalorStage"));
+ MinQmaxvalue.Text = xreader.ReadElementString("MinQmaxvalue");
+ TidalXmin.Text = xreader.ReadElementString("TidalXmin");
+ TidalXmax.Text = xreader.ReadElementString("TidalXmax");
+ TidalYmin.Text = xreader.ReadElementString("TidalYmin");
+ TidalYmax.Text = xreader.ReadElementString("TidalYmax");
+ TidalFileName.Text = xreader.ReadElementString("TidalFileName");
+ TidalInputStep.Text = xreader.ReadElementString("TidalInputStep");
+
+ // more add ons for bedrock erosion 19/1/14
+ bedrock_erosion_threshold_box.Text = xreader.ReadElementString("bedrock_erosion_threshold");
+ bedrock_erosion_rate_box.Text = xreader.ReadElementString("bedrock_erosion_rate");
+
+ // more add ons for spatially variable rainfall
+ rfnumBox.Text = xreader.ReadElementString("rfnum");
+ hydroindexBox.Text = xreader.ReadElementString("hydroindex");
+ checkBox7.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("MultiRainfall"));
+
+ // more addons for soil development and spatially variable mannings 28/8/2015
+ soildevbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("soildevbox"));
+ checkBox4.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("bedrocklowering"));
+ checkBox5.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("physicalweathering"));
+ checkBox6.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("chemicalweathering"));
+ textBox11.Text = xreader.ReadElementString("P1");
+ textBox12.Text = xreader.ReadElementString("b1");
+ textBox13.Text = xreader.ReadElementString("k1");
+ textBox14.Text = xreader.ReadElementString("c1");
+ textBox15.Text = xreader.ReadElementString("c2");
+ textBox16.Text = xreader.ReadElementString("k2");
+ textBox17.Text = xreader.ReadElementString("c3");
+ textBox18.Text = xreader.ReadElementString("c4");
+
+ SpatVarManningsCheckbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("SpatVarManningsCheckbox"));
+ textBox19.Text = xreader.ReadElementString("spatvarmanningsfilename");
+ mfiletimestepbox.Text = xreader.ReadElementString("mfiletimestepbox");
+ mvalueloadbox.Text = xreader.ReadElementString("mvalueloadbox");
+
+ // 5/12/16
+ meyerbox.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("meyer"));
+
+ //18/7/18
+ checkBox8.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("all_nine_grainsizes"));
+
+ // 11/9/18
+ radioButton1.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("oldveg"));
+ radioButton2.Checked = XmlConvert.ToBoolean(xreader.ReadElementString("newveg"));
+
+ xreader.ReadEndElement();
+ xreader.ReadEndElement();
+ }
+ catch
+ { };
+
+
+ xreader.Close();
+
+
+ this.Text = basetext + " (" + Path.GetFileName(cfgname) + ")";
+ button2.Enabled = true;
+ start_button.Enabled = false;
+ Panel1.Visible = false;
+ tabControl1.Visible = true;
+
+ }
+ }
+ }
+ // JMW - Config File Save & SaveAs Event Handler
+ private void menuItemConfigFileSave_Click(object sender, System.EventArgs e)
+ {
+ XmlTextWriter xwriter;
+
+ if ((sender == menuItemConfigFileSaveAs) || (cfgname == null))
+ {
+
+ SaveFileDialog saveFileDialog1 = new SaveFileDialog();
+
+ saveFileDialog1.InitialDirectory = workdir ;
+ saveFileDialog1.Filter = "cfg files (*.xml)|*.xml|All files (*.*)|*.*" ;
+ saveFileDialog1.FilterIndex = 1 ;
+ saveFileDialog1.RestoreDirectory = false ;
+
+ if(saveFileDialog1.ShowDialog() == DialogResult.OK)
+ {
+ cfgname = saveFileDialog1.FileName;
+ }
+
+ }
+
+ if (cfgname != null)
+ {
+
+ //Create a new XmlTextWriter.
+ xwriter = new XmlTextWriter(cfgname,System.Text.Encoding.UTF8);
+ //Write the beginning of the document including the
+ //document declaration. Standalone is true.
+ //Use indentation for readability.
+ xwriter.Formatting = Formatting.Indented;
+ xwriter.Indentation = 4;
+
+
+ xwriter.WriteStartDocument(true);
+
+ //Write the beginning of the "data" element. This is
+ //the opening tag to our data
+ xwriter.WriteStartElement("Parms");
+ xwriter.WriteStartElement("General-Parms");
+ xwriter.WriteElementString("headeroverride",XmlConvert.ToString(overrideheaderBox.Checked));
+ xwriter.WriteElementString("x-coordinate",xtextbox.Text);
+ xwriter.WriteElementString("y-coordinate",ytextbox.Text);
+ xwriter.WriteElementString("initscans",initscansbox.Text);
+ xwriter.WriteElementString("maxerodelimit",erodefactorbox.Text);
+ xwriter.WriteElementString("cellsize",dxbox.Text);
+ xwriter.WriteElementString("memorylimit",limitbox.Text);
+ xwriter.WriteElementString("minq",minqbox.Text);
+ xwriter.WriteElementString("creeprate",creepratebox.Text);
+ xwriter.WriteElementString("lateralerosionrate",lateralratebox.Text);
+ xwriter.WriteElementString("maxiter",itermaxbox.Text);
+ xwriter.WriteElementString("runstarttime",textBox1.Text);
+ xwriter.WriteElementString("maxrunduration",cyclemaxbox.Text);
+ xwriter.WriteElementString("slopefailurethreshold",slopebox.Text);
+ xwriter.WriteElementString("wssmoothingradius",smoothbox.Text);
+ xwriter.WriteElementString("mvalue",mvaluebox.Text);
+ xwriter.WriteElementString("growgrasstime",grasstextbox.Text);
+ xwriter.WriteElementString("initialq",textBox2.Text);
+ xwriter.WriteElementString("wssmoothing","false");
+ xwriter.WriteElementString("grass-sediment",XmlConvert.ToString(flowonlybox.Checked));
+ xwriter.WriteElementString("flowdistribution",textBox3.Text); // MJ 24/01/05
+ xwriter.WriteElementString("mintimestep",mintimestepbox.Text); // MJ 24/01/05
+ xwriter.WriteElementString("evaporation",k_evapBox.Text); // MJ 15/03/05
+ xwriter.WriteElementString("vegcritshear",vegTauCritBox.Text); // MJ 10/05/05
+ xwriter.WriteElementString("bedslope",XmlConvert.ToString(bedslope_box.Checked));
+ xwriter.WriteElementString("wsslope",XmlConvert.ToString(false));
+ xwriter.WriteElementString("veltaubox", XmlConvert.ToString(veltaubox.Checked));
+ xwriter.WriteElementString("catchment_mode",XmlConvert.ToString(catchment_mode_box.Checked));
+ xwriter.WriteElementString("reach_mode",XmlConvert.ToString(reach_mode_box.Checked));
+ xwriter.WriteElementString("lat1",XmlConvert.ToString(false));
+ xwriter.WriteElementString("lat2",XmlConvert.ToString(false));
+ xwriter.WriteElementString("lat3",XmlConvert.ToString(false));
+ xwriter.WriteElementString("cross_stream_grad", XmlConvert.ToString(0));
+ xwriter.WriteElementString("max_vel", max_vel_box.Text);
+
+
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","elevations");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem12.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","elevdiff");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem13.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","grainsize");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem14.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","total tracer g/s");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 1");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 2");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 3");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 4");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 5");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 6");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 7");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 8");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","tracer layer 9");
+ xwriter.WriteElementString("Checked", XmlConvert.ToString(false));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","water depth");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem25.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","d50");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem29.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","flow velocity");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem33.Checked));
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("SaveOptions");
+ xwriter.WriteElementString("Option","soil saturation");
+ xwriter.WriteElementString("Checked",XmlConvert.ToString(menuItem34.Checked));
+ xwriter.WriteEndElement();
+
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g1box.Text);
+ xwriter.WriteElementString("gp",gp1box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS1box.Checked));
+ xwriter.WriteElementString("fv",fallGS1box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g2box.Text);
+ xwriter.WriteElementString("gp",gp2box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS2box.Checked));
+ xwriter.WriteElementString("fv",fallGS2box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g3box.Text);
+ xwriter.WriteElementString("gp",gp3box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS3box.Checked));
+ xwriter.WriteElementString("fv",fallGS3box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g4box.Text);
+ xwriter.WriteElementString("gp",gp4box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS4box.Checked));
+ xwriter.WriteElementString("fv",fallGS4box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g5box.Text);
+ xwriter.WriteElementString("gp",gp5box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS5box.Checked));
+ xwriter.WriteElementString("fv",fallGS5box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g6box.Text);
+ xwriter.WriteElementString("gp",gp6box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS6box.Checked));
+ xwriter.WriteElementString("fv",fallGS6box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g7box.Text);
+ xwriter.WriteElementString("gp",gp7box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS7box.Checked));
+ xwriter.WriteElementString("fv",fallGS7box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g8box.Text);
+ xwriter.WriteElementString("gp",gp8box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS8box.Checked));
+ xwriter.WriteElementString("fv",fallGS8box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Grain-Size");
+ xwriter.WriteElementString("gs",g9box.Text);
+ xwriter.WriteElementString("gp",gp9box.Text);
+ xwriter.WriteElementString("ss",XmlConvert.ToString(suspGS9box.Checked));
+ xwriter.WriteElementString("fv",fallGS9box.Text);
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("File-Parms");
+
+ xwriter.WriteElementString("inputtimestep",input_time_step_box.Text);
+ xwriter.WriteElementString("saveinterval",saveintervalbox.Text);
+ xwriter.WriteElementString("savetologfileinterval",outputfilesaveintervalbox.Text);
+ xwriter.WriteElementString("tracerrun",XmlConvert.ToString(tracerbox.Checked));
+ xwriter.WriteElementString("uniquefilecheck",XmlConvert.ToString(uniquefilecheck.Checked));
+
+
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","DEM Data File");
+ xwriter.WriteElementString("Name",openfiletextbox.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Grain Data File");
+ xwriter.WriteElementString("Name",graindataloadbox.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Bedrock Data File");
+ xwriter.WriteElementString("Name",bedrockbox.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Rain Data File");
+ xwriter.WriteElementString("Name",raindataloadbox.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Tracer File");
+ xwriter.WriteElementString("Name",tracerfile.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Tracer Sed Vol File");
+ xwriter.WriteElementString("Name",tracerhydrofile.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Filenames");
+ xwriter.WriteElementString("Desc","Tracer Grain Size Data File");
+ xwriter.WriteElementString("Name","null");
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox1.Checked));
+ xwriter.WriteElementString("X",xbox1.Text);
+ xwriter.WriteElementString("Y",ybox1.Text);
+ xwriter.WriteElementString("Filename",infile1.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox2.Checked));
+ xwriter.WriteElementString("X",xbox2.Text);
+ xwriter.WriteElementString("Y",ybox2.Text);
+ xwriter.WriteElementString("Filename",infile2.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox3.Checked));
+ xwriter.WriteElementString("X",xbox3.Text);
+ xwriter.WriteElementString("Y",ybox3.Text);
+ xwriter.WriteElementString("Filename",infile3.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox4.Checked));
+ xwriter.WriteElementString("X",xbox4.Text);
+ xwriter.WriteElementString("Y",ybox4.Text);
+ xwriter.WriteElementString("Filename",infile4.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox5.Checked));
+ xwriter.WriteElementString("X",xbox5.Text);
+ xwriter.WriteElementString("Y",ybox5.Text);
+ xwriter.WriteElementString("Filename",infile5.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox6.Checked));
+ xwriter.WriteElementString("X",xbox6.Text);
+ xwriter.WriteElementString("Y",ybox6.Text);
+ xwriter.WriteElementString("Filename",infile6.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox7.Checked));
+ xwriter.WriteElementString("X",xbox7.Text);
+ xwriter.WriteElementString("Y",ybox7.Text);
+ xwriter.WriteElementString("Filename",infile7.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteStartElement("Sources");
+ xwriter.WriteElementString("input",XmlConvert.ToString(inbox8.Checked));
+ xwriter.WriteElementString("X",xbox8.Text);
+ xwriter.WriteElementString("Y",ybox8.Text);
+ xwriter.WriteElementString("Filename",infile8.Text);
+ xwriter.WriteEndElement();
+ xwriter.WriteEndElement();
+
+
+ xwriter.WriteStartElement("Description");
+ xwriter.WriteElementString("S",DescBox.Text);
+ xwriter.WriteEndElement();
+
+ //JMW 2004-11-11; updated MJ 24/01/05
+ xwriter.WriteStartElement("OutputFile-Parms");
+ xwriter.WriteElementString("generateavifile","false");
+ xwriter.WriteElementString("avifile","novalue");
+ xwriter.WriteElementString("avifreq",saveintervalbox.Text);
+ xwriter.WriteElementString("generatetimeseriesfile",XmlConvert.ToString(checkBoxGenerateTimeSeries.Checked));
+ xwriter.WriteElementString("timeseriesfile",TimeseriesOutBox.Text);
+ xwriter.WriteElementString("timeseriesfreq",outputfilesaveintervalbox.Text);
+ xwriter.WriteElementString("generateiterationsfile",XmlConvert.ToString(checkBoxGenerateIterations.Checked));
+ xwriter.WriteElementString("iterationsfile",IterationOutbox.Text);
+ xwriter.WriteEndElement();
+
+
+ xwriter.WriteStartElement("Display");
+ xwriter.WriteElementString("top",string.Format(" {0}",Form1.ActiveForm.Top));
+ xwriter.WriteElementString("left",string.Format(" {0}",Form1.ActiveForm.Left));
+ xwriter.WriteElementString("width",string.Format(" {0}",Form1.ActiveForm.Width));
+ xwriter.WriteElementString("height",string.Format(" {0}",Form1.ActiveForm.Height));
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Lateral");
+ xwriter.WriteElementString("oldlat",XmlConvert.ToString(false));
+ xwriter.WriteElementString("newlat",XmlConvert.ToString(newlateral.Checked));
+ xwriter.WriteEndElement();
+
+ xwriter.WriteStartElement("Add_Ons");
+ xwriter.WriteElementString("tracer-out", XmlConvert.ToString(tracerOutcheckBox.Checked));
+ xwriter.WriteElementString("tracer-out-filename", tracerOutputtextBox.Text);
+ xwriter.WriteElementString("google_animation", XmlConvert.ToString(googleAnimationCheckbox.Checked));
+ xwriter.WriteElementString("google_animation_file_name", googleAnimationTextBox.Text);
+ xwriter.WriteElementString("google_begin", googleBeginDate.Text);
+ xwriter.WriteElementString("google_interval", googAnimationSaveInterval.Text);
+ xwriter.WriteElementString("jMean", XmlConvert.ToString(jmeaninputfilebox.Checked));
+ xwriter.WriteElementString("edge_smoothing", avge_smoothbox.Text);
+ xwriter.WriteElementString("displacement", XmlConvert.ToString(false));
+ xwriter.WriteElementString("prop_remain", propremaining.Text);
+ xwriter.WriteElementString("max_time_step", max_time_step_Box.Text);
+ xwriter.WriteElementString("contam_input", XmlConvert.ToString(false));
+ xwriter.WriteElementString("mineX", "null");
+ xwriter.WriteElementString("mineY", "null");
+ xwriter.WriteElementString("contam_input_file", "null");
+ xwriter.WriteElementString("soil_rate", soil_ratebox.Text);
+ xwriter.WriteElementString("siberia", XmlConvert.ToString(SiberiaBox.Checked));
+ xwriter.WriteElementString("beta1", Beta1Box.Text);
+ xwriter.WriteElementString("beta3", Beta3Box.Text);
+ xwriter.WriteElementString("m1", m1Box.Text);
+ xwriter.WriteElementString("m3", m3Box.Text);
+ xwriter.WriteElementString("n1", n1Box.Text);
+ xwriter.WriteElementString("W_depth_erosion_threshold", Q2box.Text);
+ xwriter.WriteElementString("fexp",XmlConvert.ToString(1));
+ xwriter.WriteElementString("div_inputs",div_inputs_box.Text);
+ xwriter.WriteElementString("initial_sand_depth", init_depth_box.Text);
+ xwriter.WriteElementString("maxslabdepth", slab_depth_box.Text);
+ xwriter.WriteElementString("angle", shadow_angle_box.Text);
+ xwriter.WriteElementString("checkup", upstream_check_box.Text);
+ xwriter.WriteElementString("dep_probability", depo_prob_box.Text);
+ xwriter.WriteElementString("downstream_offset", offset_box.Text);
+ xwriter.WriteElementString("dune_timestep", dune_time_box.Text);
+ xwriter.WriteElementString("dune_gridsize", dune_grid_size_box.Text);
+ xwriter.WriteElementString("wilcock", XmlConvert.ToString(wilcockbox.Checked));
+ xwriter.WriteElementString("einstein", XmlConvert.ToString(einsteinbox.Checked));
+ xwriter.WriteElementString("dune", XmlConvert.ToString(DuneBox.Checked));
+ // three UTM interface elements
+ xwriter.WriteElementString("UTM", XmlConvert.ToString(UTMgridcheckbox.Checked));
+ xwriter.WriteElementString("South", XmlConvert.ToString(UTMsouthcheck.Checked));
+ xwriter.WriteElementString("UTMzone", UTMzonebox.Text);
+
+ xwriter.WriteElementString("raindatatimestep", raintimestepbox.Text);
+ xwriter.WriteElementString("activelayerthickness", activebox.Text);
+
+ // more add on's 21/5/2012
+
+ xwriter.WriteElementString("downstreamshift", downstreamshiftbox.Text);
+ xwriter.WriteElementString("courantnumber", courantbox.Text);
+ xwriter.WriteElementString("hflow", textBox4.Text);
+ xwriter.WriteElementString("lateralsmoothing", textBox7.Text);
+ xwriter.WriteElementString("froude_limit", textBox8.Text);
+ xwriter.WriteElementString("mannings", textBox9.Text);
+
+ // more add on's 4/7/13
+ xwriter.WriteElementString("TidalorStage", XmlConvert.ToString(checkBox3.Checked));
+ xwriter.WriteElementString("MinQmaxvalue", MinQmaxvalue.Text);
+ xwriter.WriteElementString("TidalXmin", TidalXmin.Text);
+ xwriter.WriteElementString("TidalXmax", TidalXmax.Text);
+ xwriter.WriteElementString("TidalYmin", TidalYmin.Text);
+ xwriter.WriteElementString("TidalYmax", TidalYmax.Text);
+ xwriter.WriteElementString("TidalFileName", TidalFileName.Text);
+ xwriter.WriteElementString("TidalInputStep", TidalInputStep.Text);
+
+ // more add ons for bedrock erosion 19/1/14
+ xwriter.WriteElementString("bedrock_erosion_threshold", bedrock_erosion_threshold_box.Text);
+ xwriter.WriteElementString("bedrock_erosion_rate", bedrock_erosion_rate_box.Text);
+
+ // more add ons for spatially variable rainfall
+ xwriter.WriteElementString("rfnum", rfnumBox.Text);
+ xwriter.WriteElementString("hydroindex", hydroindexBox.Text);
+ xwriter.WriteElementString("MultiRainfall", XmlConvert.ToString(checkBox7.Checked));
+
+ // more addons for soil development and spatially variable mannings 28/8/2015
+ xwriter.WriteElementString("soildevbox", XmlConvert.ToString(soildevbox.Checked));
+ xwriter.WriteElementString("bedrocklowering", XmlConvert.ToString(checkBox4.Checked));
+ xwriter.WriteElementString("physicalweathering", XmlConvert.ToString(checkBox5.Checked));
+ xwriter.WriteElementString("chemicalweathering", XmlConvert.ToString(checkBox6.Checked));
+ xwriter.WriteElementString("P1", textBox11.Text);
+ xwriter.WriteElementString("b1", textBox12.Text);
+ xwriter.WriteElementString("k1", textBox13.Text);
+ xwriter.WriteElementString("c1", textBox14.Text);
+ xwriter.WriteElementString("c2", textBox15.Text);
+ xwriter.WriteElementString("k2", textBox16.Text);
+ xwriter.WriteElementString("c3", textBox17.Text);
+ xwriter.WriteElementString("c4", textBox18.Text);
+
+ xwriter.WriteElementString("SpatVarManningsCheckbox", XmlConvert.ToString(SpatVarManningsCheckbox.Checked));
+ xwriter.WriteElementString("spatvarmanningsfilename", textBox19.Text);
+
+ // 4/10/15 spat variable mannings box
+ xwriter.WriteElementString("mfiletimestepbox", mfiletimestepbox.Text);
+ xwriter.WriteElementString("mvalueloadbox", mvalueloadbox.Text);
+
+ // 5/12/16
+ xwriter.WriteElementString("meyer", XmlConvert.ToString(meyerbox.Checked));
+ //18/7/18
+ xwriter.WriteElementString("all_nine_grainsizes", XmlConvert.ToString(checkBox8.Checked));
+ // 11/9/18
+ xwriter.WriteElementString("oldveg", XmlConvert.ToString(radioButton1.Checked));
+ xwriter.WriteElementString("newveg", XmlConvert.ToString(radioButton2.Checked));
+
+
+ //xwriter.WriteElementString();
+
+ xwriter.WriteEndElement();
+ xwriter.WriteEndElement();
+
+
+ //End the document
+ xwriter.WriteEndDocument();
+
+ //Flush the xml document to the underlying stream and
+ //close the underlying stream. The data will not be
+ //written out to the stream until either the Flush()
+ //method is called or the Close() method is called.
+ xwriter.Close();
+
+ this.Text = basetext + " (" + Path.GetFileName(cfgname) + ")";
+ }
+ }
+ private void suspCheckedChange(object sender, System.EventArgs e)
+ {
+ fallGS1box.Enabled = suspGS1box.Checked;
+ fallGS2box.Enabled = suspGS2box.Checked;
+ fallGS3box.Enabled = suspGS3box.Checked;
+ fallGS4box.Enabled = suspGS4box.Checked;
+ fallGS5box.Enabled = suspGS5box.Checked;
+ fallGS6box.Enabled = suspGS6box.Checked;
+ fallGS7box.Enabled = suspGS7box.Checked;
+ fallGS8box.Enabled = suspGS8box.Checked;
+ fallGS9box.Enabled = suspGS9box.Checked;
+ }
+ private void fracGSchanged(object sender, System.EventArgs e)
+ {
+ double sum;
+
+ sum = 0.0;
+ if (gp1box.Text != "") sum += double.Parse(gp1box.Text);
+ if (gp2box.Text != "") sum += double.Parse(gp2box.Text);
+ if (gp3box.Text != "") sum += double.Parse(gp3box.Text);
+ if (gp4box.Text != "") sum += double.Parse(gp4box.Text);
+ if (gp5box.Text != "") sum += double.Parse(gp5box.Text);
+ if (gp6box.Text != "") sum += double.Parse(gp6box.Text);
+ if (gp7box.Text != "") sum += double.Parse(gp7box.Text);
+ if (gp8box.Text != "") sum += double.Parse(gp8box.Text);
+ if (gp9box.Text != "") sum += double.Parse(gp9box.Text);
+
+ if (Math.Abs(sum-1.0) < 0.000000001)
+ {
+ gpSumLabel.Text = "OK";
+ gpSumLabel.ForeColor = Color.Black;
+ gpSumLabel2.ForeColor = Color.Black;
+ }
+ else
+ {
+ gpSumLabel.Text = string.Format("{0:F8}",sum);
+ gpSumLabel.ForeColor = Color.Red;
+ gpSumLabel2.ForeColor = Color.Red;
+ }
+ }
+ private void button4_Click_1(object sender, System.EventArgs e)
+ {
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void overrideheaderBox_CheckedChanged(object sender, System.EventArgs e)
+ {
+ label1.Enabled = overrideheaderBox.Checked;
+ label2.Enabled = overrideheaderBox.Checked;
+ label11.Enabled = overrideheaderBox.Checked;
+ xtextbox.Enabled = overrideheaderBox.Checked;
+ ytextbox.Enabled = overrideheaderBox.Checked;
+ dxbox.Enabled = overrideheaderBox.Checked;
+ }
+ private void checkBox1_CheckedChanged(object sender, System.EventArgs e)
+ {
+
+ }
+ private void bedslope_box_CheckedChanged(object sender, System.EventArgs e)
+ {
+ if(bedslope_box.Checked==true){
+ veltaubox.Checked=false;
+ bedslopebox2.Checked = false;
+ }
+ }
+ private void newlateral_CheckedChanged(object sender, System.EventArgs e)
+ {
+
+ if (newlateral.Checked == true) nolateral.Checked = false;
+ }
+ private void label54_Click(object sender, System.EventArgs e)
+ {
+
+ }
+ private void button5_Click(object sender, System.EventArgs e)
+ {
+ Form1.ActiveForm.Show();
+ }
+ private void button5_Click_1(object sender, System.EventArgs e)
+ {
+ get_area();
+ }
+ private void veltaubox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (veltaubox.Checked == true)
+ {
+
+ bedslope_box.Checked = false;
+ bedslopebox2.Checked = false;
+ }
+ }
+ private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
+ {
+ erodedepo();
+ }
+ private void nolateral_CheckedChanged(object sender, EventArgs e)
+ {
+
+ if (nolateral.Checked == true) newlateral.Checked = false;
+ }
+ private void Form1_Resize(object sender, EventArgs e)
+ {
+ zoomPanImageBox1.Height = this.Height - 225;
+ zoomPanImageBox1.Width = this.Width - 20;
+ }
+ private void zoomPanImageBox1_Load(object sender, EventArgs e)
+ {
+
+ }
+ private void trackBar1_Scroll(object sender, EventArgs e)
+ {
+ contrastMultiplier = contrastFactor[trackBar1.Value];
+ drawwater(mygraphics);
+ }
+ private void trackBar2_Scroll(object sender, EventArgs e)
+ {
+ magnifyValue = zoomFactor[this.trackBar2.Value];
+ zoomPanImageBox1.setZoom();
+ }
+ private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
+ {
+ updateClick = 1;
+ this.Refresh();
+ drawwater(mygraphics);
+ }
+ private void n1Box_TextChanged(object sender, EventArgs e)
+ {
+
+ }
+ private void graphicToGoogleEarthButton_Click(object sender, EventArgs e)
+ {
+ if (coordinateDone == 0)
+ {
+ //transfrom coordinates
+ point testPoint = new point(xll, yll);
+ if (UTMgridcheckbox.Checked)
+ {
+ testPoint.UTMzone = System.Convert.ToInt32(UTMzonebox.Text);
+ testPoint.south = System.Convert.ToBoolean(UTMsouthcheck.Checked);
+ testPoint.transformUTMPoint();
+ }
+ else
+ {
+ testPoint.transformPoint();
+ }
+ yurcorner = yll + (System.Convert.ToDouble(ymax) * System.Convert.ToDouble(DX));
+ xurcorner = xll + (System.Convert.ToDouble(xmax) * System.Convert.ToDouble(DX));
+ point testPoint2 = new point(xurcorner, yurcorner);
+ if (UTMgridcheckbox.Checked)
+ {
+ testPoint2.UTMzone = System.Convert.ToInt32(UTMzonebox.Text);
+ testPoint2.south = System.Convert.ToBoolean(UTMsouthcheck.Checked);
+ testPoint2.transformUTMPoint();
+ }
+ else
+ {
+ testPoint2.transformPoint();
+ }
+
+
+
+ urfinalLati = testPoint2.ycoord;
+ urfinalLongi = testPoint2.xcoord;
+ llfinalLati = testPoint.ycoord;
+ llfinalLongi = testPoint.xcoord;
+ coordinateDone = 1;
+ }
+
+ //Save image
+ m_objDrawingSurface.MakeTransparent();
+ m_objDrawingSurface.Save(@"mysavedimage" + imageCount + ".png", System.Drawing.Imaging.ImageFormat.Png);
+ //create kml file for image
+ string kml_file_name = "image" + imageCount + ".kml";
+ StreamWriter kmlsr = File.CreateText(kml_file_name);
+ string kml = @"
+
+
+ Untitled Image Overlay";
+ kml = kml + "\n"
+ + "\nmySavedImage" + imageCount + ".png"
+ + "\n"
+ + "\n";
+ kml = kml + "\n" + urfinalLati + ""
+ + "\n" + llfinalLati + ""
+ + "\n" + urfinalLongi + ""
+ + "\n" + llfinalLongi + "\n";
+ kml = kml + @"
+
+
+ ";
+ kmlsr.Write(kml);
+ kmlsr.Close();
+ imageCount++;
+ }
+ private void einsteinbox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (wilcockbox.Checked == true) wilcockbox.Checked = false;
+ if (meyerbox.Checked == true) meyerbox.Checked = false;
+ }
+ private void wilcockbox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (einsteinbox.Checked == true) einsteinbox.Checked = false;
+ if (meyerbox.Checked == true) meyerbox.Checked = false;
+ }
+ private void HydrologyTab_Click(object sender, EventArgs e)
+ {
+
+ }
+ private void button6_Click(object sender, EventArgs e)
+ {
+ int x, y;
+ for (x = 1; x <= xmax; x++)
+ {
+ for (y = 1; y <= ymax; y++)
+ {
+ if (x > 0 && x <= 200) elev[x, y] += 1;
+ }
+ }
+ }
+ private void checkBox1_CheckedChanged_1(object sender, EventArgs e)
+ {
+ if (checkBox1.Checked==false) tabControl1.Visible = false;
+ if (checkBox1.Checked == true) tabControl1.Visible = true;
+ }
+ private void tabPage5_Click(object sender, EventArgs e)
+ {
+
+ }
+ private void label88_Click(object sender, EventArgs e)
+ {
+
+ }
+ private void textBox12_TextChanged(object sender, EventArgs e)
+ {
+
+ }
+ private void label58_Click(object sender, EventArgs e)
+ {
+
+ }
+ private void checkBox4_CheckedChanged(object sender, EventArgs e)
+ {
+ if (UTMgridcheckbox.Checked)
+ {
+ UTMzonebox.Visible = true;
+ textBox6.Visible = true;
+ UTMsouthcheck.Visible = true;
+ groupBox4.Visible = true;
+ }
+ }
+ private void bedslopebox2_CheckedChanged(object sender, EventArgs e)
+ {
+ if (bedslopebox2.Checked == true)
+ {
+ veltaubox.Checked = false;
+ bedslope_box.Checked = false;
+
+
+ }
+ }
+ private void UTMgridcheckbox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (UTMgridcheckbox.Checked)
+ {
+ UTMzonebox.Visible = true;
+ textBox6.Visible = true;
+ UTMsouthcheck.Visible = true;
+ groupBox4.Visible = true;
+ }
+
+ }
+ private void mouseclick2(object sender, MouseEventArgs e)
+ {
+
+ }
+
+ private void checkBox2_CheckedChanged(object sender, EventArgs e)
+ {
+
+ if (checkBox2.Checked == true)
+ {
+ CAESAR_lisflood_1._0.Form2 secondForm = new CAESAR_lisflood_1._0.Form2();
+ secondForm.Show();
+
+ }
+
+ }
+
+ private void checkBox7_CheckedChanged(object sender, EventArgs e)
+ {
+ if (checkBox7.Checked == true)
+ {
+ rfnumBox.Visible=true;
+ hydroindexBox.Visible = true;
+ label102.Visible = true;
+ label103.Visible = true;
+ }
+ }
+
+ private void SpatVarManningsCheckbox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (SpatVarManningsCheckbox.Checked == true)
+ {
+ textBox19.Visible = true;
+ label104.Visible = true;
+
+ }
+ }
+
+ private void meyerbox_CheckedChanged(object sender, EventArgs e)
+ {
+ if (wilcockbox.Checked == true) wilcockbox.Checked = false;
+ if (einsteinbox.Checked == true) einsteinbox.Checked = false;
+ }
+
+ }
+
+
+
+ class point
+ {
+ //lat long variables
+ public double xcoord;
+ public double ycoord;
+ public int UTMzone;
+ public bool south;
+ double transParallelX = 446.448;
+ double transParallelY = -125.157;
+ double transParallelZ = 542.060;
+ double scaleChange = -20.4894 * 0.000001;
+ double rotX = (0.1502 / 3600) * (Math.PI / 180);
+ double rotY = (0.2470 / 3600) * (Math.PI / 180);
+ double rotZ = (0.8421 / 3600) * (Math.PI / 180);
+ double a = 6377563.396; //airy 1830 semi-major axis
+ double b = 6356256.910; //airy 1830 semi-minor axis
+ double a2 = 6378137.000;
+ double b2 = 6356752.3142;
+ double eSquared = 0;
+ double eSquared2 = 0;
+ double nO = -100000;//northing of true origin
+ double eO = 400000;//easting of true origin
+ double fO = 0.9996012717;//scale factor
+ double latTrue = 49.0 * (Math.PI / 180.0);//latitude of true origin
+ double longTrue = -2.0 * (Math.PI / 180.0);//longitude of true origin
+ double psiHash, MBig, v, v2, v3, nLittle, rho, nSquare = 0;
+ double vii, viii, ix, Tx2, xi, xii, xiia = 0;
+ double helmertX, helmertY, helmertZ, cartX, cartY, cartZ;
+ double Height2 = 0;
+ double finalLati, finalLongi, latiRad, longiRad = 0;
+ double rootXYSqr = 0;
+ double PHI1, PHI2, PHI = 0;
+
+ public point(double theXcoord, double theYcoord)//constructor
+ {
+ this.xcoord = theXcoord;
+ this.ycoord = theYcoord;
+ }
+
+ public void transformPoint()//british os to lat long
+ {
+ eSquared = (Math.Pow(a, 2) - Math.Pow(b, 2)) / Math.Pow(a, 2);
+ Height2 = 0;
+
+ //OSGB36 easting and northing to OSGB36 latitude and longitude (lower left corner of DTM)
+ psiHash = ((this.ycoord - nO) / (a * fO)) + latTrue;
+ nLittle = (a - b) / (a + b);
+ MBig = b * fO * (((1 + nLittle + ((5.0 / 4.0) * Math.Pow(nLittle, 2)) + ((5.0 / 4.0) * Math.Pow(nLittle, 3))) * (psiHash -
+ latTrue))
+ - (((3.0 * nLittle) + (3.0 * Math.Pow(nLittle, 2)) + ((21.0 / 8.0) * Math.Pow(nLittle, 3))) *
+ Math.Sin(psiHash - latTrue) * Math.Cos(psiHash + latTrue))
+ + (((15.0 / 8.0 * Math.Pow(nLittle, 2)) + (15.0 / 8.0 * Math.Pow(nLittle, 3))) * Math.Sin(2.0 * (psiHash - latTrue)) * Math.Cos(2.0 * (psiHash + latTrue)))
+ - ((35.0 / 24.0 * Math.Pow(nLittle, 3)) * Math.Sin(3.0 * (psiHash - latTrue)) * Math.Cos(3.0 * (psiHash + latTrue))));
+ if (Math.Abs((this.ycoord - nO - MBig)) >= 0.01)
+ {
+ while (Math.Abs((this.ycoord - nO - MBig)) >= 0.01)
+ {
+ psiHash = ((this.ycoord - nO - MBig) / (a * fO)) + psiHash;
+ MBig = b * fO * (((1 + nLittle + ((5.0 / 4.0) * Math.Pow(nLittle, 2)) + ((5.0 / 4.0) * Math.Pow(nLittle, 3))) * (psiHash -
+ latTrue))
+ - (((3.0 * nLittle) + (3.0 * Math.Pow(nLittle, 2)) + ((21.0 / 8.0) * Math.Pow(nLittle, 3))) *
+ Math.Sin(psiHash - latTrue) * Math.Cos(psiHash + latTrue))
+ + (((15.0 / 8.0 * Math.Pow(nLittle, 2)) + (15.0 / 8.0 * Math.Pow(nLittle, 3))) * Math.Sin(2.0 * (psiHash - latTrue)) * Math.Cos(2.0 * (psiHash + latTrue)))
+ - ((35.0 / 24.0 * Math.Pow(nLittle, 3)) * Math.Sin(3.0 * (psiHash - latTrue)) * Math.Cos(3.0 * (psiHash + latTrue))));
+ }
+ }
+ v = a * fO * Math.Pow(1 - eSquared * Math.Pow(Math.Sin(psiHash), 2), -.5);
+ rho = a * fO * (1 - eSquared) * Math.Pow(1.0 - eSquared * Math.Pow(Math.Sin(psiHash), 2), -1.5);
+ nSquare = v / rho - 1.0;
+ vii = (Math.Tan(psiHash)) / (2.0 * rho * v);
+ viii = ((Math.Tan(psiHash)) / (24.0 * rho * Math.Pow(v, 3))) * (5 + 3.0 * Math.Pow(Math.Tan(psiHash), 2) + nSquare - 9.0 * (Math.Pow(Math.Tan(psiHash), 2) * nSquare));
+ ix = (Math.Tan(psiHash) / ((720.0 * rho * Math.Pow(v, 5)))) * (61 + 90.0 * Math.Pow(Math.Tan(psiHash), 2) + 45.0 * Math.Pow(Math.Tan(psiHash), 4));
+ Tx2 = (1.0 / Math.Cos(psiHash)) / v;
+ xi = (1.0 / Math.Cos(psiHash)) / (6.0 * Math.Pow(v, 3)) * ((v / rho) + (2.0 * Math.Pow(Math.Tan(psiHash), 2)));
+ xii = (1.0 / Math.Cos(psiHash)) / (120.0 * Math.Pow(v, 5)) * (5.0 + (28.0 * Math.Pow(Math.Tan(psiHash), 2)) + (24.0 * Math.Pow(Math.Tan(psiHash), 4)));
+ xiia = ((1.0 / Math.Cos(psiHash)) / (5040.0 * Math.Pow(v, 7))) * (61.0 + (662.0 * Math.Pow(Math.Tan(psiHash), 2)) + (1320.0 * Math.Pow(Math.Tan(psiHash), 4)) + (720.0 * Math.Pow(Math.Tan(psiHash), 6)));
+ latiRad = psiHash - (vii * Math.Pow((this.xcoord - eO), 2)) + (viii * Math.Pow((this.xcoord - eO), 4)) - (ix * Math.Pow((this.xcoord - eO), 6));
+ longiRad = longTrue + (Tx2 * (this.xcoord - eO)) - (xi * (Math.Pow((this.xcoord - eO), 3))) + (xii * (Math.Pow((this.xcoord - eO), 5))) - (xiia * (Math.Pow((this.xcoord - eO), 7)));
+ //Console.WriteLine(latiRad * (180 / Math.PI));
+ //Console.WriteLine(longiRad * (180 / Math.PI));
+ //OSGB36 Latitude Longitude Height to OSGB36 Cartesian XYZ
+ v2 = a / (Math.Sqrt(1 - (eSquared * ((Math.Pow(Math.Sin(latiRad), 2))))));
+ cartX = (v2 + Height2) * Math.Cos(latiRad) * Math.Cos(longiRad);
+ cartY = (v2 + Height2) * (Math.Cos(latiRad) * Math.Sin(longiRad));
+ cartZ = ((v2 * (1 - eSquared)) + Height2) * Math.Sin(latiRad);
+ //Console.WriteLine();
+ //Console.WriteLine(cartX);
+ //Console.WriteLine(cartY);
+ //Helmert Datum Transformation (OSGB36 to WGS84)
+ helmertX = cartX + (cartX * scaleChange) - (cartY * rotZ) + (cartZ * rotY) + transParallelX;
+ helmertY = (cartX * rotZ) + cartY + (cartY * scaleChange) - (cartZ * rotX) + transParallelY;
+ helmertZ = (-1 * cartX * rotY) + (cartY * rotX) + cartZ + (cartZ * scaleChange) + transParallelZ;
+ //Console.WriteLine();
+ //Console.WriteLine(helmertX);
+ //Console.WriteLine(helmertY);
+ //WGS84 Cartesian XYZ to WGS84 Latitude, longitude and Ellipsoidal height
+ rootXYSqr = Math.Sqrt((Math.Pow(helmertX, 2)) + (Math.Pow(helmertY, 2)));
+ eSquared2 = (Math.Pow(a2, 2) - Math.Pow(b2, 2)) / Math.Pow(a2, 2);
+ PHI1 = Math.Atan(helmertZ / (rootXYSqr * (1 - eSquared2)));
+ v3 = a2 / (Math.Sqrt(1.0 - (eSquared2 * ((Math.Pow(Math.Sin(PHI1), 2))))));
+ PHI2 = Math.Atan((helmertZ + (eSquared2 * v3 * (Math.Sin(PHI1)))) / rootXYSqr);
+ while (Math.Abs(PHI1 - PHI2) > 0.000000001)
+ {
+ PHI1 = PHI2;
+ v3 = a2 / (Math.Sqrt(1 - (eSquared2 * ((Math.Pow(Math.Sin(PHI1), 2))))));
+ PHI2 = Math.Atan((helmertZ + (eSquared2 * v3 * (Math.Sin(PHI1)))) / rootXYSqr);
+ }
+ PHI = PHI2;
+ finalLati = PHI * (180.0 / Math.PI);
+ finalLongi = (Math.Atan(helmertY / helmertX)) * (180.0 / Math.PI);
+ this.xcoord = finalLongi;
+ this.ycoord = finalLati;
+ }
+
+ public void transformUTMPoint()
+ {
+ //transforms coordinates in UTM WGS84 to lat long
+ //requires x, y, zone and north/south
+ //the code in this function was found at http://home.hiwaay.net/~taylorc/toolbox/geography/geoutm.html
+ //made by Chuck Taylor
+ //tested in xls for points in Poland, Turkey and South Africa
+
+ // The code first calculates TM coordinates from UTM coordinates
+ // Then calculates corresponding latitude and longitude in radians
+ // Before converting back to degrees
+
+ // first version ArT 12-06-09
+
+ double footpointlatitude = 0;
+ double UTMscalefactor = 0.9996;
+ double centralmeridian_deg = 0;
+ double centralmeridian_rad = 0;
+ double y_ = 0;
+ double WGS84_sm_a = 6378137;
+ double WGS84_sm_b = 6356752.314;
+ double n = (WGS84_sm_a-WGS84_sm_b) / (WGS84_sm_a+WGS84_sm_b);
+
+ this.xcoord = (this.xcoord - 500000) / UTMscalefactor;
+ if (this.south) this.ycoord = (this.ycoord - 10000000) / UTMscalefactor;
+ else this.ycoord /= UTMscalefactor;
+
+ centralmeridian_deg = -183 + (this.UTMzone * 6);
+ centralmeridian_rad = centralmeridian_deg / 180 * Math.PI;
+
+ double alpha = (((WGS84_sm_a+WGS84_sm_b)/2)*(1+Math.Pow(n,2)/4)+(Math.Pow(n,4)/64));
+ double beta = (3*n/2)+(-27*Math.Pow(n,3)/32)+(269*Math.Pow(n,5)/512);
+ double gamma = (21*Math.Pow(n,2)/16)+(-55*Math.Pow(n,4)/32);
+ double delta = (151*Math.Pow(n,3)/96)+(-417*Math.Pow(n,5)/128);
+ double epsilon = (1097*Math.Pow(n,4)/512);
+
+ y_ = this.ycoord / (alpha);
+ footpointlatitude = y_ + (beta*Math.Sin(2*y_)) + (gamma*Math.Sin(4*y_)) + (delta*Math.Sin(6*y_)) + (epsilon*Math.Sin(8*y_));
+
+ double ep2 = (Math.Pow(WGS84_sm_a,2)-Math.Pow(WGS84_sm_b,2)) / Math.Pow(WGS84_sm_b,2);
+ double cf = Math.Cos(footpointlatitude);
+ double nuf2 = ep2*Math.Pow(cf,2);
+ double nf = Math.Pow(WGS84_sm_a,2)/(WGS84_sm_b*Math.Sqrt(1+nuf2));
+
+ double tf = Math.Tan(footpointlatitude);
+ double tf2 = Math.Pow(tf,2);
+ double tf4 = Math.Pow(tf,4);
+
+ double x1frac = 1 /(1* Math.Pow(nf,1) * cf);
+ double x2frac = tf /(2* Math.Pow(nf,2));
+ double x3frac = 1 /(6* Math.Pow(nf,3) * cf);
+ double x4frac = tf /(24* Math.Pow(nf,4));
+ double x5frac = 1 /(120* Math.Pow(nf,5) * cf);
+ double x6frac = tf /(720* Math.Pow(nf,6));
+ double x7frac = 1 /(5040* Math.Pow(nf,7) * cf);
+ double x8frac = tf /(40320*Math.Pow(nf,8));
+
+ double x2poly = -1 - nuf2;
+ double x3poly = -1 - nuf2 - (2*tf2);
+ double x4poly = 5 + 3*tf2+6*nuf2-6*tf2*nuf2-3*Math.Pow(nuf2,2)-9*tf2*nuf2*nuf2;
+ double x5poly = 5 + 28*tf2+24*tf4+6*nuf2+8*tf2*nuf2;
+ double x6poly = -61 - 90*tf2-45*tf4-107*nuf2+162*tf2*nuf2;
+ double x7poly = -61 - 662*tf2-1320*tf4-720*tf4*tf2;
+ double x8poly = 1385 + 3633*tf2+4095*tf4+1575*tf4*tf2;
+
+ double latitude = footpointlatitude
+ + x2frac*x2poly*Math.Pow(this.xcoord,2)
+ + x4frac*x4poly*Math.Pow(this.xcoord,4)
+ + x6frac*x6poly*Math.Pow(this.xcoord,6)
+ + x8frac*x8poly*Math.Pow(this.xcoord,8);
+ double longitude = centralmeridian_rad
+ + x1frac * 1 *Math.Pow(this.xcoord,1)
+ + x3frac*x3poly*Math.Pow(this.xcoord,3)
+ + x5frac*x5poly*Math.Pow(this.xcoord,5)
+ + x7frac*x7poly*Math.Pow(this.xcoord,7);
+
+ this.ycoord = latitude / Math.PI * 180;
+ this.xcoord = longitude / Math.PI * 180;
+ }
+
+ }
+
+
+}
+
+
+
+